Firefox网页审查器/控制台中XPath substring函数是否可正常使用?
问题说明
以下XPath可直接返回带百分号的百分比值(例如16%):
//div/div/div[@class='underlay']/strong
尝试使用substring函数提取数字部分的写法如下,执行时返回错误:
substring (//div/div/div[@class='underlay']/strong, 1, 2)
已知substring(string, start, length)是标准XPath语法且Gecko内核支持,需要确认该写法是否本应生效,以及是否有稳定提取百分比中数字部分的方案。
补充执行场景:分别在网页审查器搜索栏、浏览器控制台通过
$x()方法执行上述XPath语句。
解答
原写法报错原因
你的写法不符合XPath的参数类型要求,本身就无法正常生效:
substring函数的第一个参数要求是字符串类型,而你传入的路径//div/div/div[@class='underlay']/strong返回的是元素节点集合,不是字符串,浏览器DevTools的XPath执行环境不会自动将元素节点隐式转换为文本字符串,因此直接执行会报错。- 另外硬编码截取前2位的逻辑容错性非常差,如果百分比是1位(如
5%)、3位及以上(如120%),截取结果就会出错。
正确实现方案
方案1:纯XPath实现(适配所有支持XPath1.0的环境)
自动识别百分号位置,截取所有数字部分,不受数字位数影响:
substring-before(//div/div/div[@class='underlay']/strong/text(), '%')
写法说明:
- 追加
/text()明确指定取strong标签下的文本节点,符合函数的参数类型要求 - 用
substring-before直接取%符号前的所有内容,比手动计算截取长度更稳定
方案2:浏览器控制台快速实现
如果是在控制台通过$x()调试,直接配合JS处理更简单:
$x("//div/div/div[@class='underlay']/strong")[0].textContent.replace('%', '')
内容的提问来源于stack exchange,提问作者d-b
相关产品推荐
相关产品推荐

