Python 中 Chromedriver Selenium 的“Eager”页面加载策略解决方法

use*_*355 3 selenium web-scraping python-3.x selenium-chromedriver pageloadstrategy

我想加快 selenium 上页面的加载时间,因为我不需要 HTML 以外的任何东西(我正在尝试使用 BeautifulSoup 抓取所有链接)。使用 PageLoadStrategy.NONE 无法抓取所有链接,并且 Chrome 不再支持 PageLoadStrategy.EAGER。有谁知道在 python 中获取 PageLoadStrategy.EAGER 的解决方法?

Deb*_*anB 6

ChromeDriver是为 Chromium实现WebDriver 有线协议的独立服务器ChromeChromium仍在实施和转向W3C 标准的过程中。目前,ChromeDriver适用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。

根据当前的WebDriver W3C 编辑草案,以下是页面加载策略表,它将pageLoadStrategy 功能关键字链接到页面加载策略状态,并显示与其对应的文档就绪状态:

页面加载策略

但是,如果您观察ChromeDriver的当前实现,Chrome DevTools确实会考虑以下document.readyStates

  • document.readyState == 'complete'
  • document.readyState == 'interactive'

这是相关日志示例:

[1517231304.270][DEBUG]: DEVTOOLS COMMAND Runtime.evaluate (id=11) {
   "expression": "var isLoaded = document.readyState == 'complete' ||    document.readyState == 'interactive';if (isLoaded) {  var frame = document.createElement('iframe');  frame.name = 'chromedriver dummy frame'; ..."
}
Run Code Online (Sandbox Code Playgroud)

根据WebDriver 状态,您将根据WebDriver规范中的内容找到所有WebDriver 命令的列表及其在ChromeDriver中当前的支持。一旦各个方面的实现完成,PageLoadStrategy.EAGER必然会在功能上出现在Chrome Driver中。