Selenium中如何提取h2标签内的动态数字?
解决XPath提取h2标签中数字的问题
嘿,我明白你的困扰了——你要提取的数字是h2标签里的直接文本节点,而不是子元素里的内容,之前的XPath没精准定位到它,所以只拿到了标签里的文字。咱们一步步来解决:
先分析你的HTML结构
你的HTML简化后是这样的:
<h2> <pwwgen-label> <span>Order number: </span> </pwwgen-label> 1814400752 </h2>
数字1814400752是h2的直接子文本节点,不是任何子元素的内容,所以需要专门定位这个节点。
可行的XPath方案
方案1:直接定位h2的最后一个文本节点
用这个XPath可以精准拿到数字:
//h2/text()[last()]
解释://h2/text()会返回h2下所有直接文本节点(包括开头的空白节点),[last()]选取最后一个,也就是那个数字所在的文本节点。如果返回的结果带空格,可以用normalize-space()处理掉:
normalize-space(//h2/text()[last()])
方案2:提取h2的全部文本后过滤数字
如果你的XPath支持2.0及以上版本,可以直接用正则替换掉非数字内容:
replace(//h2, '[^0-9]', '')
如果是在代码里处理,也可以先获取h2的完整文本(比如用//h2的text内容),再用正则提取数字(比如Python里的re.findall(r'\d+', h2_text))。
方案3:排除子元素,选取h2的直接文本
用这个XPath选取h2中不是pwwgen-label子元素的节点文本:
//h2/node()[not(self::pwwgen-label)]/text()
同样可以配合normalize-space()去除多余空格。
为什么之前只拿到了"Order number:"?
大概率是你用了类似//h2//text()的XPath,它会返回所有子节点(包括span里的)的文本,或者只取了第一个文本节点(h2开头的空白),而没定位到最后那个数字节点。
内容的提问来源于stack exchange,提问作者user3663578
相关产品推荐
相关产品推荐

