转载自: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相关推荐

  1. Selenium之定位及切换frame(iframe)

    总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...

  2. selenium之定位以及切换frame

    总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...

  3. Selenium之定位浏览器弹窗方法汇总

    目录 1. alert.confirm.prompt类型弹框 1.1 alert弹框 1.2 confirm弹框 1.3 prompt弹框 2. div弹框 3. 新标签页弹窗 4. 弹出框是ifra ...

  4. python+selenium+new——窗口——网页——切换窗口——切换frame——alert弹窗

    from selenium import webdriver driver = webdriver.Firefox() # 指定浏览器驱动 #对象实例化 ----------------------- ...

  5. Python爬虫之selenium对标签页切换、切换frame标签、cookie处理、执行js代码、开启无界面、以及使用代理ip和替换user-agent等方法

    一.selenium对标签页切换.切换frame标签.cookie处理.执行js代码.开启无界面.以及使用代理ip和替换user-agent等方法 (一).selenium标签页的切换 当seleni ...

  6. 爬虫之switch_to切换frame标签

    爬虫之switch_to切换frame标签 iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是driver.sw ...

  7. python自动化测试selenium(四)切换页面、切换窗口

    一.切换页面 如果定位元素失败(抛出NoSuchElementException),调查网页源代码,发现这个元素位于一个frame或iframe标记的元素下的子网页(html标记)里,那么此时需要切换 ...

  8. 自动化测试——多窗口切换和切换frame

    这里写目录标题 一.多窗口切换 1.base.py:公共代码 2.切换句柄的方式1,通过for循环 3.切换句柄的方式2,通过索引切换 4.源代码 二.frame窗口 1.什么是frame? 2.Fr ...

  9. python selenium 元素定位和页面操作

    目录 一.浏览器操作 二.简单对象的定位 三.操作测试对象 四.鼠标事件 五.键盘事件 六.获取页面的title和url 七.设置等待时间 八.定位一组对象 九.层级定位 十.多表单切换 十一.多窗口 ...

  10. 爬虫之selenium标签页的切换

    爬虫之selenium标签页的切换 当selenium控制浏览器打开多个标签页时,如何控制浏览器在不同的标签页中进行切换呢?需要我们做以下两步: 获取所有标签页的窗口句柄    [获取窗口句柄,通过窗 ...

最新文章

  1. 一些可以让心灵安静的动图
  2. mybatis获取mysql存储过程out参数的值_mybatis接受mysql存储过程out的值
  3. activiti高亮显示图片_如今透明LED显示屏成为广告橱窗,它们之间有什么关联?...
  4. 常量指针与指针常量的区别(转帖)
  5. dataframe 筛选_Spark.DataFrame与Spark.ML简介
  6. RightFont 5字体管理工具新手使用指南
  7. 如何访问嵌套母版页中的控件
  8. 循环数组实现队列的四种方式
  9. 张量分析初步和矢量恒等式
  10. 微信小程序 地图map的坑
  11. 手握IP却不知如何讲好城市故事?“宝藏天津”慢直播支招城市营销
  12. Gromacs 中文手册目录
  13. Java8 Stream流 - 高效快速的处理集合
  14. Elsa-审批流实现
  15. php 下载函数太慢,php的fread函数的一个巨大的坑
  16. 视频教程-必会神器之MySQL数据库-MySQL
  17. vmware 架设网站无法打开解决办法
  18. 随便谈谈IT行业的几个定律
  19. GitHub Desktop 百度云分享
  20. 如何理解变量的声明和定义?

热门文章

  1. 网络工程师Day7--本地AAA配置
  2. HCIE Security 防火墙转发流程及相关知识点 备考笔记(幕布)
  3. MySQL优化详解(三)——MySQL慢查询与内参数优化
  4. Linux文件类型与文件权限详解(二)
  5. 使用Autodesk Vault插件向导轻松创建Vault插件
  6. javascript滚动栏响应鼠标滑轮的实现上下滚动事件
  7. Hadoop大数据之Debug
  8. php 输出数据库取出来的html源码 正常显示解决,替换显示数据库中的html代码
  9. JSP 2.2规范 对jsp:useBean的解释
  10. js中for循环的优化写法