python-3.x - Python中Chromedriver Selenium的“渴望”页面加载策略解决方法
问题描述
我想加快 selenium 页面的加载时间,因为我只需要 HTML(我正在尝试使用 BeautifulSoup 抓取所有链接)。使用 PageLoadStrategy.NONE 并不能抓取所有链接,Chrome 也不再支持 PageLoadStrategy.EAGER。有谁知道在 python 中获取 PageLoadStrategy.EAGER 的解决方法?
解决方案
ChromeDriver是实现WebDriver 的Chromium有线协议的独立服务器。Chrome和Chromium仍在实施和转向W3C 标准的过程中。目前ChromeDriver可用于 Android 版 Chrome 和桌面版 Chrome(Mac、Linux、Windows 和 ChromeOS)。
根据当前的WebDriver W3C Editor's Draft以下是将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'; ..."
}
根据WebDriver 状态,您将根据WebDriver 规范中的内容找到所有WebDriver 命令的列表及其在ChromeDriver中的当前支持。一旦从各个方面完成实施PageLoadStrategy.EAGER必然会在Chrome 驱动程序中出现功能。
推荐阅读
- java - 嗨,我的 For 循环有问题,我对其进行了调试,但看不到给出结果的原因
- javascript - 将函数分配给变量而不调用
- javascript - 如何使用 JSON 从动态生成的表单中获取值
- azure-functions - Device Provisioning 自定义分配 - 在 azure 函数中设置初始 Device Twin
- python - 将值附加到三个列表的小函数
- swift - 购买成功后相关功能失效
- firebase - react-redux-firebase 没有在 firebase reducer 中填充配置文件
- python - 使用字典插入 WTForm 字段。jinja2.exceptions.UndefinedError: 'wtforms.fields.core.UnboundField object' 没有属性 'label'
- java - 数组的打印结果很难弄清楚
- git - 如何在 gitlab 服务器端预接收挂钩中获取提交消息