selenium元素定位不到之iframe---基于python
我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe
问题描述:通过firebug查询到相应元素的id或name等,但在定位此元素的时候就是报错,提示:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element
问题原因:元素定位不到
问题分析:通过firebug可以看到,但就是定位不到,这时候很有可能是iframe搞得鬼了
########################################################################
那在解决问题之前,首先让我们了解一下iframe
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)
<iframe> 标签规定一个内联框架。
一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。
从以上描述就很好理解了,就比如我们在一个word文档中插入一个txt的文档,那我们如果直接访问txt里的内容,当然会访问不到
那咋办捏?
#########################################################################
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。
1. 切换到frame(也就是前面比喻中的txt)
switch_to.frame(name_or_id_or_frame_element)
(1.切换到iframe,参数是他的id ,2. 如果没有id,name是唯一的,参数是name 。 3.iframe既没有id,也没有name,把iframe当成元素对象,先定位iframe这个元素,然后切换
4.还可以通过iframe的index进行定位,此方法用firepath中查看)
举例1:
  # coding:utf-8
from selenium import webdriver
driver=webdriver.Firefox()
driver.get("http://mail.126.com")
driver.implicitly_wait(10)
driver.switch_to.frame("x-URS-iframe")   #切换frame
driver.find_element_by_name("email").send_keys("abcdef")   #使用name定位
driver.find_element_by_id("password").send_keys("123456")   #使用id定位
driver.find_element_by_id("dologin").click() 
举例2:针对iframe没有id和name情况
#本例使用find_element方式
举例3:通过页面上iframe的索引定位
#使用index索引方式定位
定位箭头指向的这个就是第4个,索引从0开始,所以是3, driver.switch_to.frame(3)
      
2. 切换回主文档
switch_to.default_content()
举例(接上面的例子):driver.switch_to.default_content() #返回到主文档
3. 对于多级iframe(word里面插入excel,excel里面插入txt)
3.1 进入多级iframe
举例:
#进入excel中
driver.switch_to_frame("excel")
#进入txt中
driver.switch_to_frame("excel") #首先进入excel
driver.switch_to_frame("txt") #然后进入txt
这个例子表面,frame需要一级一级逐级进入
3.2 返回到主文档
同第二节中的一样使用switch_to.default_content()
3.3 返回上一级文档(即从txt返回到excel)
举例:driver.switch_to.parent_frame() #这个地方很好理解,parent翻译为(父亲或母亲),也就是返回父节点
selenium元素定位不到之iframe---基于python的更多相关文章
- selenium元素定位不到之iframe
		我们在使用selenium的18中定位方式的时候,有时会遇到定位不上的问题,今天我们就来说说导致定位不上的其中一个原因---iframe 问题描述:通过firebug查询到相应元素的id或name等, ... 
- selenium元素定位陷阱规避
		为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ... 
- Selenium3 + Python3自动化测试系列二——selenium元素定位
		一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ... 
- 自动化测试基础篇--Selenium元素定位
		摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ... 
- selenium元素定位之css选择器
		在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ... 
- Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)
		在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ... 
- python+selenium 元素定位--iframe
		1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ... 
- 史上最全!Selenium元素定位的30种方式
		Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ... 
- java+selenium元素定位和元素操作
		1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ... 
随机推荐
- 免安装版MySQL8数据库的安装
			[环境准备] PC版本:Windows10企业版.64位操作系统 数据库:MySQL8.0.12-win64.zip免安装版 [彻底卸载已安装的MySQL数据库] 由于系统中MySQL数据库的卸载不彻 ... 
- 缓存反向代理-Varnish
			简介 Varnish是一款高性能.开源的缓存反向代理服务器.它从客户端接受请求,并尝试从缓存中响应请求,如果无法从缓存中提供响应,Varnish 向后端服务器发起请求,获取响应,将响应存储在缓存中,然 ... 
- 开发自己的网上支付案例代码(易宝支付php)
			1.简单的图解(如上所示) 易宝支付与支付宝是不一样的,但也有类似之处,支付宝是专门为淘宝软件开发的一套机制,资金会在中间支付公司(支付宝)停留,等待顾客确认,当顾客确认后,才会真正扣钱.而易宝支付时 ... 
- 解决 LLVM 错误提示 may only occur zero or one times!
			使用 LLVM 混淆器添加参数进行编译提示如下错误:clang (LLVM option parsing): for the -bcf option: may only occur zero or o ... 
- python中的super怎么用?
			面向对象有这个强大特点和作用, 著名的三大特点:封装, 继承, 多态 这篇博客写的是super()的简单理解和使用 今天在读restframework的源码的时候, 发现源码中使用了super, 依以 ... 
- mysql 导出行数据到txt文件,指定字符分割
			select id,name, concat('tel:',phone) from user order by time INTO outfile 'user.txt' FIELDS terminat ... 
- zkfc的znode不存在的问题
			cd /soft/hadoop/logs/hadoop-centos-zkfc-s101.log发现: 2018-09-29 12:42:03,616 FATAL org.apache.hadoop. ... 
- 【一】调通单机版的thrift-python版本
			开发步骤说明 [任务1]调通单机版的thrift-python版本 [任务1]调通单机版的thrift-python版本 安装thrift 创建thrift模块文件并编译 开发python版的clie ... 
- spark ---词频统计(二)
			利用python来操作spark的词频统计,现将过程分享如下: 1.新建项目:(这里是在已有的项目中创建的,可单独创建wordcount项目) ①新建txt文件: wordcount.txt (文件内 ... 
- c语言程序设计:用strcpy比较数组(银行卡密码程序设计),strcpy(复制数组内容)和getchar()(敲键盘字符,统计不想要的字符的个数)
			统计从键盘输入一行字符的个数: 1 //用了getchar() 语句 2 //这里的\n表示回车 #include <stdio.h> #include <stdlib.h> ... 
