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

从0开始python学习-30.selenium frame子页面切换

目录

1. frame切换逻辑

2. 多层子页面情况进行切换

3. 多个子页面相互切换


1. frame切换逻辑

1.1. 子页面的类型一般分为两种

  • frame标签

  • iframe标签

1.2. 子页面里面的元素和主页面的元素是相互独立

  • 子页面元素需要进去切换才能操作

  • 如果已经进入子页面,那么无法操作主页面元素

  • 子页面和主页面以及其他子页面的切换操作一定要有始有终,进去了就要出来,才能操作其他元素

1.3. 注意查看需要定位的元素上层页面到底有几个,需要一层一层的切换进入子页面后才能进行操作

2. 多层子页面情况进行切换

以QQ邮箱登录页面为例:

根据F12元素定位查看【密码登录】元素往上层翻查可得知【密码登录】按钮上面有两个页面,需要逐步进入这两个页面中后才能正确查找到该元素,如果不在对应子页面中是无法获取到元素的。

driver = webdriver.Chrome()
url =  "https://mail.qq.com/"
driver.get(url)
driver.maximize_window ()driver.implicitly_wait(5)
# 进入到登录框子页面中
frame1 = driver.find_element(By.XPATH,'//*[@id="QQMailSdkTool_login_loginBox_qq"]/iframe')
driver.switch_to.frame(frame1)
# 进入到密码登录所在的子页面中
frame2 = driver.find_element(By.XPATH,'//*[@id="ptlogin_iframe"]')
driver.switch_to.frame(frame2)
# 操作密码登录按钮
element1 = driver.find_element(By.XPATH,'//*[@id="switcher_plogin"]').click()sleep(5)
driver.quit()

3. 多个子页面相互切换

以页面中存在两个输入框为例:

由下图可知整个编辑页面是在一个【//*[@id="main-frame"]】中的,然后输入框1和输入框2分别需要进入到各自的子页面后才能进行内容的输入

# 若之前就已经存在过切换子页面的操作,需要首先将页面切换到主页面
driver.switch_to.default_content()# 切换到【编辑】的主页面
driver.implicitly_wait(5)
frame2 = driver.find_element(By.XPATH,'//*[@id="main-frame"]')
driver.switch_to.frame(frame2)# 进入【输入框1】的子页面并写入内容
frame3 = driver.find_element(By.XPATH,'/html/body/div[2]/form/table[1]/tbody/tr[30]/td[2]/div/div/div[2]/iframe')
driver.switch_to.frame(frame3)
el3 = driver.find_element(By.XPATH,'/html/body').send_keys('输入内容')# 操作其他动作之前需先切换到主页面,再切换整个新增子页面
driver.switch_to.default_content()
frame = driver.find_element(By.XPATH, '//*[@id="main-frame"]')
driver.switch_to.frame(frame)# 切换到【输入框2】的子页面后再二次切换进入下一个子页面进行输入操作
frame4 = driver.find_element(By.XPATH,'/html/body/div[2]/form/table[1]/tbody/tr[32]/td[2]/div/div/div[2]/iframe')
driver.switch_to.frame(frame4)
el4 = driver.find_element(By.XPATH,'/html/body').send_keys('输入内容输入内容输入内容输入内容输入内容输入内容')# 切记最后一定要找对页面层级进行最后的点击动作
driver.switch_to.default_content()
frame = driver.find_element(By.XPATH, '//*[@id="main-frame"]')
driver.switch_to.frame(frame)

实现效果为:

相关文章:

从0开始python学习-30.selenium frame子页面切换

目录 1. frame切换逻辑 2. 多层子页面情况进行切换 3. 多个子页面相互切换 1. frame切换逻辑 1.1. 子页面的类型一般分为两种 frame标签 iframe标签 1.2. 子页面里面的元素和主页面的元素是相互独立 子页面元素需要进去切换才能操作 如果已经进入子页面,那么…...

asp.net core 远程调试

大概说下过程: 1、站点发布使用Debug模式 2、拷贝到远程服务器,以及iis创建站点。 3、本地的VS2022的安装目录:C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE下找Remote Debugger 你的服务器是64位就拷贝x64的目…...

Java spring boot 一次调用多个请求

Java Spring Boot是一种基于Java编程语言的开发框架,它提供了一种快速构建高效、可伸缩和易于维护的企业级应用程序的方式。在实际的应用开发中,我们常常需要调用多个独立的请求来完成某个业务功能。然而,传统的同步方式一次只能调用一个请求…...

DRM全解析 —— CRTC详解(4)

