selenium - 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));
当我运行单线程代码时,页面没有问题,但是,当我使用多线程时,它变成了一场噩梦。网络无法处理像单线程这样的网页,这就是我需要在那段时间等待的原因。我正在寻找一个确切的解决方案。是否有任何进度监听器或类似的东西?
我在等你的建议。
类似的问题:
解决方案
在您的代码中,您检查readyState
and 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')"));
推荐阅读
- c++ - Visual Studio 未在所有文件中找到或替换
- python - 自动运行脚本时出现Powershell错误
- python - 设置 Travis CI 的本地版本
- javascript - 如何在 .NET Core Web API 中异步上传 Word 文件并保存到文件夹中
- excel - 每当特定文本出现在列中时,Excel VBA 弹出窗口
- javascript - 当应用程序已安装时,Sheet Add-on Menu items 会显示“install add-on”菜单
- jquery - base64 格式的图像大小增加
- ios - iOS 13 推送通知的标头字段配置在哪里?
- sql - SQL - FOR XML - 如何将属性添加到标记
- c# - 如何通过快速绑定显示控件的可见性