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

如何将筛选书籍的XPath定位器转为Selenide的find()/findAll()链式定位

转换后的Selenide链式定位实现

直接链式写法

先纠正你之前的选择器错误(页面中书籍行是[role='row']而非class为row),以下是符合需求的实现:

ElementsCollection filteredBooks = $$("div.rt-tbody div:has(img)")
    // 过滤出出版社为O'Reilly Media的书籍容器
    .filter(bookContainer -> 
        bookContainer.$("div[role='row'] div:nth-child(4)").has(text("O'Reilly Media"))
    )
    // 再过滤出标题含JavaScript的项,最后提取标题链接
    .filter(bookContainer -> 
        bookContainer.$("div:nth-child(2) a").has(text("JavaScript"))
    )
    .$$("div:nth-child(2) a");

合并过滤逻辑的简洁写法

将两个筛选条件合并到一个filter中,减少遍历次数:

ElementsCollection filteredBooks = $$("div.rt-tbody div:has(img)")
    .filter(bookContainer -> {
        boolean isOReilly = bookContainer.$("div[role='row'] div:nth-child(4)").has(text("O'Reilly Media"));
        boolean hasJsTitle = bookContainer.$("div:nth-child(2) a").has(text("JavaScript"));
        return isOReilly && hasJsTitle;
    })
    .$$("div:nth-child(2) a");

更佳实现思路

  1. 用伪类简化容器定位:使用:has(img)直接筛选包含图片的书籍容器,替代XPath中的ancestor遍历,代码更易读
  2. 自定义filter逻辑:相比filterBy(),filter()支持更复杂的多条件判断,逻辑表达更清晰
  3. 封装为PageObject(推荐):把元素定位和筛选逻辑封装到页面对象中,提升代码可维护性:
public class BookListPage {
    // 定位所有带图片的书籍容器
    private ElementsCollection allBookContainers() {
        return $$("div.rt-tbody div:has(img)");
    }

    // 检查容器内的出版社是否为O'Reilly Media
    private boolean isOReillyPublisher(SelenideElement container) {
        return container.$("div[role='row'] div:nth-child(4)").has(text("O'Reilly Media"));
    }

    // 检查容器内的标题是否包含JavaScript
    private boolean hasJavaScriptTitle(SelenideElement container) {
        return container.$("div:nth-child(2) a").has(text("JavaScript"));
    }

    // 对外提供筛选后的书籍标题链接
    public ElementsCollection getFilteredBooks() {
        return allBookContainers()
                .filter(container -> isOReillyPublisher(container) && hasJavaScriptTitle(container))
                .$$("div:nth-child(2) a");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:25:21