今天上班闲来无聊,于是来练练自动化,结果碰上了可恶的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. python 3.5学习笔记(第四章)

    本章内容: 一..装饰器 二.生成器 三.迭代器 四.python中的内置方法 五.json & pickle 的数据序列化及反序列化 六.程序目录结构规范 七.补充内容 一.装饰器: 1.概 ...

  2. 洛谷P1640 [SCOI2010]连续攻击游戏 题解

    题目链接: https://www.luogu.org/problemnew/show/P1640 分析: 这道题用二分图来解决即可.应该可以作为网络流中的模板题来食用, 每一个武器有两个属性,但是只 ...

  3. Git的使用和配置小白必看都是干货,为您解惑

    Git安装 首先下载git这个软件,然后打开码云新建仓库 在本地选择一个路径作为本地仓库 点新建仓库然后输入邮箱和密码,然后进行配置 在要作为本地仓库的地方新建一个文件夹,保存后关闭,在文件夹空白处鼠 ...

  4. 动手造轮子:实现一个简单的 EventBus

    动手造轮子:实现一个简单的 EventBus Intro EventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实 ...

  5. SVG波浪动画

    今天来试试用svg+css3制作波浪动画 下图是我制作出的效果 还不错吧 在制作波浪前,首先我们要画波浪啊,至于画波浪,如果你想直接通过计算贝塞尔曲线绘制出波浪... 好吧,那我也不拦着你 我就直接用 ...

  6. python 中_init_函数以及参数self

    1)class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2)_init_函数(方法) 1.首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问. 2. ...

  7. php if语句

    一.前言 if语句 是几乎所有编程语言都有的函数. 当然我们最好的php这么最好的语言也有啦~ 二.搞起! 直接上代码不多哔哔.talk is cheap show me the code 2.1 i ...

  8. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖

    在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...

  9. 个人永久性免费-Excel催化剂功能第29波-追加中国特色的中文相关自定义函数

    中文世界里,有那么几个需求在原生Excel里没提供,例如财务部的数字转大写金额,文字转拼音等,在其他插件里,大部分是以功能区菜单按钮的方式提供.Excel催化剂认为,最佳的使用方式乃是自定义函数的方式 ...

  10. rest-frameword框架的基本组件

    序列化 1.models部分 from django.db import models # Create your models here. class Book(models.Model): tit ...