selenium - webdriver 多表单切换 switch_to.frame()
Posted 小虫虫的大梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium - webdriver 多表单切换 switch_to.frame()相关的知识,希望对你有一定的参考价值。
遇到iframe表单嵌套页面时,webdriver无法直接定位其中的元素,需要转换到内嵌的页面中后,再进行元素定位
例如:做一个页面,将百度首页嵌套进去
1 <html> 2 <hody> 3 <iframe id="iff" src="http://www.baidu.com" width="1000" height="800"></iframe> 4 </hody> 5 </html>
页面效果如下:
直接定位百度的输入框会报错:找不到元素。可以先跳转到百度页面后,再定位,如下:
switch_to.frame()
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.get(\'D:\\\\python\\\\aaa.html\') 6 7 driver.switch_to.frame(\'iff\') # 先跳转到内层页面(默认使用表单的id或name属性) 8 driver.find_element_by_id(\'kw\').send_keys(\'zhangyang\') # 再进行元素定位 9 driver.find_element_by_id(\'su\').click() 10 11 time.sleep(2) 12 driver.quit()
如果iframe没有可用的id或name属性,可以先通过元素定位方法定位到iframe元素,再讲iframe元素传递给switch进行跳转,如下:
1 element_iframe = driver.find_element_by_id(\'iff\') # 通过元素定位方法先找到iframe元素 2 driver.switch_to.frame(element_iframe) # 将元素传递进去
可以使用如下方法跳出表单:
1 driver.switch_to.parent_frame() # 跳出当前表单 2 driver.switch_to.default_content() # 跳到最外层页面
ps:
mac上,打开本地文件
file_path = \'file://\' + os.path.abspath(\'a1.html\') driver.get(file_path) print(file_path) # 打印:file:///Users/zhangyang/PycharmProjects/testUI/a1.html
以上是关于selenium - webdriver 多表单切换 switch_to.frame()的主要内容,如果未能解决你的问题,请参考以下文章
python+selenium2自动化---多表单多窗口切换
Python+Selenium学习笔记8 - 多表单&多窗口切换
Selenium 3----定位一组元素+多表单切换+多窗口切换
使用 selenium 和 webdriver (chrome) python OSX 在 Instagram 中填写登录表单