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

Selenium TimeoutException求助:无法点击页面加载更多按钮

问题分析与解决方法

1. CDP版本不匹配警告

这个警告源于你的Chrome浏览器版本(115)与ChromeDriver版本(114)不兼容,Selenium依赖的Chrome DevTools Protocol(CDP)需要版本完全匹配才能正常工作。

  • 解决:下载与你当前Chrome浏览器版本完全一致的ChromeDriver,替换现有驱动文件。

2. 加载更多按钮定位失败(TimeoutException)

Selenium在10秒内找不到可点击的目标按钮,常见原因及解决办法如下:

原因1:元素定位器错误

打开浏览器开发者工具(F12),找到页面底部的“加载更多”按钮,确认其data-test属性值是否为mms-search-srp-loadmore。如果实际属性值不同,修改代码中的CSS选择器。

原因2:按钮在页面底部,未滚动到可见区域

不可见元素无法被Selenium定位,需先滚动到按钮位置:

// 先等待元素存在
WebElement loadMoreButton = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='mms-search-srp-loadmore']")));
// 滚动到按钮可见
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", loadMoreButton);
// 再等待按钮可点击并点击
wait.until(ExpectedConditions.elementToBeClickable(loadMoreButton)).click();

原因3:页面弹窗干扰

页面加载时可能出现Cookie同意弹窗,阻碍元素定位,需先处理弹窗:

try {
    WebElement acceptCookieBtn = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[data-test='mms-cookie-accept-all']")));
    acceptCookieBtn.click();
} catch (TimeoutException ignored) {
    // 无弹窗则跳过
}

原因4:需循环点击直到加载完成

单点击一次仅加载部分数据,需循环点击直到按钮消失:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
while (true) {
    try {
        WebElement loadMoreButton = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='mms-search-srp-loadmore']")));
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", loadMoreButton);
        wait.until(ExpectedConditions.elementToBeClickable(loadMoreButton)).click();
        // 等待新内容加载,可优化为等待列表元素数量增加
        Thread.sleep(1500);
    } catch (TimeoutException e) {
        // 按钮消失,加载完成
        break;
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        break;
    }
}

优化后的完整代码示例

System.setProperty("webdriver.chrome.driver", "path/to/matched/chromedriver");

ChromeDriverService service = new ChromeDriverService.Builder()
        .withLogOutput(System.out)
        .build();

WebDriver driver = new ChromeDriver(service);
driver.get("https://www.mediamarkt.at/de/category/alle-notebooks-884.html");
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

// 处理Cookie弹窗
try {
    WebElement acceptCookieBtn = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[data-test='mms-cookie-accept-all']")));
    acceptCookieBtn.click();
} catch (TimeoutException ignored) {}

// 循环加载所有内容
while (true) {
    try {
        WebElement loadMoreButton = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='mms-search-srp-loadmore']")));
        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", loadMoreButton);
        wait.until(ExpectedConditions.elementToBeClickable(loadMoreButton)).click();
        Thread.sleep(1500);
    } catch (TimeoutException e) {
        System.out.println("所有内容加载完成");
        break;
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        break;
    }
}

// 此处编写爬取数据的逻辑
// ...

driver.quit();

内容的提问来源于stack exchange,提问作者b.tsolmonbat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:45:15