如何编写XPATH在同一TR表格行中同时匹配静态值与动态值?
正确XPath写法说明
原有写法的问题
- 两个筛选条件没有放在同一节点的谓词(
[])中,跨节点拼接and返回的是布尔值,无法用来定位元素 contains()函数不支持正则匹配,你写的contains(text(),'[^0-9]')实际是在匹配字面量[^0-9]字符串,无法识别数字内容- 单独给
contains(text(),'order id')加[1]是筛选全局第一个匹配的节点,无法限定在同一个<tr>行内
适配不同环境的正确写法
支持XPath 2.0的环境(如新爬虫框架、部分自动化测试工具)
直接用matches()函数做正则匹配,筛选同时包含order id和数字的<tr>行:
//tr[contains(., 'order id') and matches(., '\d+')]
仅支持XPath 1.0的环境(如Selenium默认环境、旧工具)
用translate()函数间接判断是否存在数字:原理是把文本中所有数字移除后,和原文本对比,如果不相等则说明原文本包含数字:
//tr[contains(., 'order id') and translate(., '0123456789', '') != .]
补充说明
如果需要定位<tr>下的具体子元素,调整路径后缀即可,比如要定位行内的第一个<td>:
//tr[contains(., 'order id') and translate(., '0123456789', '') != .]/td[1]
内容的提问来源于stack exchange,提问作者LTL
相关产品推荐
相关产品推荐

