selenium定位多个嵌套iframe

时光怂恿深爱的人放手 提交于 2020-10-03 00:13:46

一. driver.switch_to.frame(id):可以通过id切换到iframe

之前学习了selenium切换到iframe的方法,代码如下

from selenium import webdriver
driver = webdriver.Chrome()

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

源码中并没有说可以通过id定位,但事实上是可以的

 

一定要注意,对于并列的iframe,我们可以用下标表示,但是嵌套的,除了第一个可以用下标0表示外,其他都不行

#并列的iframe

iframe ---------------------------下标0
   |
   |
   |
iframe----------------------------下标1
   |
   |
   |
iframe----------------------------下标2
#嵌套的iframe

iframe -----------------------------------id="f1"


    iframe ------------------------------------id="f2"


            iframe -------------------------------------id="f3"

2. 通过id定位

#先找到iframe1(id="f1")
driver.switch_to.frame("f1")
#再找到其下面的iframe2(id="f2")
driver.switch_to.frame("f2")

完美解决,还有一个问题,我们要向从切到上级iframe,应该如何实现

3. 从子iframe切到父iframe

selenium提供了一个类似"后退"的方法,如下

driver.switch_to.parent_frame()  # 如果当前已是主文档,则无效果

三. 总结

对于iframe处理,目前主要有三种方法

1 driver.switch_to.frame(reference)
2 driver.switch_to.parent_frame()
3 driver.switch_to.default_content()

其中第一种iframe的切换的参数有4个: idex, id, name, webelement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!