【selenium点选下拉框】解决无法选中对应选项的问题

需求

使用selenium点击下拉框,选中【是】选项。
在这里插入图片描述

代码

方法1

# 点击下拉框
driver.find_element('xpath','//*[@id="basicProcessDetail"]/div[2]/div[2]/div[1]/div/div[2]/div/div/div/div[1]/div[2]/form/div[11]/div[1]/div/div/div[1]/div[1]/div/i').click()
# 点击对应的选项
driver.find_element('xpath','//*[@id="basicProcessDetail"]/div[2]/div[2]/div[1]/div/div[2]/div/div/div/div[1]/div[2]/form/div[11]/div[1]/div/div/div[1]/div[2]/ul[2]/li[1]').click()

缺点:无法批量操作,每次都得复制很长的xpath表达式,费时费力。

方法2

def select_option(label_text, option_text):"""点选操作"""print(f'点选【{label_text}】', end='-> ')try:# 等待元素加载完成wait = WebDriverWait(driver, 10)  # 增加等待时间到10秒# 使用XPath定位包含特定文本的元素,然后找到其后的下拉框按钮dropdown_button = wait.until(EC.element_to_be_clickable((By.XPATH,f"//label[contains(text(), '{label_text}')]/following-sibling::div//div[contains(@class, 'ivu-select-selection')]")))# 点击下拉框按钮dropdown_button.click()# 使用XPath定位并点击特定的选项option_button = wait.until(EC.element_to_be_clickable((By.XPATH,f"//label[contains(text(), '{label_text}')]/following-sibling::div//div[contains(@class, 'ivu-select-dropdown')]//li[contains(text(), '{option_text}')]")))option_button.click()print('成功!')except Exception as e:print('失败!')# 调用
select_option("是否保护:", "是")

优点:可封装函数,方便批量操作类似的下拉框。

讲解

分析:

关于第二个XPath表达式的理解和分析:
功能:用于定位包含特定文本的<li>元素,它包含了两个主要部分:

  1. 定位包含特定文本的<label>元素
    • //label[contains(text(), '{label_text}')]:这部分XPath用于定位所有<label>元素,这些元素的文本包含您提供的label_text变量。{label_text}是一个占位符,代表您想要定位的标签文本,例如“是否双板卡保护:”。
  2. 定位<label>元素的后续兄弟节点中的<div>元素
    • /following-sibling::div:这表示我们想要找到<label>元素的后续兄弟节点,即紧随其后的<div>元素。
  3. 定位<div>元素中的<div>元素,该<div>包含ivu-select-dropdown
    • //div[contains(@class, 'ivu-select-dropdown')]:这表示我们想要找到包含ivu-select-dropdown类的<div>元素。
  4. 定位包含特定文本的<li>元素
    • //li[contains(text(), '{option_text}')]:这表示我们想要找到所有<li>元素,这些元素的文本包含您提供的option_text变量。{option_text}是一个占位符,代表您想要选择的选项文本,例如“是”或“否”。
      整个XPath表达式的组合用于找到包含特定文本的<label>元素,然后定位其后的<div>元素,该<div>包含下拉菜单。最后,它定位并点击包含特定选项文本的<li>元素。
      请注意,XPath表达式需要根据您的网页结构和实际情况进行调整。如果您的网页结构有所不同,请相应地修改XPath表达式。

思考:

为什么不能直接用//li[contains(text(), '{option_text}')]呢?

  1. 定位的准确性//li[contains(text(), '{option_text}')] 是一个相对宽泛的定位方式,它可能会匹配到页面上任何包含option_text<li>元素,而不一定是下拉菜单中的选项。这意味着这个XPath可能会匹配到多个元素,而不是您想要点击的特定选项。
  2. 性能:如果页面上有多个<li>元素包含option_text,那么使用这种定位方式可能会导致性能问题,因为它需要遍历更多的元素来找到匹配的元素。
  3. 可维护性:如果页面上<li>元素的布局或结构发生变化,那么使用这种定位方式可能会导致定位失败。
    相比之下,使用更具体的XPath,如 //label[contains(text(), '{label_text}')]/following-sibling::div//div[contains(@class, 'ivu-select-dropdown')]//li[contains(text(), '{option_text}')],可以确保更准确地定位到特定的选项,并且对页面的变化更加鲁棒。
    总之,虽然使用 //li[contains(text(), '{option_text}')] 是可行的,但它可能不如使用更具体的XPath那样准确和可靠。在实际应用中,建议根据页面的具体情况选择最合适的定位方式。

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

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

