如何匹配中间包含动态子串的id属性对应的XPath表达式?
可用的XPath匹配方案如下:
1. 通用方案(XPath 2.0及以上支持,主流浏览器、Selenium等自动化工具均兼容)
组合starts-with()和ends-with()两个字符串函数,分别匹配id的固定前缀和后缀即可,表达式如下:
//*[starts-with(@id, 'panel-detail-') and ends-with(@id, '-partnerCode')]
2. XPath 1.0兼容方案(适配旧爬虫框架、低版本工具场景)
XPath 1.0没有内置ends-with()函数,可以用两种方式替代:
- 高精度写法(完全等效ends-with效果):
//*[starts-with(@id, 'panel-detail-') and contains(substring(@id, string-length(@id) - string-length('-partnerCode') + 1), '-partnerCode')]
- 简化写法(无其他冲突id时可直接使用):
//*[starts-with(@id, 'panel-detail-') and contains(@id, '-partnerCode')]
如果匹配结果存在多余元素,可以结合父节点属性、其他属性(如class、文本内容)进一步缩小匹配范围即可。
内容的提问来源于stack exchange,提问作者Jason Maddern
相关产品推荐
相关产品推荐

