Selenium成长之路-24 frame(iframe)的处理

2023-11-16

今天来了解一下 frame的标签。
frame标签有三种:frameset、iframe、frame;
>>>frameset就当做一个普通的标签使用,
>>>而frame与iframe就有点特殊了。
所以接下来的时间,我们要针对frame和iframe进行详细的操作。

1.frame 与 iframe的区别

  1. FrameIframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。
  2. frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架。
  3. Iframe 标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个HTML中显示。
  4. IframeFrame标记的最大区别是在网页中嵌入 的所包含的内容与整个页面是一个整体,而< /Frame>所包含的内容是一个独立的个体,是可以独立显示的。另外,应用Iframe还可以在同一个页面中多次显示同一内容,而不必重复这段内 容的代码。

2.如何判断元素是否在iframe上

这个很简单,
1.打开Firefox浏览器
2.定位元素,切换到FirePath界面
3.查看Firebug工具左上角,如果显示Top Window 说明没有在iframe上
4.如果显示 iframe# xxx 这样,说明在iframe上,# 后面是它的id。

iframe如下图:

在这里插入图片描述
Top Window 如下图:
在这里插入图片描述

3.frame 三种方法

3.1 switch_to.frame()

语法:

switch_to.frame(reference)

reference是传入的参数,用来定位frame的,可以传入id,name,index及selenium的WebElement对象(即find_element)。

举个例子:

<body>
<iframe src = "a.html" id = "frame1" name = "myframe">
</iframe>
</body>

如何定位到iframe呢:

  from selenium import webdriver
  
  driver = webdriver.Chrome()
  #用frame的index来定位,第一位时0
  driver.switch_to.frame(0)

一般情况,咱们使用id和name就能解决大部分问题。
但是,万事都有特例,如果没有id和name怎么办?
这难不倒我们,可以直接使用index 和webElement来定位。
>> index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位。
>> WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象。

3.2 switch_to.default_content()

如何返回到主文档,我们就是用:

driver.switch_to.default_content()

3.3 switch_to.parent_frame()

如果我们遇到嵌套的frame,怎么办呢?
不要慌,我们直接用:switch_to.parent_frame()

举个例子:

<html>
	<iframe id = "frame1">
		<iframe id = "frame2"/>
	</iframe>
</html>

①从主文档切到frame2,一层层切入

  driver.switch_to.frame("frame1")
  driver.switch_to.frame("frame2")

②从frame2再切回frame1,

driver.switch_to.parent_frame() 

#只针对非主文档,才能看出效果
#如果是主文档,则看不出效果
#switch_to.parent_frame() 这功能,其实就相当于后退的方法。

敲黑板:
有的大佬在使用switch_to_frame()写法时,报错,
是由于官网现在不推荐了。
直接改成
switch_to.frame()
这个写法即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium成长之路-24 frame(iframe)的处理 的相关文章

  • 系统架构设计方法-4-数据架构设计篇

    数据架构设计工作内容 数据分布 数据实体和应用的对应关系 个人感觉 这里面写数据流转不太妥 流传应该都是应用层面来完成的 应用和数据之间的读写关系的组合 工作内容 1 确定数据域 系统架构设计模板和示例 工作内容 2 确定数据主题 系统设计
  • GitHub官方App正式推出了,小伙伴们确定不下载一个吗?

    小伙伴们 大家好 今天给大家推荐的是GitHub软件 微软旗下的 Github 也正式发布了 GitHub 移动版 它是 iOS 和 Android上对 GitHub 网页桌面版的完全体验版 现在 我们可以随时随地在移动设备上与我们的团队保

