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

如何用Selenium Java提取<div>与<ul>下的“Hi, harvey ”文本?

解决建议

你的代码无效的原因是:By.linkText()仅用于定位<a>标签元素,而目标文本“Hi, harvey ”是<ul class="navbar-nav">下的独立文本节点,和<a>标签同级,所以无法通过该方法定位。

以下是几种可行的解决方案:

  • 通过父元素提取文本
    先定位到包含目标文本的<ul>元素,再获取其全部文本内容并提取目标部分:

    // 定位ul元素
    WebElement navUl = driver.findElement(By.className("navbar-nav"));
    // 获取ul的所有文本,处理后提取目标内容
    String fullText = navUl.getText().trim();
    String targetText = fullText.split("\n")[0].trim(); // 根据实际文本结构调整截取逻辑
    
  • 使用XPath定位文本节点
    直接通过XPath选择ul下的文本节点,若直接定位有问题,可结合JavaScript执行XPath表达式:

    // 方法1:直接定位文本节点(部分驱动可能支持)
    String targetText = driver.findElement(By.xpath("//ul[@class='navbar-nav']/text()")).getText().trim();
    
    // 方法2:通过JavaScript执行XPath兼容处理
    String targetText = (String) ((JavascriptExecutor) driver).executeScript(
        "return document.evaluate('normalize-space(//ul[@class=\"navbar-nav\"]/text())', document, null, XPathResult.STRING_TYPE, null).stringValue;"
    );
    
  • 通过JavaScript获取文本节点
    遍历ul的子节点,筛选出文本节点并提取内容:

    String targetText = (String) ((JavascriptExecutor) driver).executeScript(
        "var ul = document.querySelector('ul.navbar-nav'); " +
        "for (let i = 0; i < ul.childNodes.length; i++) { " +
            "const node = ul.childNodes[i]; " +
            "if (node.nodeType === 3 && node.textContent.trim()) { " +
                "return node.textContent.trim(); " +
            "} " +
        "} "
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:09:50