selenium学习教程之定位以及切换frame(iframe)


Posted in Python onJanuary 04, 2021

总有人看不明白,以防万一,先在开头大写加粗说明一下:

frameset不用切,frame需层层切!

很多人在用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:

<html lang="en">
<head>
 <title>FrameTest</title>
</head>
<body>
<iframe src="a.html" id="frame1" name="myframe"></iframe>
</body>
</html>

想要定位其中的iframe并切进去,可以通过如下代码:

from selenium import webdriver
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对象

举个栗子:

<iframe src="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>
 <iframe id="frame1">
  <iframe id="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()

补充

另外补充一下,之前曾看到过用点分法来切入嵌套frame的方法,但我试验之后发现并不能定位到frame,如果有同学可以成功,麻烦留言告知一下,用法如下:

driver.switch_to.frame('frame1.0.frame3')

据说以上代码可以切到 “frame1” 下的 “第一个frame” 下的 “frame3” 中。

总结

到此这篇关于selenium学习教程之定位以及切换frame(iframe)的文章就介绍到这了,更多相关selenium定位及切换frame(iframe)内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现的简单RPG游戏流程实例
Jun 28 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
python计算二维矩形IOU实例
Jan 18 Python
python实现低通滤波器代码
Feb 26 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
基于python实现生成指定大小txt文档
Jul 20 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 #Python
python Scrapy框架原理解析
Jan 04 #Python
如何用 Python 处理不平衡数据集
Jan 04 #Python
Python创建简单的神经网络实例讲解
Jan 04 #Python
python实现跨年表白神器--你值得拥有
Jan 04 #Python
Python列表元素删除和remove()方法详解
Jan 04 #Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 #Python
You might like
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
Python的Django框架中的Context使用
2015/07/15 Python
判断网页编码的方法python版
2016/08/12 Python
不可错过的十本Python好书
2017/07/06 Python
python安装Scrapy图文教程
2017/08/14 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
乡镇网格化管理实施方案
2014/03/23 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
岗位聘任报告
2015/03/02 职场文书
小学六年级毕业感言
2015/07/30 职场文书
班主任工作总结范文
2015/08/13 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
python利用while求100内的整数和方式
2021/11/07 Python
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python