随机推荐

  • 尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)

    尚硅谷Java零基础全套视频教程 宋红康2023版 java入门自学必备 开发环境 jdk17 idea2022 第一阶段 Java基本语法 一 Java语言概述 01 Java新版视频教程简介 02 课程目录说明 03 Java基础全栈学
  • 报表开发组件FastReport Mono v2023.1 - 支持与My Reports Cloud集成

    FastReport Mono v2023 1现已推出 最新版中更新了与 My Reports Cloud 的部分集成 来自 JasperReports 的模板转换器等功能 同时修复了10余处问题 点击下方免费试用哦 FastReport
  • URI中的 “//” 有什么用

    前言 很多时候互联网很多东西都是很有意思的 比如 http 这个双斜杠 解释这个东西就需要翻墙去国外了 入口 在2009年10月 BBC中的一篇新闻讲述了 的用途 截图如下所示 文章翻译 互联网地址开头的大幅删减长期以来一直困扰着网民 现在
  • JavaScript奇淫技巧:反调试

    JavaScript奇淫技巧 反调试 本文 将分享几种JS代码反调试技巧 目标是 实现防止他人调试 动态分析自己的代码 检测调试 方法一 用console log检测 代码 var c new RegExp 1 c toString fun
  • OpenCV+python实现摄像头简单手势识别--进度条控制亮度

    文章目录 前言 一 整体框架 二 使用步骤 1 引入库 2 第一步 打开摄像头 3 第二步 设置回调函数 4 第三步 肤色检测 5 第四步 进行高斯滤波 6 第五步 边缘轮廓检测 7 第六步 求出手势的凹凸点 8 第七步 利用凹凸点个数判断
  • c++数组排序的五种方法

    方法一 冒泡排序 比较相邻的元素 如果第一个比第二个大 就交换他们两个 对每一对相邻元素做同样的工作 执行完毕后 找到第一个最大值 重复以上的步骤 每次比较次数 1 直到不需要比较 示例 对数组4 2 8 0 5 7 1 3 9 进行排序
  • 2023华为od机试 Java【矩阵的最大值和最小值】

    题目 现在给你一个N M矩阵 M表示有M个矩阵 你的目标是找出M个该矩阵中每列元素的最大值 然后输出这M个值中的最小值 示例1 输入 1 2 3 4 输出 3 代码 import java util Scanner public class
  • 人工智能必备数学基础-目录

    数学基础学习笔记 为了学习人工智能 需要先打好数学基础 这里是为学习人工智能而准备的数学基础 线性代数 1 1 矩阵及其运算 1 1 1 矩阵基本概念及意义 1 1 2 基本运算 1 1 3 矩阵的迹 1 1 4 矩阵的转置 1 1 5 对
  • linux中文件权限

    linux中一切都是文件 这个设计秒不可言阿 在linux系统中每一个文件都有 三组权限 所有者 所属组 其它用户 文件类型 符号 作用 普通文件 d 目录文件 l 链接文件 b 块设备文件 c 字符设备文件 p 管道文件 文件权限 ls
  • 设计模式-原型模式

    文章目录 前言 什么是原型模式 Java中的原型模式 使用场景 优缺点 结论 前言 在软件开发中 设计模式是一种重要的思想和方法 用于解决常见的编程问题 原型模式是其中之一 它允许我们通过复制现有对象来创建新对象 而无需依赖具体类的构造函数
  • Java System.out.println()的简单理解

    前言 想必很多人对System out println 只是简单的进行运用 并未深入了解其背后的原理 例如当问及当中的out是什么 很多人可能一时答不上来 又比如问道println 方法属于那个类 你可能不假思索的答System类 可结果真
  • PostgreSQL(一)Windows安装

    目录 一 下载 二 安装PostgreSQL 三 安装StackBuilder 四 打开PostgreSQL管理工具pgAdmin 五 打开命令行 一 下载 下载地址 https www enterprisedb com downloads
  • openstack热迁移机制分析(libvirt热迁移模型、nova热迁移控制逻辑、调试方法)

    前段时间在解决大内存热迁移失败的时候 查阅了下openstack热迁移相关知识 有了一些记录跟大家分享下 以基于L版openstack qemu kvm 跟大家分享下API库libvirt的热迁移机制和nova控制逻辑的一些记录 注 这篇博
  • Jquery获取select选中的文本与值

    Jquery获取select选中的文本与值 jquery获取select选择的文本与值 获取select 获取select 选中的 text ddlregtype find option selected text 获取select选中的
  • Python3 unittest学习

    Python3 unittest学习 unittest单元测试框架 基本结构 执行测试 普通方式执行 通过unittest模块执行 跳过测试与预期失败 使用子测试区分测试迭代 类与函数 class unittest TestCase met
  • Linux内核中进程的初始化

    分析start kernel时应该会注意到Linux内核0号进程的初始化 见init main c set task stack end magic init task 其中 init task为第一个进程 0号进程 的进程描述符结构体变量
  • com.aspose.diagram.afr: Unexcepted eof.

    背景 SpringBoot项目 使用aspose diagram操作Visio 并且使用了模具文件 并将其放在了resource下面 代码 读取resource下面的文件 这种方法在linux环境上面依然可以使用 Resource reso
  • C#访问SQLite数据库,实现数据的增删改查功能

    说明 本文的代码是基于Winform中举例的 经过实测可用 1 封装Sqlite操作类 sqLiteHelper using System using System Collections Generic using System Linq
  • Arduino调节反馈式比例线性组件

    当您需要了解执行器的确切位置时 就需要光学反馈系列 它功能强大 可靠的执行器带有内置的光学传感器 可在您需要时提供反馈 光反馈没有内置控制器 但确实提供了单相脉冲作为位置反馈信号 可以将其输入到诸如Arduino之类的外部控制器中 多个线性
  • Selenium成长之路-24 frame(iframe)的处理

    今天来了解一下 frame的标签 frame标签有三种 frameset iframe frame gt gt gt frameset就当做一个普通的标签使用 gt gt gt 而frame与iframe就有点特殊了 所以接下来的时间 我们