首页 > 解决方案 > 自 Chrome 版本 85 起在 Heroku 上启动无头 chrome 时出现 Selenium webdriver 错误(ruby)

问题描述

问题因重复而被关闭:

  1. 这个问题是在 ruby​​ 中,而不是 python 和

  2. 我在那个线程上尝试了解决方案,没有任何改变。编辑我的问题添加。

我有一个运行 buildpacks 的 Heroku 应用程序:

https://github.com/heroku/heroku-buildpack-google-chrome/

https://github.com/heroku/heroku-buildpack-chromedriver

我的设置与 chrome buidlpack 上描述的设置相同:

chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)

chrome_opts = chrome_bin ? { "chromeOptions" => { "binary" => chrome_bin } } : {}

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
  )
end

Capybara.javascript_driver = :chrome
session = Capybara::Session.new(:chrome)
session

我正在使用宝石

宝石“硒网络驱动程序”

在 2020 年 9 月将 Google Chrome 更新到版本 85 之前,这一直运行良好。现在它大约有五分之一的成功,另外四次我收到此错误:

    2021-02-07T12:43:42.670067+00:00 app[worker.1]: 4 TID-1uto WARN: Selenium::WebDriver::Error::UnknownError: unknown error: session deleted because of page crash
2021-02-07T12:43:42.670068+00:00 app[worker.1]: from unknown error: cannot determine loading status
2021-02-07T12:43:42.670069+00:00 app[worker.1]: from tab crashed
2021-02-07T12:43:42.670070+00:00 app[worker.1]: (Session info: headless chrome=88.0.4324.150)
2021-02-07T12:43:42.670150+00:00 app[worker.1]: 4 TID-1uto WARN: #0 0x55e07c1cf199 <unknown>
2021-02-07T12:43:42.670151+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:72:in `assert_ok'
2021-02-07T12:43:42.670152+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
2021-02-07T12:43:42.670152+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `new'
2021-02-07T12:43:42.670153+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:88:in `create_response'
2021-02-07T12:43:42.670153+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/default.rb:114:in `request'
2021-02-07T12:43:42.670153+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/http/common.rb:64:in `call'
2021-02-07T12:43:42.670154+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/bridge.rb:167:in `execute'
2021-02-07T12:43:42.670154+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:567:in `execute'
2021-02-07T12:43:42.670155+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:220:in `set_window_rect'
2021-02-07T12:43:42.670155+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/remote/w3c/bridge.rb:183:in `resize_window'
2021-02-07T12:43:42.670156+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/window.rb:123:in `resize_to'

我尝试向 chrome 添加其他参数(即使 buildpack 自动添加它们)无济于事。

我在这个解决方案中添加了两个论点:

未知错误:由于未知错误导致页面崩溃,会话被删除:无法从 ChromeDriver Selenium 崩溃的选项卡中确定加载状态

问题仍然存在。

chrome_opts = { "chromeOptions" => { "binary" => chrome_bin#,
                                          args: %w[headless disable-gpu no-sandbox disable-dev-shm-usage]
                                          } }

但仍然没有运气。

所以我的问题是:

How do I tell the buildpack to stick to chrome version 84? or

How do I avoid the error from happening on version 85 and above?

谢谢

标签: rubyseleniumherokucapybara

解决方案


Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new app, browser: :chrome,
    options: Selenium::WebDriver::Chrome::Options.new(args: %w[headless disable-gpu disable-dev-shm-usage])
end

Capybara.javascript_driver = :chrome

这使它工作。


推荐阅读