You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DOM中获取不带标签的元素文本?已尝试方法无效

这问题我碰到过好多次啦!核心原因是Selenium的find_element方法只能定位DOM元素节点,没办法直接抓取独立的文本节点——也就是你用following-sibling::text()[1]选中的那种节点,所以直接调用.text或者.get_attribute("innerHTML")肯定没效果。

给你几个靠谱的解决方案,按需选:

方案1:定位父元素后处理文本

最简单的思路是先找到包含<b>Description</b>和目标文本的父元素(比如<td>),拿到它的完整文本后再去掉不需要的部分:

from selenium.webdriver.common.by import By

# 定位包含Description标签的td元素
parent_td = self.driver.find_element(By.XPATH, "//table//tr//td[contains(b, 'Description')]")
# 获取td的全部文本,再剔除"Description"并清理空格
target_text = parent_td.text.replace("Description", "").strip()

这个方法优点是代码简洁,只要父元素里的文本结构稳定(比如"Description"后面直接跟着目标文本)就好用。

方案2:用JavaScript直接获取文本节点

Selenium本身搞不定文本节点,但可以借助JavaScript直接操作DOM来获取,这是最精准的方法:

target_text = self.driver.execute_script("""
    // 用XPath找到目标文本节点
    const textNode = document.evaluate(
        "//table//tr//td//b[contains(.,'Description')]/following-sibling::text()[1]",
        document,
        null,
        XPathResult.FIRST_ORDERED_NODE_TYPE,
        null
    ).singleNodeValue;
    // 存在的话返回清理后的文本,否则返回空字符串
    return textNode ? textNode.textContent.trim() : '';
""")

这个方法完全不受其他元素干扰,哪怕目标文本前后有空格或者换行也能准确提取。

方案3:用XPath字符串函数直接提取

如果你的页面结构很固定,还可以用XPath的substring-after和normalize-space函数一步到位提取:

target_text = self.driver.execute_script("""
    return document.evaluate(
        "normalize-space(substring-after(//table//tr//td[contains(b, 'Description')], 'Description'))",
        document,
        null,
        XPathResult.STRING_TYPE,
        null
    ).stringValue;
""")

这个方法把文本处理逻辑交给XPath,代码更紧凑,适合结构不变的场景。

试试这几个方法,应该能解决你的问题!

内容的提问来源于stack exchange,提问作者Faraz Khan Yz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:19:09