1、如何使用“执行JS”命令来直接操作网页里的iframe里的元素呢(比如新增、删除、修改、点击某个元素)?
关键的秘诀是,需要使用html里iframe元素自带的contentDocument方法,实现外层与内层的贯穿:
比如:
外层的iframe的JS路径是——
document.querySelector("body > div > iframe")
则:
document.querySelector("body > div > iframe").contentDocument 即代表iframe里的整个内容文档。
因此,要选中iframe里的元素,就要在这基础上,再往里写选择器:比如要选中该iframe里的#inner_1_div元素,则如下写即可——
document.querySelector("body > div > iframe").contentDocument.querySelector("#inner_1_div")
上图里,UIBOT最终的执行JS命令的代码就是:
sRet = WebBrowser.RunJS(hWeb,'''function(){document.querySelector("body> div > iframe").contentDocument.querySelector("#inner_1_div").click();return123}''',True,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200})
2、如何使用“执行JS”命令来直接操作网页里的iframe里的函数function呢?
关键的秘诀是,需要使用html里iframe元素自带的contentWindow方法,实现外层与内层的贯穿:
还是上面的例子网页,要执行iframe里的clickInner函数,只需:
document.querySelector("body > div > iframe").contentWindow.clickInner()
总之,内嵌iframe时,主要就是记住3个点:
1、要操作iframe里的元素,则使用:contentDocument
2、要操作iframe里的函数,则使用:contentWindow
3、检查是否跨域,如果跨域,很有可能JS就无法操作内嵌iframe里的元素了!!!
即:如果你操作的网页,内嵌的iframe是其他网站的网页,不是当前网页的网站,则很有可能你无法用JS操作内嵌iframe里的元素!!!(即使你按针对跨域的办法,设置了浏览器允许跨域的配置,但也可能毫无用处!!!运气好还能继续操作,具体原因暂时没弄明白哈哈)
本贴所用的示例网页的HTML源码文件见附件~