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

"Eager" Page Load Strategy workaround for Chromedriver Selenium in Python

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

您只能使用 normalnone 作为 chromdriver 中的 pageLoadStrategy。因此,要么选择 none 并自己处理所有事情,要么像通常发生的那样等待页面加载

ChromeDriver 是实现 WebDriver's wire protocol for Chromium. Chrome and Chromium are still in the process of implementing and moving to the W3C standard 独立服务器 。当前 ChromeDriver 可用于 Android 上的 Chrome 和桌面设备上的 Chrome(Mac, Linux、Windows 和 ChromeOS)。

根据当前 WebDriver W3C Editor's Draft 以下是 table 链接 pageLoadStrategy capability 关键字的页面加载策略 页面加载策略状态 ,并显示对应于哪个文档就绪状态:

但是,如果您观察 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'; ..."
}

根据 WebDriver Status you will find the list of all WebDriver commands and their current support in ChromeDriver based on what is in the WebDriver Specification。一旦从各个方面完成实施PageLoadStrategy.EAGER必然会在Chrome中发挥作用Driver.