当前位置: 首页 > news >正文

使用Selenium自动化测试定位iframe以及修改img标签的display属性值

        在使用 Selenium 进行自动化测试时,处理 iframe 是一个常见问题。当页面中出现 iframe 时,需要先切换到该 iframe 内部,才能正常定位和操作其中的元素。以下是处理 iframe 的步骤和示例代码:

步骤

  1. 切换到 iframe:使用 switch_to.frame() 方法切换到目标 iframe。
  2. 定位和操作 iframe 中的元素:在切换到 iframe 后,可以使用 find_element 方法定位元素并进行操作。
  3. 切换回主文档:使用 switch_to.default_content() 方法切换回主文档,以便继续操作页面中的其他元素。

示例代码

以下是一个完整的示例,假设在点击一个按钮后会出现一个 iframe

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time# 设置 WebDriver 的路径(例如 ChromeDriver)
driver_path = '/path/to/chromedriver'  # 请替换为你的 chromedriver 路径# 启动 Chrome 浏览器
driver = webdriver.Chrome(executable_path=driver_path)# 打开目标网站
driver.get('https://example.com')  # 请替换为目标网站的 URL# 等待并点击一个按钮,假设这会加载出一个 iframe
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'myButton'))  # 替换为实际按钮的选择器
)
button.click()# 等待 iframe 加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe'))  # 等待 iframe 加载
)# 切换到 iframe,假设这里使用索引 0 来选择第一个 iframe
driver.switch_to.frame(0)# 现在可以定位并操作 iframe 内部的元素
input_field = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'iframeInput'))  # 替换为实际 iframe 内部元素的选择器
)
input_field.send_keys('输入内容')# 还可以点击按钮等其他操作
submit_button = driver.find_element(By.ID, 'iframeSubmit')  # 替换为实际按钮的选择器
submit_button.click()# 处理完成后可以切换回主文档
driver.switch_to.default_content()# 继续操作主文档中的其他元素
# ...# 如果需要关闭浏览器
driver.quit()

关键点说明

  1. 切换到 iframe

    • 使用 driver.switch_to.frame() 方法切换到指定的 iframe。可以使用 frame 的索引(如 0,表示第一个 iframe)、name 属性,或持有 WebElement 对象(如 iframe_element)进行切换。
  2. 等待条件

    • 使用 WebDriverWait 和 expected_conditions 来有效等待元素加载,这样可以提高稳定性。
  3. 切换回主文档

    • 在完成对 iframe 中元素的操作后,使用 driver.switch_to.default_content() 切换回主文档,以便继续操作其他页面元素。
  4. 处理嵌套 iframe

    • 如果 iframe 中还有其他 iframe,则需要多层次地切换。

 

        同时可以使用 Python 的 Selenium 库来修改网页元素的 display 属性,使其在 block 和 none 之间切换。比如CSNDN上面的点赞,就是由两个img标签构成(未点赞和点赞两个状态的图标),一个img标签的display属性是block,另一个img标签的display属性是none。以下是一个简单的示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time# 设置 WebDriver 的路径(例如 ChromeDriver)
driver_path = '/path/to/chromedriver'  # 请替换为你的 chromedriver 路径# 启动 Chrome 浏览器
driver = webdriver.Chrome(executable_path=driver_path)# 打开一个网页(例如本地 HTML 文件)
driver.get('file:///path/to/your/html/file.html')  # 请替换为你的 HTML 文件路径# 找到要操作的元素
element = driver.find_element(By.ID, 'myDiv')# 初始显示状态
print(f"初始 display 属性: {element.value_of_css_property('display')}")# 切换显示状态
def toggle_display():if element.value_of_css_property('display') == 'none':driver.execute_script("arguments[0].style.display = 'block';", element)else:driver.execute_script("arguments[0].style.display = 'none';", element)# 切换显示状态几次
for _ in range(5):toggle_display()print(f"当前 display 属性: {element.value_of_css_property('display')}")time.sleep(1)# 关闭浏览器
driver.quit()

在这个示例中:

  1. 使用 webdriver.Chrome 启动 Chrome 浏览器,并打开一个本地 HTML 文件。
  2. 使用 find_element 找到要操作的元素(通过 ID)。
  3. 使用 value_of_css_property 获取当前的 display 属性。
  4. 使用 driver.execute_script 执行 JavaScript 来切换 display 属性。
  5. 循环切换显示状态,并在每次切换后打印当前的 display 属性。

 

相关文章:

使用Selenium自动化测试定位iframe以及修改img标签的display属性值

在使用 Selenium 进行自动化测试时,处理 iframe 是一个常见问题。当页面中出现 iframe 时,需要先切换到该 iframe 内部,才能正常定位和操作其中的元素。以下是处理 iframe 的步骤和示例代码: 步骤 切换到 iframe:使用…...

DAY13

