如何通过表头名称而非行位置编写XPath定位HTML表格单元格
通过表头名称定位表格单元格的XPath实现
你当前使用的定位语句//table/tbody/tr[2]/td[1]硬编码了行序号,一旦表格行顺序调整、新增或删除行就会定位失败,可以通过匹配表头文本的方式锁定目标行,完全不依赖行的固定位置。
适配当前表格结构的可用XPath语句
//table/tbody/tr[th[normalize-space()='Name2']]/td[1]
语句逻辑拆解
tr[th[normalize-space()='Name2']]:筛选行节点,要求该行直接子节点包含<th>标签,且标签文本在去除前后空白、压缩内部冗余换行/空格/缩进后,内容完全等于Name2normalize-space()是必要处理:从给出的HTML源码可见,表头标签内的文本存在缩进、换行带来的多余空白,直接用th[text()='Name2']的写法会因为这些格式问题出现匹配失败的情况/td[1]:取匹配到的目标行下的第一个<td>单元格,也就是存储值B的目标元素
宽松场景适配写法
如果实际场景中表头文本存在前后缀,不需要完全匹配Name2,可以使用包含匹配的写法:
//table/tbody/tr[contains(normalize-space(th), 'Name2')]/td[1]
以上写法不受Name2所在行的位置影响,无论行顺序怎么调整、前后增删多少其他行,都能准确定位到对应单元格。
内容的提问来源于stack exchange,提问作者Jose Soto
相关产品推荐
相关产品推荐

