在通过 Selenium 和 Python 进行第一页查询时,ChromeDriver 比 GeckoDriver 慢太多
ChromeDriver is too slower than GeckoDriver on the first page query through Selenium and Python
我有最新版本的驱动程序 (chromedriver=2.44.609551)、selenium 包 (3.141.0) 和 (headless chrome=70.0.3538.110)。 (在 windows)
我正在用浏览器打开多个 windows。
使用 firefox,我的脚本总是很快。但是在 chrome 上,切换到 window 后(页面已经加载),当我尝试从浏览器获取任何内容时(比如 driver.page_source 或任何 find_element),我有 4 秒左右的延迟。
我是不是做错了什么?
[driver.execute_script('window.open(arguments[0]);', url) for url in urls]
for window in driver.window_handles[1:]:
driver.switch_to.window(window)
driver.page_source #it takes 4s here
driver.find_elements_by_class_name('class_name') #regular speed here (fast)
break
如果我将 driver.page_source
切换为 driver.find_elements_by_class_name('class_name')
,第一个总是很慢。
正如您在问题中提到的 GeckoDriver / Firefox 组合比 ChromeDriver / Chrome 在这一点上值得一提的是,不同的浏览器以不同的方式呈现 HTML DOM。
您可以在
中找到详细的讨论
此外,关于不可预测的 CPU 和 内存消耗 的讨论很多40=]Chrome 无头 会话。
根据讨论 Building headless for minimum cpu+mem usage,CPU + 内存使用可以通过以下方式优化:
- 使用自定义代理或 C++ ProtocolHandlers,您可以 return 存根 1x1 像素图像,甚至完全阻止它们。
- Chromium 团队正在努力在生成帧时添加 programmatic control。目前 headless chrome 仍在尝试以 60 fps 渲染,这是相当浪费的。许多页面确实需要几帧(可能 10-20 fps)才能正确呈现(由于使用了
requestAnimationFrame
和 animation triggers
),但我们希望有在这里可以节省很多 CPU。
- MemoryInfra 应该可以帮助您确定哪个组件是您设置中内存消耗最大的组件。
用法可以是:
$ headless_shell --remote-debugging-port=9222 --trace-startup=*,disabled-by-default-memory-infra http://www.chromium.org
Chromium 总是会使用尽可能多的可用资源。如果你想有效地限制它的使用,你应该考虑使用 cgroups
您可以在
中找到详细的讨论
我有最新版本的驱动程序 (chromedriver=2.44.609551)、selenium 包 (3.141.0) 和 (headless chrome=70.0.3538.110)。 (在 windows)
我正在用浏览器打开多个 windows。 使用 firefox,我的脚本总是很快。但是在 chrome 上,切换到 window 后(页面已经加载),当我尝试从浏览器获取任何内容时(比如 driver.page_source 或任何 find_element),我有 4 秒左右的延迟。
我是不是做错了什么?
[driver.execute_script('window.open(arguments[0]);', url) for url in urls]
for window in driver.window_handles[1:]:
driver.switch_to.window(window)
driver.page_source #it takes 4s here
driver.find_elements_by_class_name('class_name') #regular speed here (fast)
break
如果我将 driver.page_source
切换为 driver.find_elements_by_class_name('class_name')
,第一个总是很慢。
正如您在问题中提到的 GeckoDriver / Firefox 组合比 ChromeDriver / Chrome 在这一点上值得一提的是,不同的浏览器以不同的方式呈现 HTML DOM。
您可以在
此外,关于不可预测的 CPU 和 内存消耗 的讨论很多40=]Chrome 无头 会话。
根据讨论 Building headless for minimum cpu+mem usage,CPU + 内存使用可以通过以下方式优化:
- 使用自定义代理或 C++ ProtocolHandlers,您可以 return 存根 1x1 像素图像,甚至完全阻止它们。
- Chromium 团队正在努力在生成帧时添加 programmatic control。目前 headless chrome 仍在尝试以 60 fps 渲染,这是相当浪费的。许多页面确实需要几帧(可能 10-20 fps)才能正确呈现(由于使用了
requestAnimationFrame
和animation triggers
),但我们希望有在这里可以节省很多 CPU。 - MemoryInfra 应该可以帮助您确定哪个组件是您设置中内存消耗最大的组件。
用法可以是:
$ headless_shell --remote-debugging-port=9222 --trace-startup=*,disabled-by-default-memory-infra http://www.chromium.org
Chromium 总是会使用尽可能多的可用资源。如果你想有效地限制它的使用,你应该考虑使用 cgroups
您可以在