Rém*_*UHE 7 ruby-on-rails heroku watir selenium-chromedriver
我正在使用 watir gem 在我的应用程序上实现一个非常基本的刮刀。它在本地运行得很好,但是当我在 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
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?我在不同的网站上检查了许多类似的问题,但没有找到任何东西。
小智 13
过去两天我也在做同样的事情,正如你所说,我尝试了很多不同的事情。我终于做到了。
问题是heroku使用不同的路径来下载chromedriver。在 webdriver gem 的源代码中,我发现 webdriver 在寻找(linux、mac os、windows)的默认系统路径,这就是为什么在本地工作或在 WD_CHROME_PATH 环境变量中定义的路径的原因。要在 heroku 上设置路径,我们必须设置这个 env 变量
"WD_CHROME_PATH": "/app/.apt/usr/bin/google-chrome"
Run Code Online (Sandbox Code Playgroud)
必须是 google-chrome 而不是 google-chrome-stable,就像我们在示例中可以找到的那样。
也就是说,只需从终端运行它:
heroku config:set WD_CHROME_PATH=/app/.apt/usr/bin/google-chrome
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2394 次 |
| 最近记录: |