Mic*_*itz 4 ruby selenium google-chrome 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)
Run Code Online (Sandbox Code Playgroud)
我在 Heroku-14 Stack 上使用了两个相关的 buildpack
https://github.com/heroku/heroku-buildpack-xvfb-google-chrome
https://github.com/heroku/heroku-buildpack-chromedriver
Run Code Online (Sandbox Code Playgroud)
使用的宝石:
gem 'selenium-webdriver','>=3.6.0'
gem 'chromedriver-helper'
Run Code Online (Sandbox Code Playgroud)
我花了周末的时间试图通过将各种路径直接传递到 capybara.rb 初始值设定项(并通过运行 heroku run bash 来比较这些路径)来使其工作,但无法使其工作。
水豚
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
Run Code Online (Sandbox Code Playgroud)
我还通过界面在 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
Run Code Online (Sandbox Code Playgroud)
我不确定我必须做出什么样的改变才能让它再次工作。有很多拼图,我需要解决哪一个?欢迎提出建议!
解决了:
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
Run Code Online (Sandbox Code Playgroud)
我猜你在过去几周升级到了最新的 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |