今天上班闲来无聊,于是来练练自动化,结果碰上了可恶的iframe,楼主,以前也遇到过,但是一直也没搞懂怎么处理的,都是抄别人的代码,今天决定独立解决试试。首先先来认识什么是iframe,它就长下图这样

我要操作的是属性是输入邮箱账号那里,我试过了我所掌握的所有xpath语法,结果一直定位不到这个元素,搞得我也是信心受挫。无意间我移动了下鼠标,才发现那里嵌了个iframe。要知道页面是否嵌套iframe可以借助火狐的一个插件firebug来查看。用firebug查看元素如果有iframe会显示iframe#xxx,没有iframe会显示top wondow。看下图左下角长这样iframe#xxx

问题找到了就开始解决。思路,既然要操作的元素在iframe上,我们就要先进行切换到iframe里面去。先定位iframe的位置

self.iframe = self.driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe[@scrolling = "no"]'),我这里用的xpath,也可以用id,name这些的。定位到了如下图所示

根据xpath的一个插件显示我写的xpath已经定位到了iframe上,接下来就用 self.driver.switch_to.frame(self.iframe)切换到iframe里面,前面定位到iframe的位置,最好用一个变量接收存起来,然后再用switch_to切换到里面去,接下来就是正常定位元素的操作了。(当iframe上的操作完后,想重新返回主页面上操作元素,返时候,就可以用switch_to_default_content()方法返回到主页面面)这句话,来源于上海悠悠博客资料。我这里因为操作完了就登录了,所以就没有返回到主页面的操作,这里返回主页面指的是退出iframe内嵌属性。

from selenium import webdriver
import time class WangYi_Email():
def __init__(self):
'''打开浏览器'''
self.driver = webdriver.Chrome() def OpenEmail(self,url):
'''传入网易邮箱url'''
self.driver.get(url)
self.driver.maximize_window()
time.sleep(0.01) def LoginEmail(self,email,password):
'''输入账号和密码和iframe的处理'''
# todo 点击密码登录
self.driver.find_element_by_xpath('//a[text()="密码登录"]').click() # todo 定位iframe
self.iframe = self.driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe[@scrolling = "no"]') # todo switch_to.frame进入到iframe里面去
self.driver.switch_to.frame(self.iframe) # todo 输入邮箱号
self.driver.find_element_by_xpath('//input[@name="email"]').send_keys(email) # todo 输入密码
self.driver.find_element_by_xpath('//div[@class="u-input box"]//input[@name="password"]').send_keys(password) # todo 点击登录
self.driver.find_element_by_xpath('.//*[@id="dologin"]').click() def closed(self):
"""关闭浏览器"""
time.sleep(10)
self.driver.quit() wy = WangYi_Email()
wy.OpenEmail('https://mail.163.com/')
wy.LoginEmail('email','password')
wy.closed()

关于selenium自动化对iframe内嵌元素的处理的更多相关文章

  1. selenium 中在 iframe 内的元素定位

    有些时候 元素明明就在 但是通过什么方式定位都提示 定位不到元素 此时就要考虑元素是不是内嵌在iframe 中 对于内嵌在 ifra中的元素定位 首先定位到 iframe 元素 例如 iframe = ...

  2. Python3.x:selenium获取iframe内嵌页面的源码

    Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...

  3. selenium-java,定位并操作frame和iframe内的元素

    因为frame和iframe的原因,在frame里的元素不能直接定位需要切到相应的frame才可以对元素进行操作,下面是涉及的方法 webDriver.switchTo().defaultConten ...

  4. MetaBase使用iframe内嵌到Vue页面样式优化

    Matebase是一个开源,易上手的BI工具,这里不做太多介绍了. 官网地址:https://www.metabase.com/ 解决问题描述: 使用iframe内嵌Metabase公开链接之后,页面 ...

  5. 如何根据iframe内嵌页面调整iframe高宽续篇

    接着昨天的工作 如何根据iframe内嵌页面调整iframe高宽 来说,按照文章中说的第二种方法实现代码如下: 实现 A.com/detail/view 页面的iframe代码如下: <ifra ...

  6. web - 块元素和内嵌元素的特征

    块: 1.独占一行 2.支持所有的样式 3.不设置宽度的时候,宽度撑满整行 常用的快标签有: div,section,header,nav,footer,article,aside,ul,ol,li, ...

  7. .NET前后台-JS获取/设置iframe内对象元素并进行数据处理

    转载请注明出处:果冻栋吖 这个主要是修改H3BPM一个批量审批的功能时候做的.先看下图: H3自带了批量审批的功能,也就是按钮1,有审批意见3,但是如果3里边不填写内容点击1之后,效果就是表单里边没有 ...

  8. MongoDB 系列(二) C# 内嵌元素操作 聚合使用

    "_id" : "639d8a50-7864-458f-9a7d-b72647a3d226","ParentGuid" : "00 ...

  9. HTML+CSS教程(二)frameset框架和iframe内嵌

    一.框架 (frameset)1.用<frameset></frameset>代替了<body></body>2.rows设置行的占页面的百分比:col ...

随机推荐

  1. OnCommandStateChange 不响应

    原因是我把原先的OnCommandStateChange( long nCommand, BOOL bEnable )大BOOL改成了小bool,回调不认识了.

  2. something good

    CF292A CF304B CF383A CF409D CF409F CF632A CF652B CF656A CF656B CF656D CF659A CF678A CF697A CF735D CF ...

  3. 【CYH-02】noip2018数论模拟赛:比赛通知栏

    鉴于公开赛有时可能无法更改比赛描述呢... 所以我们准备在这里(和团队宣言里)发布一些比赛公告. 请及时关注

  4. Netty编码流程及WriteAndFlush()的实现

    编码器的执行时机 首先, 我们想通过服务端,往客户端发送数据, 通常我们会调用ctx.writeAndFlush(数据)的方式, 入参位置的数据可能是基本数据类型,也可能对象 其次,编码器同样属于ha ...

  5. 小代学Spring Boot之自定义Starter

    想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...

  6. CF1195C Basketball Exercise (dp + 贪心)

    题解出处:https://www.luogu.org/problemnew/solution/CF1195C 很水的一道C题……目测难度在黄~绿左右.请各位切题者合理评分. 注意到可以选择的球员编号是 ...

  7. 探究netty的观察者设计模式

    javadoc笔记点 观察者的核心思想就是,在适当的时机回调观察者的指定动作函数 我们知道,在使用netty创建channel时,一般都是把这个channel设置成非阻塞的模式,这意味着什么呢? 意味 ...

  8. 【Python3爬虫】当爬虫碰到表单提交,有点意思

    一.写在前面 我写爬虫已经写了一段时间了,对于那些使用GET请求或者POST请求的网页,爬取的时候都还算得心应手.不过最近遇到了一个有趣的网站,虽然爬取的难度不大,不过因为表单提交的存在,所以一开始还 ...

  9. Netty+WebSocket 获取火币交易所数据项目

    Netty+WebSocket 获取火币交易所时时数据项目 先附上项目项目GitHub地址 spring-boot-netty-websocket-huobi 项目简介 本项目使用 SpringBoo ...

  10. python 简单的实现文件内容去重

    文件去重 这里主要用的是set()函数,特别地,set中的元素是无序的,并且重复元素在set中自动被过滤. 测试文本为 data.txt 具体代码如下: // 文件去重 #!/usr/bin/env ...