Selenium frame 切换处理

HTML 中,frame 标签有3种类型:frameset、frame、iframe。

对于 frameset ,跟其他普通标签没有区别,都可以正常定位。

frame 与 iframe 属于特殊的一种类型,它们内部会包含一个被嵌入的另一份 HTML 文档。

在使用 Selenium 打开网页时,并不包含被嵌入的 HTML 文档。

如果需要操作被嵌入的 HTML 文档内的元素,必须将 操作范围 切换到被嵌入的 HTML 文档中。

Selenium 提供的方法是:

WebDriver.switch_to.frame(frame_reference)

其中, frame_reference 可以是 frame 元素的属性 name 或者 id 的属性值(默认定位方式)

另外一种情况,如果没有属性 name 或者 id,可以先定位到 frame 元素,再进行切换

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.get("https://mail.163.com/")  # 跳转至测试页面
sleep(1)
frame_element = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 先定位到 iframe 元素
driver.switch_to.frame(frame_element)  # 切换到 iframe 元素内部
element = driver.find_element_by_name("email")  # 定位元素
element.send_keys("123456789")  # 输入内容
sleep(3)

driver.quit()  # 关闭浏览器

如果需要重新切换出来定位元素,Selenium 提供的方法:

序号方法/属性描述
1WebDriver.switch_to.default_content()返回主文档
2WebDriver.switch_to.parent_frame()返回父文档

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.get("https://mail.163.com/")  # 跳转至测试页面
sleep(1)
frame_element = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 先定位到 iframe 元素
driver.switch_to.frame(frame_element)  # 切换到 iframe 元素内部
element = driver.find_element_by_name("email")  # 定位元素
element.send_keys("123456789")  # 输入内容
sleep(2)
driver.switch_to.parent_frame()  # 返回到父文档
# driver.switch_to.default_content()  # 返回到主文档
element1 = driver.find_element_by_link_text("VIP邮箱")  # 定位元素
element1.click()  # 点击

sleep(3)

driver.quit()  # 关闭浏览器

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖遥Janic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值