ruby - 自 Chrome 版本 85 起在 Heroku 上启动无头 chrome 时出现 Selenium webdriver 错误(ruby)
问题描述
问题因重复而被关闭:
这个问题是在 ruby 中,而不是 python 和
我在那个线程上尝试了解决方案,没有任何改变。编辑我的问题添加。
我有一个运行 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?
谢谢
解决方案
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
这使它工作。
推荐阅读
- html - 如何确保内部 div 仅使用 CSS/HTML 不会超出其容器 div flexbox?
- typescript - 通用返回 T 的打字稿
- python - 如何使用 Tesseract OCR 从视频帧中提取数字?
- postgresql-9.5 - 错误:“SELECT”第 14 行或附近的语法错误:v_result := SELECT * FROM iis_e_ack_pkg.is_e_ack_confirm
- typescript - 在 create-react-app 中添加自定义反应脚本的标准方法
- python - 使用 Python 和 REST api 从 Sharepoint 中提取
- linux - 如何找到应该发送 AT 命令的端口(/dev/smdX)?
- javascript - JS:如何过滤一个对象数组,向第一个对象添加一个带有其余过滤元素值的键?
- google-cloud-networking - 使用 VPC 对等访问 Memorystore (Redis)
- android - 为什么 dwc3 usb 控制器没有报告 xfercomplete 事件?或者小工具驱动程序错过了那个事件?