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

使用Selenium Java提取<BR>标签中的文本遇到问题

解决Selenium提取
分隔文本的问题

你当前的代码问题在于**
是无内容的空标签**,它本身不承载任何文本,所以定位
元素调用getText()自然返回空值。你实际需要提取的是<div class="sign_in">中被<br>分隔的那些独立文本节点(即user_1、user_2这类内容),以下是几种可行的解决方案:

方案1:提取div全部文本后分割处理

这种方法简单直接,适合DOM结构稳定的场景:

// 定位目标div
WebElement signInDiv = driver.findElement(By.id("sign_in"));
// 获取div下的全部文本
String fullText = signInDiv.getText();
// 按换行符分割文本,过滤无效内容
String[] rawUsers = fullText.split("\\n");
List<String> userList = new ArrayList<>();

for (String rawUser : rawUsers) {
    String trimmedUser = rawUser.trim();
    // 跳过空行和标题行
    if (!trimmedUser.isEmpty() && !trimmedUser.equals("usernames lists:")) {
        userList.add(trimmedUser);
    }
}

// 输出结果
for (String user : userList) {
    System.out.println(user);
}

方案2:用XPath直接定位文本节点

通过XPath精准筛选出div下的有效文本节点,无需后续大量过滤:

// 定位div下h4之外的非空白文本节点
List<WebElement> textNodes = driver.findElements(By.xpath("//div[@class='sign_in']/text()[normalize-space() != '' and not(ancestor::h4)]"));

for (WebElement node : textNodes) {
    // 去除文本前后空白后输出
    System.out.println(node.getText().trim());
}

方案3:通过JavaScript获取文本节点

如果XPath方法存在浏览器兼容问题,可借助JavaScript直接操作DOM:

JavascriptExecutor js = (JavascriptExecutor) driver;
// 执行JS脚本提取并返回有效用户名列表
List<String> userList = (List<String>) js.executeScript(
    "const div = document.getElementById('sign_in'); " +
    "// 筛选出非空白的文本节点,排除h4的内容" +
    "const validTexts = Array.from(div.childNodes).filter(node => " +
        "node.nodeType === 3 && node.textContent.trim() !== '' && !node.previousElementSibling?.tagName === 'H4'" +
    "); " +
    "return validTexts.map(node => node.textContent.trim());"
);

// 输出结果
for (String user : userList) {
    System.out.println(user);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:51:17