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

Selenium Python如何获取元素内不含子标签内容的直接文本

Selenium提取元素直接文本(排除子标签内容)实现方法

Selenium 元素对象的.text属性默认会递归收集当前元素下所有后代节点的文本内容拼接返回,因此会把内部span标签内的₹690一并返回,要仅获取div下不属于子标签的直接文本₹199,可使用以下两种方案:

  • 方案1:执行JavaScript脚本获取DOM直接文本节点(推荐,稳定性最高)
    DOM节点的childNodes属性仅返回当前元素的直接子节点,筛选其中节点类型为文本节点(nodeType=3)的内容即可,不受嵌套结构变化影响:

    from selenium.webdriver.common.by import By
    
    # 先定位目标div元素
    price_div = driver.find_element(
        by=By.XPATH,
        value="//div[@class='ProductVariants__PriceContainer-sc-1unev4j-9 jjiIua']"
    )
    # 传入元素执行JS提取直接文本
    direct_price = driver.execute_script("""
    let res = '';
    for (const node of arguments[0].childNodes) {
        if (node.nodeType === Node.TEXT_NODE) {
            res += node.textContent.trim();
        }
    }
    return res;
    """, price_div)
    

    如果你确认目标文本是div的第一个子节点,还可以简化JS代码:

    direct_price = driver.execute_script(
        "return arguments[0].firstChild.textContent.trim()",
        price_div
    )
    

    运行后direct_price的值就是需要的₹199。

  • 方案2:文本差集替换(适合结构固定的简单场景)
    先获取div的全量文本,再获取内部span的文本,将span文本从全量文本中移除即可,不需要执行JS:

    price_div = driver.find_element(
        by=By.XPATH,
        value="//div[@class='ProductVariants__PriceContainer-sc-1unev4j-9 jjiIua']"
    )
    full_text = price_div.text
    span_text = price_div.find_element(By.TAG_NAME, "span").text
    direct_price = full_text.replace(span_text, "").strip()
    

    注意:如果直接文本和子标签文本存在重复内容,该方法会出现替换错误,仅建议结构完全固定时使用。

内容的提问来源于stack exchange,提问作者user11004963

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:03:20