讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用 Selenium(Java)精准定位并遍历动态生成的搜索结果列表

星雪小哥_4173

星雪小哥_4173

发布时间:2026-08-14 20:53:23

|

250人浏览过

|

来源于php中文网

原创

如何使用 Selenium(Java)精准定位并遍历动态生成的搜索结果列表

本文讲解如何在 Selenium Java 中通过 CSS 选择器高效获取动态渲染的搜索结果项(如 列表项),避免因 ID 动态变化、XPath 过于脆弱或元素未加载导致的 findElements 返回空列表或 size=1 的常见问题。

本文讲解如何在 selenium java 中通过 css 选择器高效获取动态渲染的搜索结果项(如 `

  • ` 列表项),避免因 id 动态变化、xpath 过于脆弱或元素未加载导致的 `findelements` 返回空列表或 size=1 的常见问题。

    在基于 GWT 或复杂前端框架(如示例中的 zeroda 应用)构建的 Web 应用中,搜索结果通常以动态生成的 <li> 元素形式嵌套在固定结构的 <ul></ul> 容器内。此时,依赖包含动态 ID(如 wd-TemplatedList-6$62784)的 XPath 极易失效——ID 中的 $62784 部分每次会随会话或数据变更而不同,导致定位失败或仅匹配到单个父容器。

    更可靠的方式是利用稳定、语义明确的 CSS 类名组合。从提供的 HTML 片段可见,所有目标记录均位于具有 class="WKRQ" 的 <ul></ul> 下,且每个记录对应一个 <li> 元素(带 class="WP3F WIAB ...")。因此,推荐使用以下简洁且健壮的 CSS 选择器:

    List<WebElement> resultItems = driver.findElements(By.cssSelector("ul.WKRQ > li"));
    System.out.println("Found " + resultItems.size() + " result items.");

    ✅ 优势说明:

    Alibabacloud Sdk Client Initialization For Java
    Alibabacloud Sdk Client Initialization For Java

    在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

    下载
    • ul.WKRQ 精准锁定结果容器(data-automation-id="templatedList"),该类名在页面中唯一且稳定;
    • > li 确保只获取直接子 <li>(即每条记录),避免误抓嵌套的深层 <li>(如菜单项);
    • 相比反复尝试含动态 ID 的 XPath,CSS 查询性能更高、可读性更强,且只需一次 DOM 遍历。

    ⚠️ 关键注意事项:

    立即学习“Java免费学习笔记(深入)”;

    1. 显式等待(必须!):结果列表通常是异步加载的。务必在调用 findElements 前等待 <ul class="WKRQ"></ul> 出现:
      WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
      wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("ul.WKRQ")));
    2. 避免 className 混用多个类:By.className("WNKQ WOLQ") 是错误写法——className 只接受单个类名,多类需改用 CSS 选择器:By.cssSelector(".WNKQ.WOLQ")。
    3. 验证元素可见性:若需交互(如点击),建议进一步过滤可见项:
      List<WebElement> visibleItems = resultItems.stream()
          .filter(WebElement::isDisplayed)
          .collect(Collectors.toList());

    ? 进阶遍历示例:
    获取每条记录的标题和描述,可结合 findElement 在每个 <li> 内部相对查找:

    for (int i = 0; i < resultItems.size(); i++) {
        WebElement item = resultItems.get(i);
        String title = item.findElement(By.cssSelector("div[data-automation-id='menuItem'] .gwt-Label")).getText().trim();
        String desc = item.findElements(By.cssSelector("span.gwt-InlineLabel, div.wd-Text"))
                          .stream()
                          .map(WebElement::getText)
                          .filter(text -> !text.trim().isEmpty())
                          .findFirst()
                          .orElse("No description");
        System.out.printf("Item %d: [%s] — %s%n", i + 1, title, desc);
    }

    总结:面对动态 ID 和复杂嵌套结构,放弃“硬编码 ID”的 XPath 思维,转而拥抱基于稳定类名与语义化 DOM 层级的 CSS 选择器,配合显式等待与流式处理,即可稳健、高效地完成搜索结果列表的定位与遍历任务。

  • 热门AI工具

    更多
    Laper
    Laper Hot

    Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

    立刻MV
    立刻MV Hot

    立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    LibLibAI
    LibLibAI Hot

    一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    墨刀AI
    墨刀AI Hot

    一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    相关专题

    更多
    java
    java

    Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    9257

    2023.06.15

    java正则表达式语法
    java正则表达式语法

    java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

    6422

    2023.07.05

    java自学难吗
    java自学难吗

    Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

    5732

    2023.07.31

    java配置jdk环境变量
    java配置jdk环境变量

    Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    1024

    2023.08.01

    java保留两位小数
    java保留两位小数

    Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    848

    2023.08.02

    java基本数据类型
    java基本数据类型

    java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

    1216

    2023.08.02

    java有什么用
    java有什么用

    java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

    2429

    2023.08.02

    java在线网站
    java在线网站

    Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

    19791

    2023.08.03

    Buffalo框架数据库开发全教程
    Buffalo框架数据库开发全教程

    本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

    180

    2026.09.23

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    dev.java 官方:Learn Java
    dev.java 官方:Learn Java

    共0课时 | 0人学习

    Java JDBC数据库连接官方教程
    Java JDBC数据库连接官方教程

    共0课时 | 0人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn