【问题标题】:"Eager" Page Load Strategy workaround for Chromedriver Selenium in PythonPython中Chromedriver Selenium的“渴望”页面加载策略解决方法
【发布时间】:2018-12-07 19:52:31
【问题描述】:

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

【问题讨论】:

  • 你用 urllib 试过了吗?
  • 是的,为什么还要麻烦硒呢?
  • urllib 加载速度更快吗?我不太了解不同的解析器

标签: python-3.x selenium web-scraping selenium-chromedriver pageloadstrategy


【解决方案1】:

ChromeDriver 是为 Chromium 实现 WebDriver's wire protocol独立服务器ChromeChromium 仍在实施和迁移到W3C standard 的过程中。目前 ChromeDriver 适用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。

按照目前的WebDriver W3C Editor's Draft,下面是链接pageLoadStrategy capability关键字页面加载策略状态的页面加载策略表 em>,并显示与其对应的文档就绪状态:

但是,如果您观察 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,您将根据WebDriver Specification 中的内容在ChromeDriver 中找到所有WebDriver 命令 的列表及其当前支持。一旦从各个方面完成实施,PageLoadStrategy.EAGER 必然会在 Chrome 驱动程序中功能性地呈现。

【讨论】:

    【解决方案2】:

    您只使用normalnone 作为pageLoadStrategy 中的chromdriver。所以要么选择none 并自己处理所有事情,要么等待页面加载正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 2013-05-06
      • 1970-01-01
      • 2017-10-21
      • 2018-04-29
      • 2013-12-20
      相关资源
      最近更新 更多