Selenium如何获取HTML中未嵌套在标签内的文本节点内容
错误原因
Selenium 的 find_element_by_xpath 方法仅支持返回 DOM 元素对象,不能直接返回文本节点,因此你在 XPath 结尾加 /text() 来直接提取文本的写法不符合接口要求,才会抛出对应的类型错误。之前用 .text 仅拿到 £ 符号,大概率是你错误定位到了内部的货币符号 span 元素,而非外层的价格父元素。
可行解决方案
方案1:执行JavaScript直接提取文本节点(精度最高)
这种方法直接定位到目标文本节点,不会受前后文本内容变动的影响:
# 先定位到外层的价格p标签元素 price_ele = self.browser.find_element_by_css_selector('p.price') # 执行JS提取p标签下第二个子节点(就是你要的价格文本节点)的内容 price_text = self.browser.execute_script('return arguments[0].childNodes[1].textContent.trim()', price_ele)
执行完成后 price_text 就是你要的 1,500.00。
方案2:全量获取文本后做字符串处理(写法更简单)
如果页面结构固定,也可以先拿到整个p标签的全部文本,再截取需要的部分:
# 拿到p标签完整文本,内容为 "£1,500.00 inc. vat" full_price_text = self.browser.find_element_by_css_selector('p.price').text # 去掉货币符号和后面的增值税说明,提取纯价格 price_text = full_price_text.lstrip('£').split(' inc. vat')[0].strip()
内容的提问来源于stack exchange,提问作者noobcode0000
相关产品推荐
相关产品推荐

