【转】selenium之 定位以及切换frame
转载自:http://www.voidcn.com/blog/huilan_same/article/p-6155896.html
很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理办法)。
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。
1.怎么切到frame中(switch_to.frame())
selenium提供了switch_to.frame()方法来切换frame
switch_to.frame(reference)
不得不提到switch_to_frame(),很多人在这样写的时候会发现,这句话被划上了删除线,原因是这个方法已经out了,之后很有可能会不支持,建议的写法是switch_to.frame()
reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象,假设有如下HTML代码 index.html:
<htmllang="en"> <head><title>FrameTest</title> </head> <body> <iframesrc="a.html"id="frame1"name="myframe"></iframe> </body> </html>
想要定位其中的iframe并切进去,可以通过如下代码:
from selenium importwebdriver driver=webdriver.Firefox() 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和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:
- index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
- WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象
举个栗子:
<iframesrc="myframetest.html" />
用xpath定位,传入WebElement对象:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))
2.从frame中切回主文档(switch_to.default_content())
切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。
driver.switch_to.default_content()
3.嵌套frame的操作(switch_to.parent_frame())
有时候我们会遇到嵌套的frame,如下:
<html><iframeid="frame1"><iframeid="frame2"/></iframe> </html>
1.从主文档切到frame2,一层层切进去
driver.switch_to.frame("frame1") driver.switch_to.frame("frame2")
2.从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。
driver.switch_to.parent_frame() #如果当前已是主文档,则无效果
有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。
所以只要善用以下三个方法,遇到frame分分钟搞定:
driver.switch_to.frame(reference)
driver.switch_to.parent_frame()
driver.switch_to.default_content()
转载于:https://www.cnblogs.com/nnniki/p/9764479.html
【转】selenium之 定位以及切换frame相关推荐
- Selenium之定位及切换frame(iframe)
总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...
- selenium之定位以及切换frame
总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...
- Selenium之定位浏览器弹窗方法汇总
目录 1. alert.confirm.prompt类型弹框 1.1 alert弹框 1.2 confirm弹框 1.3 prompt弹框 2. div弹框 3. 新标签页弹窗 4. 弹出框是ifra ...
- python+selenium+new——窗口——网页——切换窗口——切换frame——alert弹窗
from selenium import webdriver driver = webdriver.Firefox() # 指定浏览器驱动 #对象实例化 ----------------------- ...
- Python爬虫之selenium对标签页切换、切换frame标签、cookie处理、执行js代码、开启无界面、以及使用代理ip和替换user-agent等方法
一.selenium对标签页切换.切换frame标签.cookie处理.执行js代码.开启无界面.以及使用代理ip和替换user-agent等方法 (一).selenium标签页的切换 当seleni ...
- 爬虫之switch_to切换frame标签
爬虫之switch_to切换frame标签 iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是driver.sw ...
- python自动化测试selenium(四)切换页面、切换窗口
一.切换页面 如果定位元素失败(抛出NoSuchElementException),调查网页源代码,发现这个元素位于一个frame或iframe标记的元素下的子网页(html标记)里,那么此时需要切换 ...
- 自动化测试——多窗口切换和切换frame
这里写目录标题 一.多窗口切换 1.base.py:公共代码 2.切换句柄的方式1,通过for循环 3.切换句柄的方式2,通过索引切换 4.源代码 二.frame窗口 1.什么是frame? 2.Fr ...
- python selenium 元素定位和页面操作
目录 一.浏览器操作 二.简单对象的定位 三.操作测试对象 四.鼠标事件 五.键盘事件 六.获取页面的title和url 七.设置等待时间 八.定位一组对象 九.层级定位 十.多表单切换 十一.多窗口 ...
- 爬虫之selenium标签页的切换
爬虫之selenium标签页的切换 当selenium控制浏览器打开多个标签页时,如何控制浏览器在不同的标签页中进行切换呢?需要我们做以下两步: 获取所有标签页的窗口句柄 [获取窗口句柄,通过窗 ...
最新文章
- 一些可以让心灵安静的动图
- mybatis获取mysql存储过程out参数的值_mybatis接受mysql存储过程out的值
- activiti高亮显示图片_如今透明LED显示屏成为广告橱窗,它们之间有什么关联?...
- 常量指针与指针常量的区别(转帖)
- dataframe 筛选_Spark.DataFrame与Spark.ML简介
- RightFont 5字体管理工具新手使用指南
- 如何访问嵌套母版页中的控件
- 循环数组实现队列的四种方式
- 张量分析初步和矢量恒等式
- 微信小程序 地图map的坑
- 手握IP却不知如何讲好城市故事?“宝藏天津”慢直播支招城市营销
- Gromacs 中文手册目录
- Java8 Stream流 - 高效快速的处理集合
- Elsa-审批流实现
- php 下载函数太慢,php的fread函数的一个巨大的坑
- 视频教程-必会神器之MySQL数据库-MySQL
- vmware 架设网站无法打开解决办法
- 随便谈谈IT行业的几个定律
- GitHub Desktop 百度云分享
- 如何理解变量的声明和定义?