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中的装饰器的用法
Apr 24 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
python算法表示概念扫盲教程
Apr 13 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
3种python调用其他脚本的方法
Jan 06 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
Python获取对象属性的几种方式小结
Mar 12 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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编程之高级技巧
2008/08/27 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Python中使用中文的方法
2011/02/19 Python
Python标准库sched模块使用指南
2017/07/06 Python
Python中函数参数调用方式分析
2018/08/09 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
迎八一活动主题
2014/01/31 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书