【发布时间】:2018-04-29 08:04:44
【问题描述】:
这在本地运行(未指定 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"
已安装的构建包:
https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/heroku/heroku-buildpack-google-chrome
当前错误:
Selenium::WebDriver::Error::WebDriverError: 无法连接到 chromedriver 127.0.0.1:9515
在 SO 上搜索 unable to connect to chromedriver 127.0.0.1:9515 会返回一堆结果,但没有提及 heroku。
还有:
我考虑过 phantomjs。其他人在这里工作, Using a headless browser with Heroku Rails Unicorn stack
但它已被弃用。在本地运行时出现以下错误。
不推荐使用对 PhantomJS 的 Selenium 支持。使用无头 Chrome/Firefox 或 HTMLUnit。
也试过了:
为了透明度,我还尝试了以下方法。
更改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: 未知错误: 找不到 Chrome 二进制文件
我认为这失败了,因为我没有指定 chrome 二进制文件/垫片的位置。在文档中使用 headless 时找不到如何指定此内容。
根据建议尝试:
heroku run /usr/bin/chromedriver --app app-name
在 ⬢ app-name... 上运行 /usr/bin/chromedriver... up, run.2151
(爱好)bash: /usr/bin/chromedriver: 没有这样的文件或目录
在部署到 heroku 时,请参阅下面提到 chrome 的日志:
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: 无法连接到 铬驱动程序 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': 无法打开到 127.0.0.1:9515 的 TCP 连接 (连接被拒绝 - “127.0.0.1”端口 9515 的连接(2)) (Errno::ECONNREFUSED) ...
【问题讨论】:
-
运行
heroku run /usr/bin/chromedriver时heroku主机的输出是什么,这应该在你的heroku服务器上手动运行chrome驱动程序,可能没有安装一些依赖项。 stackoverflow.com/questions/19978577/… -
@FabrizioBertoglio 我已根据您的建议更新了问题。听起来是不是缺少依赖项?
-
我们已经启动并运行它,也许我们的回答对您有同样的帮助stackoverflow.com/a/50781946/135160
-
在 Ubuntu 上你会做
sudo apt-get install chromium-browser但我不知道如何用 Heroku 做 -
This 解决方案对我有用
标签: ruby-on-rails heroku selenium-chromedriver watir buildpack