Selenium(Java):滚动页面直至加载指定数量元素的实现方案
实现Selenium持续滚动加载直到指定数量元素的方案
针对你遇到的场景——初始加载21个元素,点击「查看更多」后转为滚动加载新元素,要持续加载到100个元素,以下是可靠的实现方案:
核心思路
- 先等待并点击「查看更多」按钮,触发后续的滚动加载逻辑
- 循环执行「滚动到底部 + 等待新元素加载」的操作,直到元素数量达到目标值(100个)
- 避免使用
Thread.sleep(),改用显式等待保证加载完成,提升稳定性
优化后的代码实现
// 初始化显式等待,超时时间设为10秒(可根据实际加载速度调整) WebDriverWait wait = new WebDriverWait(driver, 10); int targetElementCount = 100; int currentElementCount = 0; List<WebElement> elements; // 第一步:点击「查看更多」按钮(等待按钮可点击后再操作) wait.until(ExpectedConditions.elementToBeClickable( By.cssSelector(".btn.btn-primary.btn-alternate.search-more") )).click(); // 第二步:循环滚动加载,直到元素数量达标 do { // 获取当前元素数量作为基准 elements = driver.findElements(By.className("project-tile")); currentElementCount = elements.size(); // 滚动到页面底部,触发新元素加载 ((JavascriptExecutor) driver) .executeScript("window.scrollTo(0, document.body.scrollHeight)"); // 等待新元素加载完成(直到元素数量增加,或超时) try { wait.until(driver -> { List<WebElement> updatedElements = driver.findElements(By.className("project-tile")); return updatedElements.size() > currentElementCount; }); } catch (TimeoutException e) { // 若超时说明已无更多元素可加载,终止循环 System.out.println("已加载全部元素,无法达到目标数量"); break; } } while (currentElementCount < targetElementCount); // 最终获取元素列表及数量 elements = driver.findElements(By.className("project-tile")); int finalCount = elements.size(); System.out.println("最终加载元素数量:" + finalCount);
关键说明
- 替换
Thread.sleep():显式等待会根据实际加载状态等待,比固定休眠更灵活,避免因网络延迟导致的加载不完整 - 循环终止条件:既判断元素数量是否达标,也处理了「网站已无更多元素」的边界情况,防止无限循环
- 滚动方式可选:如果滚动到底部不生效,可改为滚动到当前最后一个元素的位置,触发加载:
((JavascriptExecutor) driver) .executeScript("arguments[0].scrollIntoView(true);", elements.get(elements.size() - 1));
你提供的原始代码问题
你的代码仅执行了一次点击和一次滚动,无法持续触发加载,因此只能获取到少量元素:
driver.findElement(By.cssSelector("[class='btn btn-primary btn-alternate search-more']")).click(); Thread.sleep(2000); ((JavascriptExecutor) driver) .executeScript("window.scrollTo(0, document.body.scrollHeight)"); List<WebElement> elements = driver.findElements(By.className("project-tile")); int elementsCount = elements.size();
内容的提问来源于stack exchange,提问作者PaulJK
相关产品推荐
相关产品推荐