接前一篇文章:DRM全解析 —— CRTC详解(3) 本文继续对DRM中CRTC的核心结构struct drm_crtc的成员进行释义。 3. drm_crtc结构释义 (21)struct drm_object_properties properties /** properties: property tracking …...

六个为Rust构建的IDE

Rust语言的学习曲线适中,介于高级语言和低级语言之间。这门语言既能编写系统软件,将嵌入式设备编译为x86 ARM,也可以用于前端技术,这要归功于WebAssembly。 在日渐成熟的发展中,Rust开始拥有更好的工具来提高效率。最…...

25 Python的collections模块

概述 在上一节,我们介绍了Python的sqlite3模块,包括:sqlite3模块中一些常用的函数和类。在这一节,我们将介绍Python的collections模块。collections模块是Python中的内置模块,它实现了特殊的容器数据类型,提…...

JEPG Encoder IP verilog设计及实现

总体介绍: 采用通用的常规 Verilog 代码编写,可用于任何 FPGA。 该内核不依赖任何专有 IP 内核,而是用 Verilog 编写了实现 JPEG 编码器所需的所有功能,代码完全独立。 编码器内核的输入是一条 24 位数据总线,红色像素、绿色像素和蓝色像素各有 8 位。 信号 "data_i…...

yolov5 web端部署进行图片和视频检测

目录 1、思路 2、代码结构 3、代码运行 4、api接口代码 5、web ui界面 6、参考资料 7、代码分享 1、思路 通过搭建flask微型服务器后端,以后通过vue搭建网页前端。flask是第一个第三方库。与其他模块一样,安装时可以直接使用python的pip命令实现…...

嵌入式养成计划-34--函数库

七十二、 函数库 1. 库的概念 库是一个二进制可执行文件,与二进制可执行程序比较,库是不能单独运行的。 库中存放的是功能函数,没有主函数(main函数) 库需要被载入到内存中使用 标准的基础库中存放了很多已经写好的…...

PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱

PM864AK01-eA 3BSE018161R2 工业人工智能供应链先驱 吞吐量和Macnica Networks的战略合作伙伴关系将使Macnica Networks的客户能够加速和量化智能工厂计划的投资回报(ROI)。高管、经理和运营负责人可以使用Macnica Networks领先的制造场所数据收集平台和ThroughPut基于约束理论…...

参与现场问题解决总结(Kafka、Hbase)

一. 背景 Kafka和Hbase在现场应用广泛,现场问题也较多,本季度通过对现场问题就行跟踪和总结,同时结合一些调研,尝试提高难点问题的解决效率,从而提高客户和现场满意度。非难点问题(历史遇到过问题&#xf…...

基于PSD-ML算法的语音增强算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.加窗处理: 2.分帧处理: 3.功率谱密度估计: 4.滤波处理: 5.逆变换处理: 6.合并处理: 5.算法完整程序工程 1.算法…...

【1++的Linux】之文件(一)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,初识文件二,文件接口 一,初识文件 文件就是文件内容属性。因此对文件的操作无非就是对文件内容的操作和对文件属性的操作。 我们访问…...

Kafka 高可用

正文 一、高可用的由来 1.1 为何需要Replication 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的Partition数据都不可被消费,这与Kafka数据持久性及Delivery Guarantee的设计目标相悖。同时Pr…...

关于分布式操作系统

关于分布式操作系统,如果你不太理解的话,可以把它看成是传统操作系统延展。二者的区别在于,传统的操作系统都是单机系统,只能在一台计算机上运行,而分布式操作系统是多机系统,每台计算机都是系统中的一个计…...

Pytorch使用DataLoader, num_workers!=0时的内存泄露

描述一下背景,和遇到的问题: 我在做一个超大数据集的多分类,设备Ubuntu 22.04i9 13900KNvidia 409064GB RAM,第一次的训练的训练集有700万张,训练成功。后面收集到更多数据集,数据增强后达到了1000万张。…...

chromedriver下载与安装方法

下载与安装: 1.查看Chrome浏览器版本 首先,需要检查Chrome浏览器的版本。请按照以下步骤进行: 打开Chrome浏览器。 点击浏览器右上角的菜单图标(三个垂直点)。 选择“帮助”(Help)。 在下拉菜单中选择“…...

数据库查询详解

数据库查询操作 前置:首先我们创建一个练习的数据库 /* SQLyog Professional v12.09 (64 bit) MySQL - 5.6.40-log : Database - studentsys ********************************************************************* *//*!40101 SET NAMES utf8 */;/*!40101 SET …...

c++视觉ROI 区域和ROI 区域图像叠加

ROI 区域提取和ROI 区域图像叠加 ROI 区域提取 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." …...

scrapy爬虫系列之安装及入门介绍

前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作。但是,更为广泛使用的Python爬虫框架是——Scrapy爬虫。这是一篇在Windows系统下介绍 Scrapy爬虫安装及…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...