面试遇到的新知识点 char str[10],只有10个字符的空间,但是只能存储9个字符,最后一个字符用来存储终止符\0 strlen只会计算\n,不会计算\0 值传递: void test2(char * str) {str "hello\n"; }int main() {char * str;test2(str);…...

WPF 自定义用户控件(Content根据加减按钮改变值)

前端代码&#xff1a; <UserControl.Resources><Style x:Key"Num_Button_Style" TargetType"Button"><Setter Property"MinWidth" Value"30" /><Setter Property"Height" Value"35" />&l…...

CPU、GPU、显卡

CPU VS GPUCPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央处理器GPU&#xff08;Graphics Processing Unit&#xff09;&#xff0c;图形处理单元GPU 的技术演变CUDA&#xff08;Compute Unified Device Architecture&#xff09; 显卡&#xff08;Video…...

深入理解 Django 自定义用户模型

1. 引言 Django 作为一个强大的 Web 框架&#xff0c;内置了用户认证系统。然而&#xff0c;实际项目中我们通常需要扩展用户模型&#xff0c;以满足不同的业务需求。Django 提供了继承 AbstractUser 的方式&#xff0c;让我们能够轻松地定制用户模型。本文将通过一个自定义用…...

顺序表和链表的区别

顺序表和链表的区别 不同点顺序表链表&#xff08;带头双向循环&#xff09;存储空间物理上一定连续逻辑上连续物理上不一定连续随机访问&#xff08;用下标随机访问&#xff09;支持&#xff1a;O(1)不支持&#xff1a;O(N)任意位置插入或者删除元素可能需要搬移元素&#xf…...

系分-数据库总结

历年试题2024年05月试题 BCN范式&#xff0c;模式分解&#xff0c;触发器类型2023年05月试题 NoSQL基本特点&#xff0c;NoSQL对比&#xff0c;混合数据库2022年05月试题4 两段锁&#xff0c;事务并发&#xff0c;数据一致&#xff0c;本地事务发布20…...

new Date()解析

JavaScript 中的 new Date() 构造函数用于创建一个表示日期和时间的对象。Date 对象使得你可以以多种方式获取、设置和格式化日期和时间。让我们深入解析一下 new Date() 及其用法。 创建 Date 对象 可以通过多种方式创建 Date 对象&#xff1a; 不带参数&#xff1a; let no…...

df 的各种用法 以及与du 的区别

df的用法 在 Linux 中&#xff0c;“df”&#xff08;disk free&#xff09;是一个用于显示磁盘空间使用情况的命令。 一、主要功能 它可以列出文件系统的磁盘空间使用情况&#xff0c;包括磁盘总容量、已使用空间、可用空间以及使用率等信息。 二、常见用法及参数 基本用法&a…...

2024年下半年软考准考证什么时候打印?

2024年下半年软考准考证打印入口网址如下&#xff1a; https://bm.ruankao.org.cn/sign/welcome 广东的同学特别注意&#xff1a;准考证打印截止时间是11月8号&#xff0c;也就是考试前一天。一定要提前打印准考证&#xff0c;考试当天是无法打印的。 2024年下半年软考准考证…...

企业安全运行与维护(Enterprise Security Operation and Maintenance)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

每日“亿“题 东方博宜OJ 1424-自然数的分解

原题链接&#xff1a;1424 - 自然数的分解-东方博宜OJ 题目描述 给定自然数 n &#xff0c;将其拆分成若干自然数的和。输出所有解&#xff0c;每组解中数字按从小到大排列。相同数字的不同排列算一组解。 如&#xff0c;读入整数 3 &#xff0c;分解方案如下&#xff1a; …...

初识Linux · 文件(1)

目录 前言&#xff1a; 回顾语言层面的文件 理解文件的预备知识 文件和磁盘 使用和认识系统调用函数 前言&#xff1a; 本文以及下篇文章&#xff0c;揭露的都是Linux中文件的奥秘&#xff0c;对于文件来说&#xff0c;初学Linux第一节课接触的就是文件&#xff0c;对于C…...

【MYSQL】mysql约束---自增长约束(auto_increment)

1、概念 在Mysql中&#xff0c;当主键为自增长后&#xff0c;这个主键的值就不再需要用户输入数据了&#xff0c;而由数据库系统根据定义自动赋值。每增加一条记录&#xff0c;主键会自动以相同的步长进行增长。 注意&#xff1a;自增长约束通常与主键放在一起使用。 通过给…...

基于STM32设计的智能学习台灯(华为云IOT)(238)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成【4】ESP8266工作模式配置1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要1.4 开发工具的选择【1…...

网络层协议 --- IP

序言 在这篇文章中我们将介绍 IP协议&#xff0c;经过这篇文章的学习&#xff0c;我们就会了解运营商到底是如何为我们提供服务的以及平时我们所说的内网&#xff0c;公网到底又是什么&#xff0c;区别是什么&#xff1f; IP 地址的基本概念 1. IP 地址的定义 每一个设备接入…...

Java虚拟机(JVM)介绍

**Java虚拟机&#xff08;JVM&#xff09;**是Java平台的核心组件&#xff0c;它提供了一个运行时环境&#xff0c;使得Java程序可以在不同的操作系统和硬件平台上运行而无需修改。 JVM的架构 JVM主要由以下几个部分组成&#xff1a; 类加载器&#xff08;Class Loader&#xf…...

1000题-计算机网络系统概述

术语定义与其他术语的关系SDU&#xff08;服务数据单元&#xff09;相邻层间交换的数据单元&#xff0c;是服务原语的表现形式。在OSI模型中&#xff0c;SDU是某一层待传送和处理的数据单元&#xff0c;即该层接口数据的总和。 - SDU是某一层的数据集&#xff0c;准备传递给下一…...

Authentication Lab | IP Based Auth Bypass

关注这个靶场的其它相关笔记&#xff1a;Authentication Lab —— 靶场笔记合集-CSDN博客 0x01&#xff1a;IP Based Auth Bypass 前情提要 有些开发人员为了图方便&#xff0c;会给站点设置一个 IP 白名单&#xff0c;如果访问站点的用户的 IP 在白名单内&#xff0c;则允许访…...

linux中的火墙优化策略

1.火墙介绍 1. netfilter 2. iptables 3. iptables | firewalld 2.火墙管理工具切换 在rocky9 中默认使用的是 firewalld firewalld -----> iptables dnf install iptables - services - y systemctl stop firewalld systemctl disable firewalld systemctl mask fi…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...