selenium多表单切换

在 web 应用中经常会遇到 frame 嵌套页面的应用,页 WebDriver 每次只能在一个页面上识别元素,对于 frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过 switch_to_frame()方法将当前定位的主体切换了 frame 里。

在上面的 html 代码中通过 iframe 表单嵌入一个百度页面,通过浏览器打开如下图

 

这个时候直接定位百度的输入框一定会报找不到元素的错误。那么可以使用 switch_to_frame()先找到frame.html 中的<iframe>标签,然后再定位百度输入框。

from selenium import webdriver
import time
import os
driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('frame.html')
driver.get(file_path)
#切换到 iframe(id = "if")
driver.switch_to_frame("if")
#下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

switch_to_frame() 默认可以直接取表单的 id 或 name 属性进行切换。如 

 

#id = "if"
driver.switch_to_frame("if")
#name = "nf"
driver.switch_to_frame("nf")
……

那么如果 iframe 没有可用的 id 和 name 可以通过下面的方式进行定位:

……
#先通过 xpth 定位到 iframe
xf = driver.find_element_by_xpath('//*[@class="if"]')
#再将定位对象传给 switch_to_frame()方法
driver.switch_to_frame(xf)
……
driver.switch_to_default_content()

如果完成了在当前表单上的操作可以通过 switch_to_default_content()方法返回到上一层表单。该方法不用指定某个表单的返回,默认对应与它最近的 switch_to_frame()方法。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值