Python实战——Selenium与iframe结合应用

1. 页面中为什么会存在iframe

网页中存在iframe(内联框架)的主要原因是为了实现页面的嵌套和分割,使得网页可以同时加载多个独立的HTML文档。

以下是一些常见的使用场景和目的:

  1. 嵌入其他网页或内容:通过使用iframe,可以将其他网页或外部内容嵌入到当前页面中。这对于显示来自不同源的内容、展示广告、加载地图或社交媒体插件等功能非常有用。

  2. 分割页面:有时,将页面分割为多个部分以便同时显示不同的内容是很有帮助的。通过在一个页面中使用多个iframe,可以在每个iframe中加载不同的内容,使页面更加灵活和可定制。

  3. 安全性:使用iframe可以实现安全隔离,防止恶意或不受信任的内容对整个页面产生影响。通过将不受信任的内容放置在单独的iframe中,并限制其与主页面之间的交互,可以提高页面的安全性。

  4. 平行加载:当需要同时加载多个独立的内容时,可以使用iframe。通过将内容分散到多个iframe中,可以并行加载它们,从而提高网页的加载速度和性能。

需要注意的是,使用iframe也可能引起一些问题,例如可能会导致SEO(搜索引擎优化)问题、复杂的页面结构等。因此,在使用iframe时,应权衡其优缺点,并确保合理使用。

2.需求:如何获取到包含"确定"按钮的元素

页面示例代码

<body><iframe><div class="btn-group"><button class="primary" onclick="handlerClick()">已阅读</button></div></iframe></body>

解决:

要获取包含 “确定” 按钮的元素,您需要首先切换到 iframe 中,然后再找到按钮元素。以下是使用 Selenium 和 Python 进行这一操作的示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 启动浏览器
driver = webdriver.Chrome()# 打开网页
driver.get("网页地址")# 切换到 iframe 中
iframe = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe)# 现在可以找到按钮元素
button = driver.find_element(By.XPATH, "//button[contains(text(), '已阅读')]")# 点击按钮
button.click()

在这个示例中,首先通过 driver.find_element 方法找到 iframe 元素,然后通过 driver.switch_to.frame 方法切换到 iframe 中。接下来,我们可以在 iframe 中使用 driver.find_element 方法找到 “已阅读” 按钮元素,并进行点击操作。

如果有多个iframe,确定在iframe1中,取消在 iframe2,需要依次点击确定和取消,如何操作

3.需求延展:若页面中存在多个iframe,并且需要在不同的iframe 中执行操作

若页面中存在多个iframe,并且需要在不同的iframe 中执行操作,您可以按照以下步骤来操作:

from selenium import webdriver
from selenium.webdriver.common.by import By# 启动浏览器
driver = webdriver.Chrome()# 打开网页
driver.get("网页地址")# 切换到 iframe1 中
iframe1 = driver.find_element(By.XPATH, "xpath_of_iframe1")
driver.switch_to.frame(iframe1)# 点击“确定”按钮
button_confirm = driver.find_element(By.XPATH, "xpath_of_confirm_button_in_iframe1")
button_confirm.click()# 切换回最外层页面
driver.switch_to.default_content()# 切换到 iframe2 中
iframe2 = driver.find_element(By.XPATH, "xpath_of_iframe2")
driver.switch_to.frame(iframe2)# 点击“取消”按钮
button_cancel = driver.find_element(By.XPATH, "xpath_of_cancel_button_in_iframe2")
button_cancel.click()

在这个示例中,我们首先切换到 iframe1 中,然后点击确认按钮。接着使用 driver.switch_to.default_content() 切回到最外层页面,再切换到 iframe2 中,然后点击取消按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin语言实现单击任意TextVIew切换一个新页面,并且实现颜色变换

<LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:orientation"vertical"android:layout_height"match_parent"><!-- 这里放置你的其他视图组件 -->&…

软件开发、网络空间安全、人工智能三个方向的就业和前景怎么样?哪个方向更值得学习?

软件开发、网络空间安全、人工智能这三个方向都是当前及未来的热门领域&#xff0c;每个领域都有各自的就业前景和价值&#xff0c;以下是对这三个方向的分析&#xff1a; 1、软件开发&#xff1a; 就业前景&#xff1a;随着信息化的加速&#xff0c;软件开发的需求日益增长。…

SVG的viewBox、width和height释义, 示例及代码

svg的是没有边界的&#xff0c;svg画布只是用于展示svg世界中某一个范围的内容&#xff0c;而对于超过了svg画布范围的内容&#xff0c;则会被遮挡。默认svg画布默认显示世界坐标下原点坐标的width*height面积的矩形视野。 ​ 我们可以通过viewBox来修改默认的显示配置&#…

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云&#xff0c;解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包&#xff0c;导入工程会保存&#xff0c;因为builder.gradle的第20行开始有取git信息&#xff0c;如…

