gpt4 book ai didi

ruby-on-rails - Heroku:使用 Watir/Selenium 时无法连接到 chromedriver 127.0.0.1:9515

转载 作者:行者123 更新时间:2023-12-03 22:46:09 30 4
gpt4 key购买 nike

这在本地运行(不指定 driver_path ),但不在 Heroku 上运行。

代码:

Selenium::WebDriver::Chrome.driver_path = ENV['GOOGLE_CHROME_SHIM']
browser = Watir::Browser.new :chrome

我已经在 heroku rails 控制台中确认了以下值
ENV['GOOGLE_CHROME_BIN'] => "/app/.apt/opt/google/chrome/chrome"
ENV['GOOGLE_CHROME_SHIM'] => "/app/.apt/usr/bin/google-chrome-stable"

已安装的 Buildpacks:
https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/heroku/heroku-buildpack-google-chrome

当前错误:

Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515



搜索 unable to connect to chromedriver 127.0.0.1:9515在 SO 上返回一堆结果,但没有提到 heroku。

还:

我考虑过phantomjs。其他人让它在这里工作,
Using a headless browser with Heroku Rails Unicorn stack

但它已被弃用。在本地运行时出现以下错误。

Selenium support for PhantomJS is deprecated. Use headless Chrome/Firefox or HTMLUnit instead.



也试过:

为了透明度,我还尝试了以下方法。

browser = Watir::Browser.new :chrome
browser = Watir::Browser.new :chrome, headless: true
虽然我没想到这会奏效。

也尝试过:

删除: https://github.com/heroku/heroku-buildpack-chromedriver
添加: https://github.com/heroku/heroku-buildpack-xvfb-google-chrome .

添加 headless gem 。

并运行 watir 中给出的以下脚本 gem 页面, http://watir.com/guides/headless/ .
require 'watir'
require 'headless'
headless = Headless.new
headless.start
b = Watir::Browser.start 'www.google.com'
puts b.title
b.close
headless.destroy

错误:

Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary



我认为这失败了,因为我没有指定 chrome 二进制文件/垫片的位置。使用 headless 时找不到如何指定此项在文档中。

根据建议尝试:
heroku run /usr/bin/chromedriver --app app-name

Running /usr/bin/chromedriver on ⬢ app-name... up, run.2151

(Hobby) bash: /usr/bin/chromedriver: No such file or directory



另请参阅下面提到 chrome 的日志部署到 heroku 时:
remote: -----> chromedriver app detected
remote: -----> Looking up latest chromedriver version...
remote: -----> Downloading chromedriver v2.33...
remote: Archive: /tmp/chromedriver.zip
remote: inflating: /tmp/build_cd35072c5b766edaa2b565cbff57e5d6/.chromedriver/bin/chromedriver
remote: -----> Creating chromedriver export scripts...
remote: -----> Google Chrome app detected
...
remote: -----> Fetching https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
remote: -----> Installing google-chrome-stable_current_amd64.deb
...
remote: -----> Creating google-chrome shims

一些进展:

如果我通过 ssh 进入 heroku 服务器,
heroku run bash --app app-name
并搜索名称为 chrome 的文件,
find /app/ -name "*chrome*"
/app/.profile.d/chromedriver.sh
/app/.profile.d/010_google-chrome.sh
/app/.apt/etc/cron.daily/google-chrome
/app/.apt/opt/google/chrome
/app/.apt/opt/google/chrome/chrome
/app/.apt/opt/google/chrome/chrome_100_percent.pak
/app/.apt/opt/google/chrome/chrome-sandbox
/app/.apt/opt/google/chrome/chrome_200_percent.pak
/app/.apt/opt/google/chrome/google-chrome
/app/.apt/opt/google/chrome/cron/google-chrome
/app/.apt/usr/bin/google-chrome-stable
/app/.apt/usr/bin/google-chrome
/app/.apt/usr/share/menu/google-chrome.menu
/app/.apt/usr/share/doc/google-chrome-stable
/app/.apt/usr/share/applications/google-chrome.desktop
/app/.apt/usr/share/gnome-control-center/default-apps/google-chrome.xml
/app/.apt/usr/share/man/man1/google-chrome.1
/app/.apt/usr/share/appdata/google-chrome.appdata.xml
/app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.7.0/lib/selenium/webdriver/chrome
/app/vendor/bundle/ruby/2.4.0/gems/selenium-webdriver-3.7.0/lib/selenium/webdriver/chrome.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/test/unit/chrome_test.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/lib/browser/platform/chrome_os.rb
/app/vendor/bundle/ruby/2.4.0/gems/browser-2.4.0/lib/browser/chrome.rb
/app/.chromedriver
/app/.chromedriver/bin/chromedriver

我可以在 /app/.chromedriver/bin/chromedriver 看到 chromedriver 二进制文件.

所以我尝试了
heroku run /app/.chromedriver/bin/chromedriver --app app-name
结果:
Running /app/.chromedriver/bin/chromedriver on ⬢ app-name... up, run.2067 (Hobby)
Starting ChromeDriver 2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4) on port 9515
Only local connections are allowed.

但是然后运行 ​​ heroku run rake selenium_namespace:task_one --app app-name给出相同的结果。

Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515 ... /app/vendor/ruby-2.4.1/lib/ruby/2.4.0/net/http.rb:906:in `rescue in block in connect': Failed to open TCP connection to 127.0.0.1:9515 (Connection refused - connect(2) for "127.0.0.1" port 9515) (Errno::ECONNREFUSED) ...

最佳答案

这在 Heroku 上是可能的。

困惑 chromechromedriver
您的配置困惑 chromedriver Chrome . GOOGLE_CHROME_SHIM指向 Chrome 可执行文件 google-chrome-stable , 不至 chromedriver .下面的行导致 Selenium 执行错误的二进制文件,从而导致误导性错误消息。

Selenium::WebDriver::Chrome.driver_path = ENV['GOOGLE_CHROME_SHIM'] # WRONG!

在撰写本文时(2018 年 1 月), chromedriver build pack 自动添加 /app/.chromedriver/bin$PATH多变的。如果您 删除 上面这行 Selenium 应该可以再次找到 chromedriver自动地。

进而?

您可能添加了上面的行来修复 Selenium 无法找到 Chrome 二进制文件的问题。错误消息看起来像这样:

Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary



您可以通过使用 Selenium::WebDriver::Chrome::Options 告诉 Selenium Chrome 二进制文件所在的位置来解决此问题。 .下面的代码应该可以做到这一点。
options = Selenium::WebDriver::Chrome::Options.new
chrome_bin_path = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
options.binary = chrome_bin_path if chrome_bin_path # only use custom path on heroku
options.add_argument('--headless') # this may be optional
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://stackoverflow.com"

构建包

这应该可以通过标准 chrome 实现。和 chromedriver构建包:
https://github.com/heroku/heroku-buildpack-google-chrome.git https://github.com/heroku/heroku-buildpack-chromedriver.git
您可能需要 heroku-buildpack-xvfb-google-chrome代替 Vanilla chrome如果您在浏览器中自动点击,但这不应该只是为了让 headless chrome 运行。

关于ruby-on-rails - Heroku:使用 Watir/Selenium 时无法连接到 chromedriver 127.0.0.1:9515,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47318564/

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