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

news2024/9/21 13:55:26

需求

使用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.coloradmin.cn/o/2078843.html

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

相关文章

扫描件转word如何操作?分享3个转换技巧,简单高效

在日常工作中&#xff0c;总会遇到扫描件格式的PDF文档&#xff0c;为了方便整理&#xff0c;修改和使用&#xff0c;我们经常需要将扫描件转成可编辑的Word文档&#xff0c;那有哪些方法可以将扫描件转换成Word呢&#xff1f;本期小编就给大家分享3个转换技巧&#xff0c;简单…

mysql索引的基本原理

1.索引的基本原理 是为了提高数据检索效率&#xff0c;通过排列好的数据结构&#xff08;通常是二叉树或B-Tree&#xff09;来加快查找过程。1.1 优势 是帮助mysql获取数据的一种高效数据结构&#xff0c;并且是有序的&#xff1b;提高数据的检索效率&#xff0c;降低数据库的…

用IP地址申请SSL证书可行吗?

在当今社会&#xff0c;互联网的安全非常重要&#xff0c;SSL&#xff08;Secure Sockets Layer&#xff09;证书作为保障网站安全的重要工具&#xff0c;能够加密网站与用户之间的数据传输&#xff0c;保护用户隐私&#xff0c;提升网站信任度等。然而&#xff0c;传统的SSL证…

【计算机组成原理】四、指令系统:3.汇编语言

5.汇编语言 文章目录 5.汇编语言5.1考试要求&#xff08;408&#xff09;x86汇编语言5.2地址码x86架构CPU&#xff0c;有哪些寄存器&#xff1f;总结 5.3操作码5.3.1算术运算5.3.2逻辑运算5.3.3其他 5.4循环分支5.4.1 jmp直接跳转指令5.4.2 jxxx条件跳转指令分支C→汇编循环C→…

Openstack 与 Ceph集群搭建(下): Openstack部署

文章目录 文章参考部署节点准备1. 修改Host文件与hostname名称2. 安装NTP软件3. 网卡配置信息4. 开启Docker共享挂载5. 安装python虚拟环境6. 安装kolla-ansible7. 加载Ansible galaxy requirements Openstack 安装前预配置1. 配置密码2. 配置multinode文件3. 修改全局配置文件…

2.Easy-Paas部署

目录 1.部署方式 2.docker-compose部署 1.1.准备docker环境 1.2.部署中间件 3.k8s部署 1.部署方式 docker-compose部署&#xff08;单节点&#xff09;k8s部署自研ops 2.docker-compose部署 1.1.准备docker环境 参考&#xff1a;二进制安装docker-CSDN博客 1.2.部署中…

安科瑞储能双向计量表DTSD1352-CT/CF 双向电量复费率统计

安科瑞徐赟杰 Hey科技迷们&#xff0c;你们是否对能源管理的新纪元充满好奇&#xff1f; 今天咱们来聊聊这款颠覆性的黑科技——安科瑞储能双向计量表DTSD1352&#xff01; 想象一下&#xff0c;一个能够掌控能量流动&#xff0c;无论是输入还是输出&#xff0c;都了如指掌的…

Thread类的基本用法(详解版)

什么是线程&#xff1f; 线程是操作系统能够进行调度的最小单位&#xff0c;通常被视为轻量级的进程。线程在同一进程中共享进程的资源&#xff08;如内存&#xff0c;打开的文件&#xff0c;网络等&#xff09;&#xff0c;但每一个线程都有自己的执行栈、程序计数器和局部变…

项目管理中什么是项目质量管理?

所有项目经理都易于犯下的通病便是产生无谓的乐观&#xff0c;误以为质量会自然而然地融入项目之中。然而&#xff0c;在实际操作中&#xff0c;我们必须明确界定、监控并管理项目管理质量。 项目质量管理的核心在于确保项目质量。这被称为项目的第四个约束&#xff0c;经理们必…

澄志创投马良骏:营销技术行业下一个关键词是合并与整合 | 中国广告营销行业资本报告深访①

日前&#xff0c;澄志创投发布了《中国广告营销行业资本报告2022》&#xff0c;投中信息提供独家数据支持&#xff0c;Marteker联合撰写。报告围绕广告营销行业的资本运作等话题&#xff0c;采访了行业资深人士。 马良骏Joshua&#xff08;澄志创投创始人&#xff09; 问&#…

