首页 > 解决方案 > Selenium 如何管理等待页面加载?

问题描述

我正在开发网络爬虫一段时间,对我来说最常见的问题是等待页面完全加载,包括请求、框架、脚本。我的意思是完全完成。

我使用了几种方法来修复它,但是当我使用多个线程来抓取网站时,我总是会遇到这种问题。驱动程序打开自己,通过 URL,不等待并通过下一个 URL。

我的尝试是:

JavascriptExecutor js = (JavascriptExecutor) driver.getWebDriver();
String result = js.executeScript("return document.readyState").toString();
    if (!result.equals("complete")) {
         Thread.sleep(1000)
    } 
}

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath));

当我运行单线程代码时,页面没有问题,但是,当我使用多线程时,它变成了一场噩梦。网络无法处理像单线程这样的网页,这就是我需要在那段时间等待的原因。我正在寻找一个确切的解决方案。是否有任何进度监听器或类似的东西?

我在等你的建议。

类似的问题:

Selenium - 如何等到页面完全加载

标签: seleniumselenium-webdriverwebdriverselenium-chromedriver

解决方案


在您的代码中,您检查readyStateand if value is not complete,您只需sleep一秒钟并继续执行下一步。这是代码,使用 . 等待 10 秒WebDriverWait。或者您可以使用简单的 for 循环:

WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(d -> ((JavascriptExecutor) d).executeScript("return document.readyState !== 'loading'"));

或与interactive

wait.until(d -> ((JavascriptExecutor) d).executeScript("return (document.readyState === 'complete' || document.readyState === 'interactive')"));

推荐阅读