相关文章

雷达图概述以及实例

目录 一.雷达图概述1.何为雷达图2.雷达图的构成要素 二.实例&#xff08;以Excel、Python为例 &#xff09;1.Excel&#xff08;2021版&#xff09;2.Python 一.雷达图概述 1.何为雷达图 雷达图&#xff0c;是一种展现多维度数据间相对重要性或程度的可视化图形。以中心点为起…

分意图 Prompt 调试、后置判别改写、RLHF 缓解大模型生成可控性

分意图 Prompt 调试、后置判别改写、RLHF 这三种方法是为了提高大模型生成内容的可控性&#xff0c;具体原因如下&#xff1a; 分意图 Prompt 调试&#xff1a; 通过针对不同的任务或意图设计特定的 Prompt&#xff0c;可以更精确地引导模型生成符合期望的内容。分意图 Prompt …

java:stream流

1、 stream是什么&#xff1f;有什么作用?结合了什么技术&#xff1f; 答&#xff1a;简化集合、数组操作的API,结合了lambda表达式。 2、说说stream流处理数据的步骤是什么&#xff1f; 先得到集合或者数组的stream流。 然后调用stream流的方法对数据进行处理。 获取处理…

梧桐数据库(WuTongDB):什么是“顺序扫描”

“顺序扫描”是数据库管理系统&#xff08;DBMS&#xff09;中最基本的访问方法之一&#xff0c;尤其在查询数据时经常被使用。下面是关于顺序扫描技术的详细说明&#xff1a; 1. 定义 顺序扫描&#xff08;Sequential Scan&#xff09;是一种数据访问方法&#xff0c;其中数…

LabVIEW高速数据采集关键问题

在LabVIEW进行高速数据采集时&#xff0c;需要关注以下几个关键问题&#xff1a; 数据采集硬件的选择: 高速数据采集需要高性能的数据采集硬件&#xff0c;例如NI PXIe、USB DAQ等模块。硬件的选择应根据采集速率、通道数、精度、以及应用场景的具体需求来确定。 采集速率与带…

ByteBuffer详解

文章目录 1. ByteBuffer是抽象类&#xff0c;他的主要实现类为2. 获取方式3. 核心结构4. 核心API5. 字符串操作 1. ByteBuffer是抽象类&#xff0c;他的主要实现类为 HeapByteBuffer 堆ByteBuffer JVM内的堆内存 —> 读写操作 效率低 会受到GC影响MappedByteBuffer(DirectB…

桥接模式-多类型登录方式的思考

桥接模式-SSO单点登录 背景:(业务细节已脱敏)需求:问题:解决方式: OAuth2.0 实现单点登录四种授权模式桥接模式优化问题代码实现 背景:(业务细节已脱敏) 基于实习期间的一个代码重构的思考——业务细节已脱敏 基于内部旧框架实现业务toB管理系统&#xff0c;需要迁移数据并新的…

uni-app 手记集。

1、uni-app 是一个使用 Vue.js 开发的前端应用的框架&#xff0c;所以不会Vue.js的小伙伴可以先去看看Vue.js的基础教学。 2、.vue文件结构 <template><div class"container"></div> </template><script type"text/ecmascript-6&q…

【DiskGenius硬盘分区】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

TS 中的接口的作用是什么

