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

如何使用Python Selenium仅提取div.class-two下的指定纯文本内容?

在Selenium中仅获取父元素的文本(排除子元素内容)

这个问题我之前也碰到过,Selenium默认的text属性确实会把元素下所有子元素的文本都拼在一起,要单独拿到div.class-two里的"sample text"而排除子元素的"search",有几种靠谱的方法:

  • 使用JavaScript提取纯文本节点
    这是最直接的方式,通过执行JS脚本直接定位到目标文本节点,避开子元素的干扰。示例代码:

    elements = driver.find_elements_by_css_selector('div.class-two')
    for elem in elements:
        # 执行JS获取第一个文本节点的内容,trim去除多余空白
        sample_text = driver.execute_script("return arguments[0].firstChild.textContent.trim();", elem)
        print(sample_text)
    

    原理是firstChild指向div.class-two内的第一个文本节点,也就是"sample text"所在的节点,完全不会包含子元素div.class-three的内容。

  • 通过XPath筛选文本节点
    利用XPath的node()获取元素下所有子节点,然后筛选出文本节点(节点类型为3),再提取有效内容:

    elements = driver.find_elements_by_css_selector('div.class-two')
    for elem in elements:
        # 获取元素下的所有子节点
        child_nodes = elem.find_elements_by_xpath('./node()')
        for node in child_nodes:
            # 筛选非空白的文本节点
            if node.get_attribute('nodeType') == '3' and node.text.strip():
                sample_text = node.text.strip()
                print(sample_text)
                break  # 找到目标文本后直接退出循环
    

    这种方法适合元素内有多个文本节点的场景,能精准定位到你需要的那一段。

  • 总文本减去子元素文本
    如果子元素的文本比较固定,也可以先获取父元素的全部文本,再减去子元素的文本内容:

    elements = driver.find_elements_by_css_selector('div.class-two')
    for elem in elements:
        total_text = elem.text.strip()
        # 获取子元素的文本内容
        child_text = elem.find_element_by_css_selector('div.class-three').text.strip()
        # 去除子元素文本后得到目标内容
        sample_text = total_text.replace(child_text, '').strip()
        print(sample_text)
    

    这种方法操作简单,但如果父元素下有多个子元素需要排除,就得依次处理,灵活性不如前两种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:13:11