Selenium定位iframe动态ID。

126邮箱实例

买了本虫师的书来学习selenium2自动化测试,然后写第一个实例就遇到了一些坑,好在有热心的网友提供了帮助,解决了问题

要学习selenium总要先搭建好python环境,这个就不说了 ,网上一搜一大把,也要装好selenium包,毕竟要用到里面的webdriver,它支持firefox,IE,Opera,和Chrome,

so我就装了火狐和谷歌的驱动,把驱动放在python文件夹里面就行了

之后按照上面的例子写了一个脚本

坑的是,我定位不到元素

因为id是动态获取的,并且镶嵌在iframe表单中,好了,只能去定位iframe表单了,

iframe表单也是动态获取的。。然后在测试的朋友发了我一个链接,嗯 找到解决办法了

然后完美解决了,一下是方法:

非动态的iframe可以通过以下方式定位

有id,并且唯一,直接写id

driver.switch_to_frame("x-URS-iframe")

driver.switch_to.frame("x-URS-iframe")(较新版本推荐使用方法)

有name,并且唯一,直接写name

driver.switch_to_frame("xxxx")

driver.switch_to.frame("xxxx") (较新版本推荐使用方法)

无id,无name,先定位iframe元素

iframe = driver.find_elements_by_tag_name("iframe")[0]

driver.switch_to_frame(iframe)

driver.switch_to.frame(iframe) (较新版本推荐使用方法)

如果是动态Id需要借助xpath部分元素属性定位,xpath中提供了三个非常好的方法来为我们定位部分属性值:

driver.find_element_by_xpath

("//div[contains(@id, 'btn-attention')]")

driver.find_element_by_xpath

("//div[starts-with(@id, 'btn-attention')]")

driver.find_element_by_xpath

("//div[ends-with(@id, 'btn-attention')]")

# 这个需要结尾是‘btn-attention’

contains(a, b) 如果a中含有字符串b,则返回true,否则返回false

starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false

ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false

代码如下:

#引入模块

from selenium import webdriver

#引入时间模块

import time

#实例化驱动对象

driver = webdriver.Firefox()(把驱动放到python的script可以正常调用使用这种写法)

driver = webdriver.Firefox(executable_path=r'F:\Python\Scripts\geckodriver.exe')(找不到驱动可以通过写路径的方式来调用)

#打开126邮箱

driver.get("https://mail.126.com/")

#浏览器最大化

driver.maximize_window()

#休眠3秒,方式刷新不出来。

time.sleep(3)

#根据xpath定位ifram表单

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]"))

#定位输入账号

driver.find_element_by_name("email").send_keys("xxxxxxxx")

#定位输入密码

driver.find_element_by_name("password").send_keys("xxxxxxxx")

 
 

 
 
 
 
 
 
 

Selenium定位iframe动态ID的更多相关文章

  1. python+selenium实现163邮箱登陆—iframe动态ID定位 及常用定位方法

    今天发现之前的登录163邮箱脚本定位不到iframe了,原因是iframe拼接了动态ID,修改后的脚本如下: from selenium import webdriver driver = webdr ...

  2. selenium元素定位之 动态id, class元素定位

    1.直接进入正题 如下图, 有些元素每次进入都会刷新, 造成元素无法重复定位 怎么办? "xpath部分属性值"定位方法可以帮到我们 1.包含属性定位 driver.find_el ...

  3. selenium中定位iframe框

    这是使用谷歌看到的源码.想要往里面输入内容,需要使用js. 这个iframe没有id,不能通过id直接定位到.但可以通用TagName来定位到iframe. WebDriver中定位的代码如下: St ...

  4. python selenium ——— 动态id、class定位

    什么样的是动态id呢? 动态id就是第一次点击显示的id与二次点击显示的不一样,一般是元素属性中包含一段数字的这种情况. 类似这种: 1 <input type="button&quo ...

  5. 【转载】webdriver 自动化测试如何定位到动态变化ID的iframe框内

    大家知道,在自动化测试脚本编写过程中,如果页面上跳出一个iframe框时,我们是定位不到框内内容的,可以通过 driver.findElement(By.id("")); driv ...

  6. Selenium如何定位动态id/class的元素?

     今天再给大家分享一个定位不到元素的原因——动态id. 没有打开新页面.没有alert.没有frame.加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个 ...

  7. Java中通过Selenium WebDriver定位iframe中的元素

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 问题:有一些元素,无论是通过id或是xpath等等,怎么都定位不到. 分析:这很可能是因为你要定位 ...

  8. Selenium定位不到指定元素原因之iframe(unable to locate element)

    浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...

  9. Selenium webdriver定位iframe里面元素两种方法

    以东方财富网登录页面为例: 在查找元素过程中,直接通过id或者xpath等找不到元素,查看页面源代码发现元素是属于iframe里,例如: <div class="wrap_login& ...

随机推荐

  1. install virtual enviroment on windows

    H:\>pip install virtualenv  --install virtualenvCollecting virtualenv Downloading https://files.p ...

  2. springBoot、SpringCloud 常用注解

    1,@SpringBootApplication是springboot启动类的入口注解,标注在主启动类上:2,@EnableEurekaServer 是eureka服务端启动,接受其他服务注册进来,标 ...

  3. CSS 背景图像 重复图像

    重复图像 background-repeat 属性可以重复图像,这对于小图片来说是福音. background-repeat 属性有6个值: repeat 背景图像在垂直方向和水平方向都重复 repe ...

  4. jQuery取得radio的值 取select得值

    获取一组单选按钮对象: var obj_payPlatform = $('#wrap input[name="payMethod"]'); 获取被选中按钮的值 : var val_ ...

  5. 19-02【mac电脑操作】最小化应用程序

    最小化应用程序 windows下很简单,直接使用windows+M即可: mac电脑下,官方建议是:option+command+m+h.但实际使用的时候,这个快捷键并不好使: 解决方案:mac系统设 ...

  6. python-django(环境配置)

    1.配置虚拟环境 <1>.pip  install  virtualenv     安装创建虚拟环境的工具 <2>.pip  install  virtualenvwrappe ...

  7. jsp请求java返回pdf、excel与word

    1,返回pdf关键代码 /** * @todo * @param * @date 2019年3月8日 * @author yanan */ @RequestMapping("/getPdf& ...

  8. jna调用c++的dll

    import java.util.ArrayList; import java.util.List; import com.sun.jna.Structure; public class MyStru ...

  9. AOP-事物管理

    1. Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务

  10. Flask 验证码 点击验证码刷新

    ---恢复内容开始--- import random import string # Image:一个画布 # ImageDraw:一个画笔 # ImageFont:画笔的字体 # pip insta ...