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

如何在Python Selenium中获取WebElement的直接文本(类似BeautifulSoup.string)

解决Selenium中获取元素直接文本(类似BeautifulSoup .string)的问题

我完全懂你的需求——就是想要拿到每个元素自身带的直接文本节点内容,而不是Selenium默认.text属性返回的「元素+所有子元素」的文本拼接。这个需求确实没法直接用Selenium原生API实现,但我们可以结合JS执行能力来搞定,而且能适配任意多层嵌套的DOM结构。

核心实现思路

Selenium本身没提供直接获取元素直接文本的方法,但我们可以借助JavaScript遍历元素的childNodes,筛选出文本节点(nodeType === 3),把这些节点的内容拼接起来,再处理掉多余的空白字符就行。

封装通用函数

先写一个可复用的函数,传入WebElement就能返回它的直接文本:

from selenium import webdriver
from selenium.webdriver.common.by import By

def get_direct_text(element):
    # 执行JS脚本,提取元素的直接文本节点内容
    direct_text = element.parent.execute_script("""
        const targetElem = arguments[0];
        let rawText = '';
        // 遍历所有子节点,只保留文本节点的内容
        for (const node of targetElem.childNodes) {
            if (node.nodeType === 3) { // nodeType=3 对应文本节点
                rawText += node.textContent;
            }
        }
        // 清理空白:去除首尾空格,中间多空格替换为单个空格(可根据需求调整)
        return rawText.trim().replace(/\s+/g, ' ');
    """, element)
    return direct_text

遍历父元素下所有后代元素并获取直接文本

接下来定位父div,拿到它所有层级的后代元素,逐个调用上面的函数获取直接文本:

# 初始化Chrome浏览器(其他浏览器同理)
driver = webdriver.Chrome()

# 注入示例HTML用于测试(实际场景替换为加载目标页面)
driver.execute_script("""
    document.body.innerHTML = `
        <div id="parent-container">
            <h2>Welcome</h2>
            <div>
                <p>some text <strong>important</strong></p>
                <a>link</a>
            </div>
        </div>
    `;
""")

# 定位父容器
parent_container = driver.find_element(By.ID, "parent-container")

# 获取父容器下所有后代元素(包含所有层级的子元素)
all_descendants = parent_container.find_elements(By.XPATH, ".//*")

# 遍历打印每个元素的标签名和直接文本
for elem in all_descendants:
    tag = elem.tag_name
    text = get_direct_text(elem)
    print(f"<{tag}> 的直接文本: '{text}'")

# 关闭浏览器
driver.quit()

运行结果

执行代码后会得到如下输出:

<h2> 的直接文本: 'Welcome'
<div> 的直接文本: ''
<p> 的直接文本: 'some text'
<strong> 的直接文本: 'important'
<a> 的直接文本: 'link'

注:中间的div因为没有直接文本节点,所以返回空字符串,这是符合预期的。

适配任意嵌套结构的说明

这个方法是针对每个元素单独处理它的直接子文本节点,不管DOM嵌套多深,只要是父元素下的后代元素,都能精准拿到它自身的直接文本,完全满足你的通用需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:45:16