【发布时间】:2019-08-22 12:43:49
【问题描述】:
我正在使用 watir gem 在我的应用上实现一个非常基本的 scraper。它在本地运行得很好,但是当我在 heroku 上运行它时,它会触发这个错误:Webdrivers::BrowserNotFound: Failed to find Chrome binary.
我将 google-chrome 和 chromedriver buildpacks 添加到我的应用程序中,以告诉 Selenium 在 Heroku 上的哪里可以找到 Chrome,但它仍然无法正常工作。此外,当我打印选项时,二进制文件似乎设置正确:
#<Selenium::WebDriver::Chrome::Options:0x0000558bdf7ecc30 @args=#<Set: {"--user-data-dir=/app/tmp/chrome", "--no-sandbox", "--window-size=1200x600", "--headless", "--disable-gpu"}>, @binary="/app/.apt/usr/bin/google-chrome-stable", @prefs={}, @extensions=[], @options={}, @emulation={}, @encoded_extensions=[]>
这是我的应用 Buildpack URL:
1. heroku/ruby
2. heroku/google-chrome
3. heroku/chromedriver
这是我的代码:
def new_browser(downloads: false)
options = Selenium::WebDriver::Chrome::Options.new
chrome_dir = File.join Dir.pwd, %w(tmp chrome)
FileUtils.mkdir_p chrome_dir
user_data_dir = "--user-data-dir=#{chrome_dir}"
options.add_argument user_data_dir
if chrome_bin = ENV["GOOGLE_CHROME_SHIM"]
options.add_argument "--no-sandbox"
options.binary = chrome_bin
end
options.add_argument "--window-size=1200x600"
options.add_argument "--headless"
options.add_argument "--disable-gpu"
browser = Watir::Browser.new :chrome, options: options
if downloads
downloads_dir = File.join Dir.pwd, %w(tmp downloads)
FileUtils.mkdir_p downloads_dir
bridge = browser.driver.send :bridge
path = "/session/#{bridge.session_id}/chromium/send_command"
params = { behavior: "allow", downloadPath: downloads_dir }
bridge.http.call(:post, path, cmd: "Page.setDownloadBehavior",
params: params)
end
browser
end
知道如何解决这个问题吗?我在不同的网站上检查了许多类似的问题,但我没有找到任何东西。
【问题讨论】:
标签: ruby-on-rails heroku selenium-chromedriver watir