selenium处理iframe下 #document 标签

Posted 天马行宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium处理iframe下 #document 标签相关的知识,希望对你有一定的参考价值。

 

使用selenium处理html的时候,遇到通过“iframe”标签实现的网页嵌套了,这个没有问题。但是,仔细再看,就发现,“iframe”标签下还有个#document==0,有点不讲武德。如图:

 

 

 

各种查资料,没有找到有价值的信息。

 

解决方案1:

  最后我就直接在html中把 “#document” 这行给删了,然后就正常了。

解决方案2:

  遇到了这篇文章: https://www.pythonf.cn/read/159594, 感谢大佬指点。

  

  操作流程是:

    进入frame框架内,获取frame框架页面源码,(解析frame源代码),退出frame框架

  具体代码:

from selenium import webdriver
driver = webdriver.Chrome()
url = XXXXXXXXXXX  #自己把地址补充
driver.get(url)
#############流程1
# 通过switch_to.frame进入frame框架页面,有下面四种情况
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])  # 1.用WebElement对象来定位,发现所有iframe,并把第一个赋值

# driver.switch_to.frame("frame1")  # 2.用id来定位
# driver.switch_to.frame("myframe")  # 3.用name来定位
# driver.switch_to.frame(0)  # 4.用frame的index来定位,第一个是0

##############流程2
frame_html = driver.page_source   # 响应为 str 格式
# 切换为frame框架页面后,可以通过BeatifulSoup等工具解析frame_html网页代码

##############流程4
# 从frame中切回主文档(switch_to.default_content())
driver.switch_to.default_content()

html = driver.page_source
# 这里的html变回主页面的了

 

这个套操作下来,嵌套的html内容就拿到了,因为  响应 frame_html 为 str 格式,

但是,我最初的目的是:想检测这个嵌套的html是多长时间加载完的,最终还是没有找到方法。

 

以上是关于selenium处理iframe下 #document 标签的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium练习篇之14-处理iframe切换/处理Alert弹窗

关于Selenium3+python3.6自动化测试中iframe切换

selenium自动化测试-处理iframe

selenium处理iframe和动作链

iframe 内 Web 元素的 QuerySelector

爬虫进阶Selenium处理iframe, 多窗口调度