如何用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
相关产品推荐
相关产品推荐

