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

复杂场景使用xpath定位元素

在复杂场景下使用XPath定位元素时,可以通过以下高级技巧提高定位准确性和稳定性:

  1. 动态属性处理
  • 模糊匹配:
//div[contains(@id, 'dynamic-part')]
//button[starts-with(@name, 'btn-')]
//input[ends-with(@class, '-input')] (需XPath 2.0+)
  • 多属性组合:
//input[@class='form-control' and @data-testid='username']
  1. 层级关系定位
//form[@id='loginForm']//input[1]  // 表单下的第一个输入框
//div[contains(@class,'modal')]/descendant::button[text()='确认']
  1. 文本定位技巧
//a[normalize-space()='登录']  // 自动处理首尾空格
//span[contains(text(), '部分文字')]
//div[text() = '精确文本' and @role='alert']
  1. 轴定位(Axis)
//input[@id='target']/preceding-sibling::label  // 前序兄弟节点
//td[.='金额']/following::input[1]  // 后续节点中的第一个输入框
//div[contains(@class,'error')]/ancestor::form  // 祖先节点
  1. 索引与位置控制
(//ul[@class='items']/li)[last()]  // 最后一个元素
(//div[@class='card'])[position()<3]  // 前两个元素
  1. 排除干扰元素
//input[not(@disabled)]  // 排除禁用元素
//div[contains(@class,'item') and not(contains(@style,'hidden'))]
//button[.='提交' and not(ancestor::div[@class='modal'])]  // 不在弹窗中
  1. 复合结构处理
//iframe[contains(@src,'widget')]/following-sibling::div//button
//div[@id='main']/div[2]/section//span[@class='icon']
  1. 动态等待策略(需结合自动化工具)
# Selenium示例
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class,'loading')]"))
)

避坑指南:

  1. 优先使用稳定属性(data-testid等专为测试设计的属性)
  2. 避免过度依赖绝对路径,使用相对路径提高容错性
  3. 处理Shadow DOM时需使用穿透语法(不同工具实现不同)
  4. 对频繁变化的class使用contains部分匹配
  5. 使用开发者工具的Console测试XPath:$x("your_xpath")

弹窗处理特别技巧:

//div[contains(@class,'modal-open')]//button[text()='确认']
//body/div[not(contains(@class,'modal'))]//input  // 排除弹窗内容

性能优化:

  1. 减少//使用,尽量指定标签名
  2. 优先使用原生属性而不是计算样式
  3. 复杂定位拆分为多步操作
  4. 避免过度使用通配符*

记住:没有绝对稳定的定位方式,关键是要理解页面结构和元素特征,通常需要组合使用多种定位策略才能达到最佳效果。对于现代Web应用,建议配合CSS Selector和其他定位方式形成互补方案。

相关文章:

复杂场景使用xpath定位元素

在复杂场景下使用XPath定位元素时&#xff0c;可以通过以下高级技巧提高定位准确性和稳定性&#xff1a; 动态属性处理 模糊匹配&#xff1a; //div[contains(id, dynamic-part)] //button[starts-with(name, btn-)] //input[ends-with(class, -input)] (需XPath 2.0)多属性…...

算法基础——存储

引入 基础理论的进步&#xff0c;是推动技术实现重大突破&#xff0c;促使相关领域的技术达成跨越式发展的核心。 在发展日新月异的大数据领域&#xff0c;基础理论的核心无疑是算法。不管是技术设计&#xff0c;还是工程实践&#xff0c;都必须仰仗相关算法的支持&#xff0…...

动态规划 (环形)

在一个圆形操场的四周摆放着n堆石子&#xff0c;现要将石子有次序地合并成一堆。规定每次只能选相邻2堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的得分。试设计一个算法&#xff0c;计算出将n堆石子合并成一堆的最小得分和最大得分。 输入格式: n表示n…...

信号模块--simulink操作

位置simulink/sourses 常用的模块 功能&#xff1a;常数模块&#xff0c;提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置&#xff08;例三维数据设置&#xff09; 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度&#xff0c;0到…...

Streamlit入门

1、Streamlit是什么 Streamlit 是一个用于快速构建数据应用的开源 Python 库&#xff0c;由 Streamlit 公司开发并维护。它极大地简化了从数据脚本到交互式 Web 应用的转化过程&#xff0c;让开发者无需具备前端开发的专业知识&#xff0c;就能轻松创建出美观、实用的交互式应…...

列表(列表是什么)

你将学习列表是什么以及如何使用列表元素。列表让你能够在一个地方存储成组的信息&#xff0c;其中可以只包含几个元素&#xff0c;也可以包含数百万个元素。 列表是新手可直接使用的最强大的Python功能之一&#xff0c;它融合了众多重要的编程概念。 列表是什么 列表 由一系列…...

笔记本搭配显示器