Module not found: Can‘t resolve ‘tls‘/Module not found: Can‘t resolve ‘net‘

最近使用nextjs开发了一套系统&#xff0c;包含了前后端&#xff0c;但是前后端的界限其实没有那么清晰&#xff0c;很多地方都引入了公共的内容&#xff0c;甚至互相引入了其模块的内容 然后周五时在前端引入了一个方法&#xff08;该方法在前端的模块里面定义的&#xff0c;之…

【Linux】基本命令(第二篇)

目录 1.命令提示符 2.命令的基本格式 1) 选项的作用 2) 参数的作用 2.cd命令&#xff1a;切换目录 3.pwd命令&#xff1a;显示当前路径 4.ls命令&#xff1a;查看目录下文件 5.mkdir命令&#xff1a;创建目录&#xff08;文件夹&#xff09; 6.rmdir命令&#xff1a;删…

《黑神话:悟空》横空出世:全新国产3A里程碑之作

“直面天命”、“棒打虎先锋”、“猿神&#xff0c;启动”......在过去的一周里&#xff0c;从朋友圈到微博热搜&#xff0c;从咖啡联名到陕西文旅&#xff0c;几乎已经没有人&#xff0c;可以对《黑神话&#xff1a;悟空》这一国产3A里程碑之作视而不见。8月20日上午10时&…

eclipse汉化教程

1:选择HELP->install New software 2:点击Add 3&#xff1a;name随便填写&#xff0c;location&#xff1a;https://download.eclipse.org/technology/babel/update-site/latest/ 4&#xff1a;等待下载完成后点next 5&#xff1a;选择中文&#xff0c;再点击next 6. 等待…

【实战】Spring Boot 嵌套事务REQUIRES_NEW与NESTED在项目中的运用

文章目录 引言1. 什么是Nested Transactions?2. Spring Boot中的事务管理2.1 基本用法2.2 Nested Transactions的需求场景 3. 实现Nested Transactions3.1 使用Propagation.REQUIRED)/Propagation.NESTED)3.2 嵌套事务REQUIRES_NEW与NESTED3.3 注意事项 4. 测试Nested Transac…

upload-labs(Pass-18 ~ Pass-21)

1、Pass-18(条件竞争) 1、题目需要进行代码审计&#xff1a; <?php include ../config.php; include ../head.php; include ../menu.php;$is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);//白名单$file_name $_FILES[upload_fil…

OpenLayers3,地图探查功能实现

文章目录 一、前言二、代码实现三、总结 一、前言 图层探查&#xff0c;即对置于地图下方的图层进行一定范围的探查&#xff0c;以便用户查看到不易察觉的地理地况。本文基于OpenLayers3&#xff0c;实现地图探查的功能。 二、代码实现 <!DOCTYPE HTML PUBLIC "-//W…

滴滴拼车系统开发前景分析

滴滴拼车系统作为滴滴出行平台的一个重要组成部分&#xff0c;其开发前景分析如下&#xff1a; 市场需求&#xff1a;随着城市交通压力的增加和共享经济的普及&#xff0c;拼车服务因其便捷性和经济性受到越来越多用户的青睐&#xff0c;市场需求持续增长 。政策支持&#xf…

商业律师事务所借助 DocuSign 解决方案加快了 QES 和身份识别流程 | 电子签约律师事务解决方案

Roosbeh Karimi 是一位充满活力的年轻律师&#xff0c;他创办的商业律师事务所正引领着法律行业的数字化转型 KARIMI.legal 是一家总部位于柏林的商业律师事务所&#xff0c;专门从事商法、竞争法和法律技术集体诉讼。该商业律师事务所拥有一支由 11 名员工组成的团队&#xff…

音视频不同步问题总结

音视频同步的定义 指在视频播放过程中&#xff0c;图像和声音的播放时间保持一致&#xff0c;使得观众感觉到图像与声音是同时发生的。在实际的音视频 处理过程中&#xff0c;由于音频和视频的处理速度可能不同&#xff0c;或者由于网络传输的延迟&#xff0c;可能会导致音视…