在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. [bzoj1391]order

    考虑最小割,即最少要去掉多少收益先S向所有机器连边,流量为购买费用:所有机器向工作连边,流量为租借费用:工作向T连边,流量为收益那么对于每一个工作,要么割掉连向T的边,要么购买/租借所有机器,同时由于 ...

  2. 详解Python Streamlit框架,用于构建精美数据可视化web app,练习做个垃圾分类app

    今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app.它的优势是入门容易.纯 Python 编码.开发效率高.UI精美. 上图是用 Streamlit 构 ...

  3. 雇工模式(Employee Pattern)

    本文节选自<设计模式就该这样学> 1 雇工模式的定义 雇工模式(Employee Pattern)也叫作仆人模式(Servant Pattern),属于行为型设计模式,它为一组类提供通用的 ...

  4. AtCoder Grand Contest 055 题解

    A 赛时直到最后 10min 才做出这个 A 题,之前猜了一个结论一直没敢写,本来不抱啥希望 AC 的结果比赛结束时交了一发竟然 A 了,由此可见我的水平之菜/dk 考虑每次取出字符串开头字符,不妨设 ...

  5. 9 Days 停课修炼题解集

    xj4604 排序 \(n,k <= 1e5\). 先考虑二分出这个值,check 有多少段的平均值小于这个 mid,这个在之前的复活赛中是原题 T4,数形结合,$ \text{Average} ...

  6. 【R】调整ggplot图例大小

    图例太多时,会挤压正图,显得正图展示区域很小,这时有必要缩小图例. ################# # 减小ggplot图例 ################# library(ggplot2) ...

  7. 【R绘图】当图例映射color/shape等多个属性时,如何修改图例标题?

    一般而言,我们修改ggplot2图例标题,常用以下三种方法: + guides(fill=guide_legend(title="New Legend Title")) + lab ...

  8. git 新建分支并切换到该分支_Git 从master拉取代码创建新分支 并且再将修改合并到master...

    开发过程中会从master主分支copy到另一个开发分支: 1.切换到master分支 git  checkout  master 2.获取最新的代码 git pull origin master 3 ...

  9. 禁止点击、禁止button触发【c#】

    bts.Attributes["onclick"] = "return false; ";

  10. C++构造函数和析构函数初步认识(2)

    构造函数的三个作用1.构造对象2.对象初始化3.类型转换  //Test1.h #include<iostream> using namespace std; //构造对象 //初始化对象 ...