在通过Selenium和Python进行首页查询时,ChromeDriver的速度比GeckoDriver慢

时间:2018-12-03 23:20:21

标签: python selenium selenium-chromedriver geckodriver google-chrome-headless

我拥有最新版本的驱动程序(chromedriver = 2.44.609551),硒包(3.141.0)和(无头chrome = 70.0.3538.110)。 (在Windows上)

我正在使用浏览器打开多个窗口。 使用firefox,我的脚本总是很快。但是在chrome上,切换到窗口(已加载页面)后,当我尝试从浏览器获取任何内容(例如driver.page_source或任何find_element)时,出现了4s延迟。

我做错什么了吗?

[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'),第一个总是很慢。

1 个答案:

答案 0 :(得分:2)

正如您在问题中提到的, GeckoDriver / Firefox 的组合要比 ChromeDriver / Chrome 快值得一提的是,不同的浏览器以不同的方式呈现HTML DOM

您可以在Chrome & Firefox on Windows vs Linux (selenium)

中找到详细的讨论

此外,通过 Chrome Headless 会议,围绕不可预测的 CPU 内存消耗进行了大量讨论。

根据讨论Building headless for minimum cpu+mem usage,可以通过以下方式优化CPU +内存使用率:

  • 使用自定义代理或C ++ ProtocolHandlers,您可以返回存根1x1像素的图像,甚至完全阻止它们。
  • Chromium小组正在努力在制作框架时添加programmatic control。目前无头Chrome仍在尝试以 60 fps 进行渲染,这非常浪费。许多页面的确需要几帧(也许 10-20 fps )才能正确呈现(由于使用了requestAnimationFrameanimation triggers),但是我们期望有很多CPU可以节省的钱。
  • MemoryInfra应该可以帮助您确定哪个组件是设置中最大的内存使用者。
  • 用法可以是:

    $ headless_shell --remote-debugging-port=9222 --trace-startup=*,disabled-by-default-memory-infra http://www.chromium.org
    
  • 铬总是会使用尽可能多的资源。如果要有效限制其利用率,则应考虑使用cgroups

您可以在Limit chrome headless CPU and memory usage

中找到详细的讨论