ruby - 在带有 Selenium for Ruby on Rails 的 Heroku 上找不到 Chrome 二进制文件

标签 ruby google-chrome selenium heroku capybara

两周前,我设法在 Heroku 上建立了一个工作环境,结合了 Capybara、Selenium、Chromedriver 和 Chrome 用于网络抓取。然而,一周前我一定是做了一些更改,这导致设置因找不到 Chrome 二进制文件而崩溃。

WARN: Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary (Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-1019-aws x86_64)

我在 Heroku-14 Stack 上使用两个相关的构建包

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

用过的 gem :

gem 'selenium-webdriver','>=3.6.0'
gem 'chromedriver-helper'

我整个周末都试图通过将各种路径直接传递到 capybara.rb 初始化程序(并通过运行 heroku run bash 来比较它们)来让它工作,但无法让它工作。

capybara .rb

require "selenium/webdriver"
chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
    chrome_opts = chrome_bin ? { "chromeOptions" => { "binary" => 'app/.apt/usr/bin/google-chrome-stable' } } : {}
    puts chrome_opts.to_s

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

    Capybara.default_driver = :chrome
    Capybara.javascript_driver = :chrome

我还通过界面在 Heroku 中设置了 ENV 变量,但是当通过 heroku run rails c 检查 ENV 时,BIN 变量似乎是从 buildpack 加载的,并覆盖了我的配置。

I set GOOGLE_CHROME_BIN and GOOGLE_CHROME_SHIM to: /app/.apt/usr/bin/google-chrome

我不确定我必须做出什么样的改变才能让它再次工作。有很多拼图,我需要修复哪一个?欢迎提出建议!

已解决:

require "selenium/webdriver"

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

    Capybara.register_driver :chrome do |app|
      browser_options = ::Selenium::WebDriver::Chrome::Options.new
      browser_options.binary = chrome_bin
      Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
    end

    Capybara.default_driver = :chrome
    Capybara.javascript_driver = :chrome

最佳答案

我猜你在过去几周升级到了最新的 selenium-webdriver 和 chromedriver。 chromeOptions 不再是要传递的有效 key ,您可以尝试将其更改为 goog:chromeOptions 但您实际上应该只使用 Selenium::的实例WebDriver::Chrome::Options

Capybara.register_driver :chrome do |app|
  options = ::Selenium::WebDriver::Chrome::Options.new
  options.binary = ...
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end

关于ruby - 在带有 Selenium for Ruby on Rails 的 Heroku 上找不到 Chrome 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233654/

相关文章:

ruby - Mechanize 表单提交

ruby-on-rails - 条件&&短路失败

google-chrome - Chrome 浏览器如何确定内存缓存和磁盘缓存?

javascript - 使用 Selenium IDE 调用 JavaScript 文件中的函数

ruby-on-rails - 如何在 Rails Controller 中返回 HTTP 204

html - 导航栏的 Bootstrap 下拉菜单

javascript - 为什么当我的一个 JS 文件以相同的方式提供时,Chrome 可能会返回不正确的 MIME 类型错误?

javascript - 监控 Chrome 网络流量(XHR 数据包)

azure - 在 Azure 函数中运行 Selenium

python - 使用 selenium ide 和 python 在 xpath 进行两次循环迭代后,我的程序失败