selenium有多个frame页时的操作方法(5)

server/2024/10/21 11:33:20/

图片

之前文章我们提到,在webdriver.WebDriver类有一个switch_to方法,通过switch_to.frame()可以切换到不同的frame页然后才再定位某个元素做一些输入/点击等操作。

比如下面这个测试网站有2个frame页:http://www.sahitest.com/demo/framesTest.htm,每个frame页的元素是一样的。

图片

检查下Link Test的元素信息,发现两个frame,在每个frame下面都有这个元素的相同信息。

图片

每个frame中的相同的元素信息都一样:

图片

图片

switch_to.frame方法

当我们定义好driver对象,打开网页并使用driver.switch_to.frame()方法切换frame时,该方法其实调用了selinium中的SwitchTo类中的frame方法:

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Safari()
# 打开一个网页
driver.get("http://www.sahitest.com/demo/framesTest.htm")

图片

方法中的参数frame_reference可以是fame的name,或者代表frame的数字(从0开始),或者是该frame元素位置,如函数中的的介绍。

  • driver.switch_to.frame('frame_name')
  • driver.switch_to.frame(1)
  • driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])

示例:分别打开网页上面和下面对应的‘Link Test’链接

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Safari()
# 打开一个网页
driver.get("http://www.sahitest.com/demo/framesTest.htm")
driver.maximize_window()
sleep(2)#先切换到第1个frame
driver.switch_to.frame(0)
sleep(1)
#点击TestLink链接
driver.find_element(By.XPATH,'/html/body/table/tbody/tr/td[1]/a[1]').click()
sleep(2)#完成后 先返回上一级frame或者默认frame 然后才能切换到第2个frame
#以下两个方法都可使用
driver.switch_to.default_content()
#driver.switch_to.parent_frame()#切换第2个frame
driver.switch_to.frame(1)
sleep(1)
driver.find_element(By.XPATH,'/html/body/table/tbody/tr/td[1]/a[1]').click()
sleep(4)

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。


http://www.ppmy.cn/server/129691.html

相关文章

有哪些AI产品可以真正提高办公和学习效率?

你还在为加班熬夜、效率低下而苦恼吗?还在担心错过AI时代的风口,被时代抛弃吗? 告别效率焦虑,AI赋能你的学习和工作 现在有一些AI产品能为我们提供帮助,比如豆包、KIMI、通义千问、ChatGPT等等,帮助我们做P…

星辰计划07-深入解析源码(逐行debug)dubbo服务调用数据传输层

前言 前面我们分析的dubbo的服务引用,和调用,但是没有更深入底层数据传输和编码,没有深入到网络传输当中去,所以这一篇我们主要分析服务调用的数据传输层。 源码分析 分析DubboInvoker#invoke 步骤分析 轮询选择一个ExchangeCl…

【SDRE仿真】旋转无人机摆锤

摘要 本论文展示了一种基于SDRE控制算法的旋转无人机摆锤系统的设计与仿真。无人机系统与附加的摆锤构成了一个非线性耦合系统,通过使用状态依赖Riccati方程(SDRE)控制方法,成功实现了对系统动态的有效控制。该模型通过Matlab仿真…

使用YOLOv11进行视频目标检测

使用YOLOv11进行视频目标检测 完整代码 import cv2 from ultralytics import YOLOdef predict(chosen_model, img, classes[], conf0.5):if classes:results chosen_model.predict(img, classesclasses, confconf)else:results chosen_model.predict(img, confconf)return r…

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突,点击事件不生效(表格行点击事件和行内元素点击事件冲突)需要阻止事件冒泡 问题描述 1.点击列的编辑按钮,会触发按钮本身事件,同时会触发行点击事件 2.点…

世昌股份与吉利亲密关系:资产负债率远高同行,应收账款周转率偏弱

《港湾商业观察》杨丹妮 9月23日,河北世昌汽车部件股份有限公司(以下简称“世昌股份”)回复了第一轮审核问询函,公司于今年六月递表北交所,保荐机构为东北证券。 近几年新能源汽车如日中天,世昌股份也因此…

R语言绘制折线图

折线图是实用的数据可视化工具,通过连接数据点的线段展示数据随时间或变量的变化趋势。在经济、科学、销售及天气预报等领域广泛应用,为决策和分析提供依据。它能清晰呈现经济数据动态、助力科学研究、反映企业销售情况、预告天气变化,以简洁…

Spring Boot洗衣店订单管理:提升客户满意度

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…