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

3

我希望能够加快Selenium页面的加载速度,因为我只需要HTML(我正在使用BeautifulSoup爬取所有链接)。使用PageLoadStrategy.NONE无法爬取所有链接,而Chrome不再支持PageLoadStrategy.EAGER。有没有人知道在Python中获取PageLoadStrategy.EAGER的解决方法?


1
你试过使用urllib吗? - undefined
是的,为什么还要费心使用Selenium呢? - undefined
urllib加载速度更快吗?我对不同的解析器了解得不多。 - undefined
2个回答

6
ChromeDriver是实现Chromium的WebDriver的wire protocol的独立服务器。目前,ChromeChromium仍在实现并转向W3C标准。目前,ChromeDriver可用于Android上的Chrome和桌面版Chrome(Mac、Linux、Windows和ChromeOS)。

根据当前的WebDriver W3C Editor's Draft,以下是页面加载策略的表格,将pageLoadStrategy capability keyword链接到一个页面加载策略状态,并显示相应的文档准备状态:

page loading strategy

然而,如果你观察当前的 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状态,您将找到所有WebDriver命令及其在基于WebDriver规范ChromeDriver中的当前支持情况。一旦从各个方面完成了实现,PageLoadStrategy.EAGER就会在Chrome Driver中功能上存在。

1
您只能在chromdriver中使用normalnone作为pageLoadStrategy。因此,要么选择none并自己处理所有内容,要么等待页面按照正常方式加载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接