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获取远程文件大小的函数代码分享
May 13 Python
Python greenlet实现原理和使用示例
Sep 24 Python
django之session与分页(实例讲解)
Nov 13 Python
python实现爬山算法的思路详解
Apr 09 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
django之自定义软删除Model的方法
Aug 14 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python3实现飞机大战游戏
Apr 24 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
keras 多任务多loss实例
Jun 22 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
python3.8动态人脸识别的实现示例
Sep 21 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
php实例分享之mysql数据备份
2014/05/19 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
社区维稳工作方案
2014/06/06 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
院系推荐意见
2015/06/05 职场文书
二年级数学教学反思
2016/02/16 职场文书