springboot(ssm宝鸡文理学院学生成绩动态追踪系统 成绩管理系统Java(codeLW)

开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库工具&#xff1a;Navicat 开发软件&#xff1a;ecl…

java的语法和C#有哪些不同?

Java 和 C# 都是现代编程语言&#xff0c;它们在很多方面有相似之处&#xff0c;但也存在一些语法和特性上的不同。以下是一些 Java 和 C# 之间的主要语法差异&#xff1a; 1、语法结构&#xff1a; Java 使用大括号 {} 表示代码块&#xff0c;而 C# 也是如此。两者在大多数基…

实战提升(六)

前言&#xff1a;Practice makes perfect&#xff01;今天实战Leetcode链表分割还有回文结构。今天的题全都来自于牛客网。 实战一&#xff1a; 思路&#xff1a;我们一这个链表为例&#xff0c;小于5的链表尾插到第一个链表&#xff0c;大于5的链表尾插到第二个链表&#xf…

React升级到18版本

前言 升级前react版本是16.9.0&#xff0c;react-dom版本为16.9.0&#xff0c;react-router-dom为5.1.2版本。 安装 // npm npm install react react-dom// yarn yarn add react react-dom// pnpm pnpm install react react-dom启动项目 此时&#xff0c;项目可以正常运行&…

跟李沐学AI-深度学习课程05线性代数

线性代数 &#x1f3f7;sec_linear-algebra 在介绍完如何存储和操作数据后&#xff0c;接下来将简要地回顾一下部分基本线性代数内容。 这些内容有助于读者了解和实现本书中介绍的大多数模型。 本节将介绍线性代数中的基本数学对象、算术和运算&#xff0c;并用数学符号和相应…

学习.NET验证模块FluentValidation的基本用法

开源博客项目Blog .NET中使用FluentValidation验证部分对象实例的属性值&#xff0c;本文学习FluentValidation模块的基本用法&#xff0c;后续再学习Blog .NET项目FluentValidation模块的用法。   FluentValidation模块支持Linq 表达式&#xff0c;同时支持链式操作&#xf…

element ui修改select选择框背景色和边框色

一、修改时间输入框的背景和边框字体颜色 <div class"hright"><el-date-picker :popper-append-to-body"false" class"custom-timeselect" v-model"form.timevalue" type"daterange" range-separator"至"…

qt-C++笔记之treeWidget初次使用

qt-C笔记之treeWidget初次使用 code review! 文章目录 qt-C笔记之treeWidget初次使用1.运行2.文件结构3.main.cpp4.widget.h5.widget.cpp6.widget.ui7.main.qrc8.qt_widget_test.pro9.options.png 1.运行 2.文件结构 3.main.cpp 代码 #include "widget.h"#include…

【C++】进阶模板

非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff1a;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使…

Android 14 Beta 1

Android 14的第一个 Beta 版&#xff0c;围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建&#xff0c;同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展&#xff0c;现在是时候向开发者和早期采…

论文笔记——BiFormer

Title: BiFormer: Vision Transformer with Bi-Level Routing AttentionPaper: https://arxiv.org/pdf/2303.08810.pdfCode: https://github.com/rayleizhu/BiFormer 一、前言 众所周知&#xff0c;Transformer相比于CNNs的一大核心优势便是借助自注意力机制的优势捕捉长距离…

基于STM32的外部中断(EXTI)在嵌入式系统中的应用

外部中断&#xff08;External Interrupt&#xff0c;EXTI&#xff09;是STM32嵌入式系统中常见且重要的功能之一。它允许外部事件&#xff08;例如按键按下、传感器触发等&#xff09;通过适当的引脚触发中断&#xff0c;从而应用于各种嵌入式系统中。在STM32微控制器中&#…

Vulkan渲染引擎开发教程 一、开发环境搭建

一 安装 Vulkan SDK Vulkan SDK 就是我们要搞的图形接口 首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home 二 安装 GLFW 窗口库 GLFW是个跨平台的小型窗口库&#xff0c;也就是显示窗口&#xff0c;图形的载体 去主页下载并安装&#xff0c;https://www.glfw.…

【自然语言处理(NLP)实战】LSTM网络实现中文文本情感分析(手把手与教学超详细)

目录 引言&#xff1a; 1.所有文件展示&#xff1a; 1.中文停用词数据&#xff08;hit_stopwords.txt)来源于&#xff1a; 2.其中data数据集为chinese_text_cnn-master.zip提取出的文件。点击链接进入github&#xff0c;点击Code、Download ZIP即可下载。 2.安装依赖库&am…

Spring 事务和事务传播机制

一、再谈事务 到这里 JavaEE 的学习基本是已经接近了尾声&#xff0c;相信大家对事务已然有了一些理解。当然这里我们还是简单的说明一下&#xff1a; 事务就是将一组操作封装成一个执行单元&#xff0c;要么全部成功&#xff0c;要么全部失败。比较典型的应用场景是转账&…

解决小程序路由超过10层限制

新建 navroter.js // 路由判断&#xff0c;小程序路由超过10层限制 // 避免小程序商品重复切换导致页面到结算单页时无法跳转到收货地址页&#xff0c;所以这里层级限制最大数为8 const MAX_VALUE 8 export function navigateTo(url) {let pages getCurrentPages()let dlt …