Heroku: no se puede conectar al controlador cromático 127.0.0.1:9515 cuando se usa Watir / Selenium

Esto se ejecuta localmente (sin especificardriver_path), pero no en Heroku.

Código:

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

He confirmado los siguientes valores en la consola de heroku rails

ENV['GOOGLE_CHROME_BIN'] => "/app/.apt/opt/google/chrome/chrome"
ENV['GOOGLE_CHROME_SHIM'] => "/app/.apt/usr/bin/google-chrome-stable"

Paquetes de construcción instalados:

https://github.com/heroku/heroku-buildpack-chromedriver
https://github.com/heroku/heroku-buildpack-google-chrome

Error actual:

Selenium :: WebDriver :: Error :: WebDriverError: no se puede conectar a chromedriver 127.0.0.1:9515

buscandounable to connect to chromedriver 127.0.0.1:9515 en SO devuelve un montón de resultados, pero ninguno menciona heroku.


También:

Lo consideré fantasma. Alguien más lo consiguió trabajando aquí,Usar un navegador sin cabeza con la pila Heroku Rails Unicorn

Pero está en desuso. Debajo de error al ejecutarlo localmente.

El soporte de Selenium para PhantomJS está en desuso. Utilice Chrome / Firefox o HTMLUnit sin cabeza en su lugar.


También intentado:

Por transparencia, también probé lo siguiente.

Cambiandobrowser = Watir::Browser.new :chrome

Abrowser = Watir::Browser.new :chrome, headless: true

Aunque no esperaba que esto funcionara.


También también probé:

Removiendo:https://github.com/heroku/heroku-buildpack-chromedriver

Agregando:https://github.com/heroku/heroku-buildpack-xvfb-google-chrome.

Agregandoheadless joya.

Y ejecutando el siguiente script dado en elwatir página de gema,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

Error:

Selenium :: WebDriver :: Error :: UnknownError: error desconocido: no se puede encontrar el binario de Chrome

Supongo que esto falló porque no especifiqué la ubicación del binario / cuña de Chrome. No se pudo encontrar cómo especificar esto cuando se usaheadless en los documentos


Probado por sugerencia:
heroku run /usr/bin/chromedriver --app app-name

Ejecutar / usr / bin / chromedriver en ⬢ nombre-aplicación ... arriba, ejecutar.2151

(Hobby) bash: / usr / bin / chromedriver: No existe tal archivo o directorio

Vea también los registros a continuación que mencionanchrome cuando se despliega en 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


Algunos progresos:

Si me meto en el servidor heroku,

heroku run bash --app app-name

Y busca archivos con el nombrechrome,

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

Puedo ver el binario chromedriver en/app/.chromedriver/bin/chromedriver.

Así que lo intenté

heroku run /app/.chromedriver/bin/chromedriver --app app-name

Resultado:

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.

Pero luego corriendoheroku run rake selenium_namespace:task_one --app app-name da el mismo resultado.

Selenium :: WebDriver :: Error :: WebDriverError: no se puede conectar a 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 ': Error al abrir la conexión TCP a 127.0.0.1:9515 (Conexión rechazada - connect (2) para el puerto" 127.0.0.1 "9515) (Errno :: ECONNREFUSED) ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta