在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个页面上对元素识别与定位,对于frame/iframe 表单内嵌页面上的元素无法直接定位。
这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe 表单的内嵌页面中:
如下两个例子:
1 、 163邮箱登入界面:https://mail.163.com/
2 、电信话费查询界面:https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com
3、alert :弹出的提示框 d.switch_to_alert()
4 、群里有个小伙伴:http://login.189.cn/web/login 登入后输入密码 ,id定位不到了,(单步执行可以)后来发现是焦点丢失(这里感谢翎儿/jack指导)

# -*- coding: UTF-8 -*- 
from selenium import webdriver
from time import sleep
url1='https://mail.163.com/'
account='shalalla'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url1)
sleep(2)
driver.switch_to.frame("x-URS-iframe") #切换到表单
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys(account)

2 、 电信话费查询界面:https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com

>>> from selenium import webdriver
>>> url='https://uac.10010.com/portal/mallLogin.jsp?redirectURL=//www.10010.com'
>>> account='18605028607'
>>> d = webdriver.Chrome()
>>> d.maximize_window()
>>> d.get(url)
>>> d.switch_to.frame(d.find_element_by_tag_name("iframe"))
>>> d.find_element_by_id("userName").clear()

3、alert :弹出的提示框 d.switch_to_alert()


4 、群里有个小伙伴:http://login.189.cn/web/login 登入后输入密码 ,id定位不到了,(单步执行可以)后来发现是焦点丢失(这里感谢翎儿/jack指导)

  
可能是输入账号后页面刷新了,也可能是其他原因,加了actionchains 解决了:
 1 from selenium import webdriver
2 from selenium.webdriver.common.action_chains import ActionChains
3 from time import sleep
4 d=webdriver.Chrome()
5 d.maximize_window()
6 d.get('http://login.189.cn/web/login')
7 a=d.find_element_by_name('Account')
8 a.clear()
9 a.send_keys('1234')
10 sleep(3)
11 click_b1=d.find_element_by_xpath(".//input[@id='txtShowPwd']")
12 # click_b1=d.find_element_by_id('txtShowPwd')
13 sleep(1)
14 ActionChains(d).click(click_b1).send_keys('1234').perform()

ActiionChains补充学习地址:

http://blog.csdn.net/huilan_same/article/details/52305176

---------------------------------------------------

以下是后来的各种元素定位的坑集合:




 

python selenium表单定位的更多相关文章

  1. python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。

    python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...

  2. selenium+Python(表单、多窗口切换)

    1.多表单切换 在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这 ...

  3. No.14 selenium for python table表单

    table表单,HTML中的特征 标识性标签:table.tr.th.td 定位使用Xpath定位 点击表格中的元素即可

  4. Python selenium根据class定位页面元素

    在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的.但是实际工作中,很多前端开发人员并未给每个元素都编写id属性.通常一段html代码如下: <div cl ...

  5. selenium——表单嵌套

    <html> <iframe id="id-iframe" name="iframee1"> --切换表单 <html> & ...

  6. Python Flask-web表单

    Flask-WTF扩展可以把处理web表单的过程变成一种愉悦的体验. 一.跨站请求伪造保护 默认情况下,Flask-WTF能够保护所有表单免受跨站请求伪造的攻击.恶意网站把请求发送到被攻击者已登录的网 ...

  7. Python线性表——单链表

    1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...

  8. Python+Selenium学习--简单对象定位

    场景 测试对象的定位和操作是webdriver的核心内容,其中操作又是建立在定位的基础之上,因此对象定位就越发显得重要了. 定位对象的目的一般有下面几种 操作对象 获得对象的属性,如获得测试对象的cl ...

  9. python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)

    今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...

随机推荐

  1. [atARC114F]Permutation Division

    由于是排列,即任意两个数字都各不相同,因此字典序最大的$q_{i}$就是将每一段的第一个数从大到小排序 接下来,考虑第一个元素,也就是每一段开头的最大值,分类讨论: 1.当$p_{1}\le k$时, ...

  2. 关于阿里云图标的使用 iconfont

    iconfont 关于阿里云图标库使用的介绍 对于添加到网页中的iconfont可使用以下几种方式: 首先需要进入阿里云图标库官网进行对应的下载iconfont-阿里巴巴矢量图标库 将需要的图标加入到 ...

  3. 贪心/构造/DP 杂题选做

    本博客将会收录一些贪心/构造的我认为较有价值的题目,这样可以有效的避免日后碰到 P7115 或者 P7915 这样的题就束手无策进而垫底的情况/dk 某些题目虽然跟贪心关系不大,但是在 CF 上有个 ...

  4. Codeforces 679E - Bear and Bad Powers of 42(线段树+势能分析)

    Codeforces 题目传送门 & 洛谷题目传送门 这个 \(42\) 的条件非常奇怪,不过注意到本题 \(a_i\) 范围的最大值为 \(10^{14}\),而在值域范围内 \(42\) ...

  5. Codeforces Round #701 (Div. 2) 题解

    由于今天实在是太自闭了就前来写场已经 AK 的 div.2 的题解了 这场比赛是我的 div.2 首 AK 哦 A 先特判 \(b=1\),强制将 \(b+1\) 否则容易发现答案最大为 \(\log ...

  6. 斗地主的综合案例实现(Map有序)

    斗地主的综合案例实现(Map有序) 整体思路 代码实现 import java.util.ArrayList; import java.util.Collections; import java.ut ...

  7. Git常用操作(二)

    仓库拉取 git clone XXX 修改仓库链接 $ git config -l # 显示coding列表 $ git config --get remote.origin.url # 返回orig ...

  8. 毕业设计之zabbix集合

    lnmp环境请查看https://www.cnblogs.com/betterquan/p/12285956.html 但是!!!注意php的编译: https://www.zabbix.com/do ...

  9. Git分布式版本控制系统基础

    查看创建的账号 下来在该当前的⽬录下创建⽂件,并且进⾏提交 使⽤git log就可以看到最近提交的⽇志记录的信息 查看窗户的状态信息 某些时候我们可能需要回退到之前的版本,那么具体处理的步骤为: 1. ...

  10. day33 前端之css

    day33 前端之css css简介 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. # 语法结构 选择器 { 属性名1,属性值 属性名2,属性值 } # ...