在 TypeScript (TS) 中&#xff0c;接口&#xff08;Interfaces&#xff09;扮演着至关重要的角色&#xff0c;它们的主要作用包括&#xff1a; 定义代码契约&#xff1a;接口为代码提供了一种方式来定义对象的形状&#xff0c;即对象可以包含哪些属性以及这些属性的类型是什么…

TCP系列相关内容

一、TCP上传文件 loop——本地回环测试地址。 void *memset&#xff08;void *s,int c,size_t n&#xff09;——给一个变量设定一个值。 1、“粘包”问题 两次分别发送的数据&#xff0c;被一起接收形成该现象。 原因&#xff1a;TCP流式套接字&#xff0c;数据与数据间没…

北京博科测试

公司简介 博科测试是一家通过采用现代测试与试验技术来提供智能测试综合解决方案的供应商&#xff0c;主营业务为伺服液压测试设备和汽车测试试验设备的研发、设计、制造、销售、系统集成等综合服务 公司荣誉 博科测试先后获得北京市“专精特新”中小企业、北京市专精特新“小…

前端速通面经八股系列(二)—— HTML篇

HTML高频面经八股目录 1. src和href的区别2. 对HTML语义化的理解3. DOCTYPE(⽂档类型) 的作⽤4. script标签中defer和async的区别5. 常⽤的meta标签有哪些6. HTML5有哪些更新1. 语义化标签2. 媒体标签3. 表单4. 进度条、度量器5.DOM查询操作6. Web存储7. 其他 7. img的srcset属…

Apache Dubbo关键点分析

Apache Dubbo 的源码的几个关键点分析&#xff1a; 1. SPI 机制 SPI&#xff08;Service Provider Interface&#xff09; 是一种设计模式&#xff0c;用于实现服务的插件化。Dubbo 使用 SPI 机制来实现其扩展点&#xff0c;使得用户可以在不修改框架代码的情况下&#xff0c…

三种通过代码创建矢量文件的方法及例子

现有四个点&#xff1a;(1, 1), (2, 2), (3, 3), (4, 4) 以这四个点围起来就是一个面。 如何通过python创建矢量文件。 我们以创建一个面矢量文件为例子&#xff0c;进行阐释。 我们可以使用geopandas、fiona、gdal库完成矢量创建。 geopandas 假设我们创建的矢量文件格式…

打卡55天------图论(并查集)

图论这里我学的不是很好&#xff0c;作为一名JavaScript前端开发工程师&#xff0c;我能说我基本上在工作中都没用到过吗&#xff1f; 一、并查集理论基础 这个说句实话&#xff0c;我平常工作很少用到&#xff0c;上学的时候好像也没学过&#xff0c;可能我只是本科生吧&…

Chrome H265 WebRTC 支持

Chrome从127版本开始支持RTC H265解码&#xff0c;这样服务器就不需要对H265转码了&#xff0c; H5S和USC会自动检测浏览器支持的解码类型并自动判断是否启动转码&#xff0c;这样客户端不用关心摄像机具体是H264还是H265&#xff0c;尽量使用带GPU的客户端&#xff0c;这样服务…

ArcGIS应用指南:近邻分析(点匹配到最近线段上)

近邻分析通常用于确定一个要素集中的要素与另一个要素集中最近要素的距离。当涉及到点匹配到最近的线时&#xff0c;这种分析可以用来确定每个点到最近线段的距离及位置&#xff0c;也就是我们常说的点匹配到最近线上&#xff0c;可以参考官方文档&#xff1a;近邻分析 (Covera…

动态规划之买卖股票篇-代码随想录算法训练营第三十八天| 买卖股票的最佳时机ⅠⅡⅢⅣ,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

121. 买卖股票的最佳时机 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定…

软件测试-Selenium+python自动化测试

目录 一、元素定位 1.1一个简单的模板 1.2单选框radio定位实战 1.3下拉操作 1.4弹窗 1.5文件上传 1.6 iframe(类似于页中页,嵌套进去了) 二、元素定位实战 会用到谷歌浏览器Chrome测试,需要下载一个Chromedriver(Chrome for Testing availability)对应自己的浏览…