selenium常用操作之iframe操作

iframe:一个网页里面嵌套了另一个框架/页面,即在一个HTML页面中还内嵌了另外一个HTML页面,只不过这个内嵌的HTML是放在</frame></iframe>标签对中。

在python3.8中对应的selenium提供了两种方法来获取iframe中的内容:

方式一:driver.switvh_to.frame(frame_reference)

语法:

driver.switch_to.frame(iframe的name属性或webelement对象或下标)

示例:

driver.switch_to.frame(“login_frame_qq”)#切换到name为login_frame_qq的iframe中
driver.switvh_to.frame(0)#切换到第一个iframe中
driver.switch_to.frame((By.xpath,"//div[@class="ptlogin_wrap"]))

 方式二:frame_to_be_available_and_switch_to_it(frame_reference)

在前面的selenium常用操作之等待操作中我们有介绍过,expected_conditons模块中提供的方法。

此方法会判断iframe是否可用,并且会自动切换到iframe中。

frame_reference的值与方式一保持一致。

示例:


from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it(iframe_name))

  

当页面中iframe中还有iframe时,假如此时我们想进入二级iframe,则需要先进入一级iframe,再进入二级iframe。

#iframeId为一级iframe的id
driver.switch_to_frame("iframeId")
#iframeId下有两个并列的iframe,但是他们没有id和name,此时我们可以通过tag_name获取
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[1])

这样我们就进入了一级iframeId下的iframe了!

 

selenium跳出iframe

①从二级iframe跳到一级iframe,即跳到父级:

driver.switchTo().parentFrame();
#或者
driver.switch_to.parent_frame()

②从iframe跳到主窗口

driver.switch_to_default_content()
#或者
driver.switch_to.default_content()
posted @ 2020-03-12 18:40  吃个鱼丸  阅读(3807)  评论(0编辑  收藏  举报