【问题标题】:Chrome binary not found on Heroku with Selenium for Ruby on Rails在 Heroku 上找不到用于 Ruby on Rails 的 Selenium 的 Chrome 二进制文件
【发布时间】:2018-12-16 10:27:23
【问题描述】:

两周前,我设法在 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 堆栈上的两个相关构建包

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

用过的宝石:

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

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

水豚.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

【问题讨论】:

    标签: ruby google-chrome selenium heroku capybara


    【解决方案1】:

    我猜您在过去几周内升级到了最新的 selenium-webdriver 和 chromedriver。 chromeOptions 不再是有效的传递密钥,您可以尝试将其更改为 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
    

    【讨论】:

    • 谢谢!不仅是为了解决问题,也是为了让我现在可以停止工作,和我的伴侣和小男孩一起度过我的夜晚。你无法想象我有多开心。如果其他人有这个问题,我也会在上面发布我的工作代码。
    猜你喜欢
    • 2023-04-01
    • 2016-09-19
    • 1970-01-01
    • 2012-07-15
    • 2018-04-06
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多