『心善渊』Selenium3.0基础 — 16、Selenium对iframe表单的操作
1、什么是iframe表单
实际上就是HTML页面中使用iframe/frame标签,是在当前页面中引用了其他页面的链接,真正的页面数据并没有出现在当前页面源码中,但是在浏览器中我们是可以看到内容的。简单理解可以使页面中开了一个窗口显示另一个页面。
我们在Web应用中,经常会遇到这样的iframe表单嵌套页面,Frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位。而frame和iframe需要切换进去才能定位到其中的元素,这就相当于frame和iframe是当前页面中嵌套的其他页面。这时就需要通过switch_to.frame()方法,将当前定位的主体切换为 frame或iframe表单的内嵌页面中。
2、iframe表单操作流程
假设:页面上有A、B 两个frame,其中B 在A 内,那么定位B 中的内容则需要先到A,然后再到B。
下面frame.html文件的代码中,里面有个id为f1的frame,该页面我们简称为frame 。而f1中又嵌入了id为f2的frame,该页面我们简称为inner,该frame加载了百度的首页。
首先我们进入页面的时候,就已经在frame页面中了,如果我们想要在inner页面的百度搜索框输入内容,就要定位到inner页面(inner的frame标签),然后再进入到inner页面中,然后定位inner页面中的百度搜索框,输入内容。
如下图所示:

注:
- 进入浏览器直接就可以操作的页面,就是最外层表单
iframe。- 然后其他的表单从0开始,依次索引。
3、iframe表单操作常用方法
(1)进入表单
使用switch_to.frame()方法进入一个表单。
- 方式一:通过表单的id或name属性切换进表单
driver.switch_to.frame(value)或driver.switch_to_frame(value)(已过期) - 方式二:先定位到表单元素,再切换进入。
可以是各种方式定位到iframe表单元素。
el = driver.find_element_by_xxx(value)
然后再进入表单
driver.switch_to.frame(el)或driver.switch_to_frame(el)(已过期)
(2)多表单切换
- 跳回最外层的页面。
driver.switch_to.default_content() - 跳回上层的页面。
driver.switch_to.parent_frame()
4、表单操作示例
需求:在163邮箱登陆页面中,操作iframe元素。
"""
1.学习目标:
必须掌握iframe表单操作方式
2.语法(操作步骤)
2.1 确定即将操作的元素是否属于iframe
F12中elements最下方查看是否有iframe/frame标签名
2.2 定位iframe/frame标签
2.3 进入iframe
driver.switch_to.frame(参数)
参数:
当iframe标签有id/name属性时,参数=id/name的属性值,无需定位。
driver.find_element_by_id("idframe")
当iframe标签没有id/name属性时,先定位,参数=定位元素
el_frame = driver.find_element_by_xpath("//iframe[starts-with(@id,'x-URS-iframe')]")
driver.switch_to.frame(el_frame)
当明确页面中iframe索引值,参数=索引值
driver.switch_to.frame(0) # 参数=索引值 从0开始
(也就是页面中有几个iframe,和你需要的iframe的索引,你都知道就可以用)
2.4 操作iframe中的元素
和普通页面一样
2.5 退出iframe
退出到上一层 driver.switch_to.parent_frame()
退出到最外层 driver.switch_to.default_content()
具体跳出到哪一层,根据下一步操作而定。
3.需求
在163邮箱登陆页面中,操作iframe元素。
4.iframe在web中的应用位置
1.一般的登录,163邮箱,qq邮箱,
2.发邮件(富文本编辑器一般是嵌入到页面中的,也就是邮件的正文也是iframe),
3.后台管理菜单栏
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "https://mail.163.com/"
driver.get(url)
sleep(2)
# 4.iframe操作
# 4.1 进入iframe表单
# 4.1.1 方式一:先定位iframe表单再进入
el_frame = driver.find_element_by_xpath("//iframe[starts-with(@id,'x-URS-iframe')]")
# print(el_frame.get_attribute("outerHTML"))
# 4.1.2 切换进入表单中
driver.switch_to.frame(el_frame)
# 4.1.3 方式二:直接通过id或name进入表单中
# 如下id不正确
# driver.switch_to.frame('x-URS-iframe')
# 4.1.4 方式三:通过索引值切换进入表单
# 参数=索引值 从0开始
# driver.switch_to.frame(0) # 可用
# 4.2 操作表单中的元素
# 4.2.1 定位账号输入框和密码输入框
email = driver.find_element_by_css_selector("input[name='email']")
password = driver.find_element_by_css_selector("input[name='password']")
sleep(2)
# 4.2.2 填写内容
email.clear()
email.send_keys("Selenium")
password.clear()
password.send_keys("Selenium")
sleep(2)
# 4.3 跳出页面中表单
# 因为页面中只有一层iframe,所以跳到上一层和最外层一样效果。
# 4.3.1 跳到最外层
driver.switch_to.default_content()
# 4.3.2 跳到上一层
# driver.switch_to.default_content()
sleep(2)
# 4.4 点击网易首页
driver.find_element_by_link_text("网易首页").click()
sleep(3)
# 5.关闭浏览器
driver.quit()
『心善渊』Selenium3.0基础 — 16、Selenium对iframe表单的操作的更多相关文章
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 17、Selenium操作浏览器窗口的滚动条
目录 1.为什么操作滚动条 2.Selenium如何操作滚动条 3.Selenium操作滚动条方法 4.操作滚动条示例 5.下拉至聚焦元素的位置 (1)实现步骤: (2)实现示例: 1.为什么操作滚动 ...
- 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)
目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...
- 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API
目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
随机推荐
- MSSQL·备份数据库中的单表
阅文时长 | 0.11分钟 字数统计 | 237.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·备份数据库中的单表』 编写人 | SCscHero 编写时间 | 20 ...
- 前端必读:Vue响应式系统大PK(下)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/vue-3-reactivity-system ...
- [刷题] 79 Word Search
要求 给定一个二维平面的字母和一个单词,从一个字母出发,横向或纵向连接二维平面上的其他字母 同一位置的字母只能使用一次 示例 board = [ ['A','B','C','E'], ['S' ...
- 034.Python的__str__,__repr__,__bool__ ,__add__和__len__魔术方法
Python的其他方法 1 __str__方法 触发时机: 使用print(对象)或者str(对象)的时候触发 功能: 查看对象信息 参数: 一个self接受当前对象 返回值: 必须返回字符串类型 基 ...
- 2.2 CPU 上下文切换是什么意思?(下)
怎么查看系统的上下文切换情况 过多的上下文切换,会把 CPU 时间消耗在寄存器.内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个 元凶. 使用 vmstat ...
- ASP.NET Core MVC 入门到精通 - 1. 开发必备工具 (2021)
环境: .NET 5 ASP.NET Core MVC 1. .NET 5 作为一个资深.NET工程师,说句实话,.NET没落了,在国内更加的没落.之前做过8年node.js/前端,现如今又转回了.N ...
- 人脸照片自动生成游戏角色_ICCV2019论文解析
人脸照片自动生成游戏角色_ICCV2019论文解析 Face-to-Parameter Translation for Game Character Auto-Creation 论文链接: http: ...
- 硬件delay评估表
硬件delay评估表 硬件延时评估表用于快速评估一个模型在特定硬件环境和推理引擎上的推理速度. Bw 主要用于定义PaddleSlim支持的硬件延时评估表的格式. 概述 硬件延时评估表中存放着所有可能 ...
- GPU—加速数据科学工作流程
GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...
- x86 cpu卷积网络的自动调谐
x86 cpu卷积网络的自动调谐 这是一个关于如何为x86cpu调整卷积神经网络的文档. 本文不会在Windows或最新版本的macOS上运行.要让它运行,需要将主体包装在 if __name__ = ...