gpt4 book ai didi

ruby-on-rails - 如何使用 Rails 应用程序在 Heroku 上正确运行 Selenium Webdriver

转载 作者:行者123 更新时间:2023-12-04 07:35:59 25 4
gpt4 key购买 nike

我正在实现一个非常基本的 刮刀在我的应用程序上使用 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
这是我的代码:
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
知道如何解决这个问题吗?我在不同的网站上检查了许多类似的问题,但没有找到任何东西。

最佳答案

过去两天我也在做同样的事情,正如你所说,我尝试了很多不同的事情。我终于做到了。
问题是heroku使用不同的路径来下载chromedriver。在 webdriver gem 的源代码中,我发现 webdriver 在寻找(linux、mac os、windows)的默认系统路径,这就是为什么在本地工作或在 WD_CHROME_PATH 环境变量中定义的路径的原因。要在 heroku 上设置路径,我们必须设置这个 env 变量

"WD_CHROME_PATH": "/app/.apt/usr/bin/google-chrome"
必须是 google-chrome 而不是 google-chrome-stable,就像我们在示例中可以找到的那样。
也就是说,只需从终端运行它:
heroku config:set WD_CHROME_PATH=/app/.apt/usr/bin/google-chrome

关于ruby-on-rails - 如何使用 Rails 应用程序在 Heroku 上正确运行 Selenium Webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com