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

如何获取单个div下各元素的全部文本?我的Selenium代码存在问题

问题分析与解决方案

首先,咱们拆解你遇到的问题,以及你尝试的定位方式里的错误:

你的原代码问题

你用driver.findElements(By.cssSelector("#ui6"))只会定位到一个元素——就是那个id为ui6的div容器。理论上调用它的getText()应该返回这个div下所有可见文本的拼接(包括p和ul里的内容),但你只拿到了"text",大概率是ul里的元素还没完全加载出来就执行了获取文本的操作,或者页面里ul元素初始是不可见的。

你尝试的定位方式里的错误

  1. CSS选择器 #ui6 > p ul:这个选择器的逻辑是找#ui6下p元素内部的ul,但你的HTML里p和ul是同级兄弟元素,所以这个选择器根本找不到任何元素。
  2. XPath //*[@id=ui6] & 其他未加引号的XPath:语法错误!XPath里的属性值必须加引号,应该写成//*[@id='ui6'],否则会把ui6当成变量而非字符串,直接导致定位失败。
  3. XPath //*[@id=ui6]/ul(修正引号后):这个会定位到ul元素,调用它的getText()会返回text2 text3(li文本的拼接),而不是单独的text2和text3。

正确解决方案

如果你想分别获取text、text2、text3这三个独立的文本内容,直接定位到每个文本所在的元素即可:

方案1:CSS选择器定位

// 定位#ui6下的p元素和所有li元素
List<WebElement> allTextElements = driver.findElements(By.cssSelector("#ui6 p, #ui6 li"));
for(WebElement e : allTextElements) {
    // trim()去除可能的空格换行
    System.out.println(e.getText().trim());
}

这个选择器#ui6 p, #ui6 li会精准选中你需要的三个文本所在的元素,遍历后就能分别输出三个内容。

方案2:XPath定位

List<WebElement> allTextElements = driver.findElements(By.xpath("//*[@id='ui6']//p | //*[@id='ui6']//li"));
for(WebElement e : allTextElements) {
    System.out.println(e.getText().trim());
}

这里用//表示匹配后代元素,确保能找到p和所有li元素。

额外注意:处理动态加载

如果ul是页面动态生成的(比如通过JS加载),一定要加显式等待确保元素完全可见后再操作:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
// 等待所有目标元素可见
List<WebElement> allTextElements = wait.until(
    ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#ui6 p, #ui6 li"))
);

for(WebElement e : allTextElements) {
    System.out.println(e.getText().trim());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:50