笔记本&#xff1a;2022款拯救者Y9000P&#xff0c;显卡RTX3060&#xff0c;分辨率2560*1600&#xff0c;刷新率&#xff1a;165Hz&#xff0c;无DP1.4口 显示器&#xff1a;2024款R27Q&#xff0c;27存&#xff0c;分辨率2560*1600&#xff0c;刷新率&#xff1a;165Hz &…...

基于排队理论的物联网发布/订阅通信系统建模与优化

论文标题 英文标题&#xff1a;Queuing Theory-Based Modeling and Optimization of a Publish/Subscribe IoT Communication System 中文标题&#xff1a;基于排队理论的物联网发布/订阅通信系统建模与优化 作者信息 Franc Pouhela Anthony Kiggundu Hans D. Schotten …...

指针(C语言)从0到1掌握指针,为后续学习c++打下基础

目录 一&#xff0c;指针 二&#xff0c;内存地址和指针 1&#xff0c;什么是内存地址 2&#xff0c;指针在不同系统下所占内存 三&#xff0c;指针的声明和初始化以及类型 1,指针的声明 2,指针 的初始化 1&#xff0c; 初始化方式优点及适用场景 4,指针的声明初始化类型…...

实验八 JSP访问数据库

实验八 JSP访问数据库 目的&#xff1a; 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求&#xff1a; 1、通过JDBC访问mysql数据&#xff0c;实现增删改查功能的实现 2、要求提交实验报告&#xff0c;将代码和实验结果页面截图放入报告中 实验过程&a…...

Day31-【AI思考】-关键支点识别与战略聚焦框架

文章目录 关键支点识别与战略聚焦框架**第一步&#xff1a;支点目标四维定位法****第二步&#xff1a;支点验证里程碑设计****第三步&#xff1a;目标网络重构方案****第四步&#xff1a;动态监控仪表盘** 执行工具箱核心心法 关键支点识别与战略聚焦框架 让思想碎片重焕生机的…...

DeepSeek与其他大模型相比

DeepSeek与其他大模型相比 与GPT-4对比 性能方面 推理速度:DeepSeek在解决复杂的数学、物理和逻辑推理问题方面速度惊人,是ChatGPT的两倍。“幻觉”现象:在处理需要网络信息检索的任务时,DeepSeek的“幻觉”现象似乎比ChatGPT更少。创意任务:ChatGPT在创意性任务,如创作…...

在深度Linux (Deepin) 20中安装Nvidia驱动

文章创作不易&#xff0c;麻烦大家点赞关注收藏一键三连。 在Deepin上面跑Tensorflow, pytorch等人工智能框架不是一件容易的事情。特别是如果你要使用GPU&#xff0c;就得有nvidia的驱动。默认情况下Deepin系统自带的是nouveau开源驱动。这是没办法用tensorflow的。下面内容是…...

“LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”

在LoRA&#xff08;Low-Rank Adaptation&#xff09;中&#xff0c;参数A和B的初始化策略是经过精心设计的&#xff0c;以确保模型训练的稳定性和有效性。具体来说&#xff0c;参数A通常被初始化为正态分布&#xff0c;而参数B则初始化为0。这样的设计有以下几个优点&#xff1…...

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 2. 思路 直接暴力…...

理解动手学深度学习的自编包d2l

跟着李沐的《动手学深度学习-PyTorch版》入门Python编程和Pytorch框架&#xff0c;以前是重度Matlab用户&#xff0c;对于Python里的各种包很不习惯。特别是&#xff0c;本书还自己做了一个名为d2l包&#xff0c;有几个问题很是困惑。今天终于弄明白了&#xff0c;写在这里&…...

RK3568使用opencv(使用摄像头捕获图像数据显示)

文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类&#xff0c;常用于从摄像头、视频文件、或者…...

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境

以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤&#xff0c;通常可以使用流复制&#xff08;Streaming Replication&#xff09;或基于Patroni等工具来实现高可用&#xff0c;以下以流复制为例&#xff1a; 安装PostgreSQL 配置软件源&#xff1a;可以使用O…...

数学平均数应用

给定一个长度为 n 的数组 a。在一次操作中&#xff0c;你可以从索引 2 到 n−1中选择一个索引i&#xff0c;然后执行以下两个操作之一&#xff1a; 将 a[i−1] 减少 1&#xff0c;同时将 a[i1] 增加 1。 将 a[i1] 减少 1&#xff0c;同时将 a[i−1] 增加 1。 在每次操作后&…...

元旦和春节取名的历史变迁

在中国漫长的历史长河中的春节&#xff0c;真要追溯起来也只有一百多年历史——是从晚清时期才逐渐出现在国人的生活里的&#xff0c;而且那时不叫“春节”而叫“元旦”。只不过随着历史的发展过程&#xff0c;“过年”这个名词也一直在演变&#xff0c;直至1949年最终才定下来…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...