Heroku: impossível conectar ao chromedriver 127.0.0.1:9515 ao usar o Watir / Selenium

Isso é executado localmente (sem especificardriver_path), mas não no Heroku.

Código:

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

Confirmei abaixo os valores no console do heroku rails

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

Buildpacks instalados:

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

Erro atual:

Selenium :: WebDriver :: Erro :: WebDriverError: não é possível conectar-se ao chromedriver 127.0.0.1:9515

Procurandounable to connect to chromedriver 127.0.0.1:9515 on SO retorna vários resultados, mas nenhum menciona o heroku.


Além disso:

Eu considerei phantomjs. Alguém conseguiu trabalhar aqui,Usando um navegador sem cabeça com a pilha Heroku Rails Unicorn

Mas está obsoleto. Abaixo do erro ao executá-lo localmente.

O suporte do Selenium para o PhantomJS foi descontinuado. Use o Chrome / Firefox ou HTMLUnit sem cabeça.


Também tentei:

Por transparência, também tentei o seguinte.

Mudandobrowser = Watir::Browser.new :chrome

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

Embora eu não esperasse que isso funcionasse.


Também tentei:

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

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

Adicionandoheadless gema.

E executando o script abaixo fornecido nowatir 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

Erro:

Selenium :: WebDriver :: Erro :: UnknownError: erro desconhecido: não é possível encontrar o binário do Chrome

Suponho que isso falhou porque não especifiquei o local do binário / shim do chrome. Não foi possível encontrar como especificar isso ao usarheadless nos documentos.


Tentei por sugestão:
heroku run /usr/bin/chromedriver --app app-name

Executando / usr / bin / chromedriver em ⬢ app-name ... up, run.2151

(Hobby) bash: / usr / bin / chromedriver: Esse arquivo ou diretório não existe

Veja também abaixo os logs que mencionamchrome ao implantar no 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


Algum progresso:

Se eu ssh no servidor heroku,

heroku run bash --app app-name

E pesquise arquivos com o nomechrome,

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

Eu posso ver o chromedriver binário em/app/.chromedriver/bin/chromedriver.

Então eu tentei

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.

Mas então correndoheroku run rake selenium_namespace:task_one --app app-name dá o mesmo resultado.

Selenium :: WebDriver :: Erro :: WebDriverError: não é possível conectar-se ao chromedriver 127.0.0.1:9515 ... /app/vendor/ruby-2.4.1/lib/ruby/2.4.0/net/http.rb:906 : no `resgate no bloco na conexão ': falha ao abrir a conexão TCP com 127.0.0.1:9515 (Conexão recusada - connect (2) para a porta 9515" 127.0.0.1 "(Errno :: ECONNREFUSED) ...

questionAnswers(4)

yourAnswerToTheQuestion