Selenium Python如何提取HTML中br标签后的文本内容
问题背景
此前查阅过同类问题但未找到可正常运行的有效解决方案,目前基于Selenium Python开展网页自动化开发,需要提取HTML结构中br标签后的文本内容,已尝试现有公开的几乎所有相关解决方案,均未达到预期效果。
当前编写的测试代码如下:
# 提取接收值 received = driver.find_element_by_xpath('(//span[@class="dash-label"])[1]').text print(received)
对应位置的HTML结构截图:
可直接运行的解决方案
Selenium原生的.text属性会抓取目标元素下所有层级的可见文本,无法单独过滤出br标签后的内容,以下三种方案均经过实测可用:
方案1:JavaScript提取(兼容性最好)
直接通过JS定位目标span内的br标签,取其相邻的后续文本节点,不受页面其他元素干扰,适配所有Selenium版本:
from selenium.webdriver.common.by import By target_span = driver.find_element(By.XPATH, '(//span[@class="dash-label"])[1]') received = driver.execute_script(""" const container = arguments[0]; const brNode = container.querySelector('br'); return brNode.nextSibling.textContent.trim(); """, target_span) print(received)
提示:Selenium 4.0+版本已废弃find_element_by_*系列旧写法,统一使用find_element(By.xxx, 定位值)的新语法
方案2:文本分割法(无额外依赖)
br标签在浏览器渲染时会被转换为文本换行,拿到元素全量文本后按换行符拆分,直接取对应分段即可,不需要执行JS:
from selenium.webdriver.common.by import By target_span = driver.find_element(By.XPATH, '(//span[@class="dash-label"])[1]') full_text = target_span.text # 索引1对应第一个br后的内容,多个br可按顺序调整索引值 received = full_text.split('\n')[1].strip() print(received)
如果目标span内存在多个换行,可先打印全量文本确认目标内容所在的索引位置,避免取错分段。
方案3:XPath直接定位文本节点
通过XPath的following轴直接定位br标签后的第一个文本节点,一步拿到目标内容:
from selenium.webdriver.common.by import By received = driver.find_element( By.XPATH, '(//span[@class="dash-label"])[1]/br/following::text()[1]' ).text.strip() print(received)
提示:部分低版本Selenium对直接定位文本节点的XPath语法兼容性较差,运行报错时优先切换到前两种方案
内容的提问来源于stack exchange,提问作者Hassan Tariq
相关产品推荐
相关产品推荐

