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.
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.
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.
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
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
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) ...