Heroku: Verbindung mit Chromedriver 127.0.0.1:9515 bei Verwendung von Watir / Selen nicht möglich

8

Dies wird lokal ausgeführt (ohne Angabe von driver_path ), aber nicht auf Heroku.

Code:

%Vor%

Ich habe die Werte in der heroku rails-Konsole bestätigt

%Vor%

Installierte Buildpacks:

%Vor%

Aktueller Fehler:

  

Selenium :: WebDriver :: Error :: WebDriverError: Verbindung nicht möglich   chromedriver 127.0.0.1:9515

Das Durchsuchen von unable to connect to chromedriver 127.0.0.1:9515 auf SO gibt eine Reihe von Ergebnissen zurück, aber keiner erwähnt heroku.


Auch:

Ich habe Phantomjs betrachtet. Jemand anderes hat es hier funktioniert, Verwendung eines Headless-Browsers mit Heroku Rails Unicorn Stack

Aber es ist veraltet. Unterer Fehler bei lokaler Ausführung.

  

Selenium-Unterstützung für PhantomJS ist veraltet. Benutze kopflos   Stattdessen Chrome / Firefox oder HTMLUnit.


Auch versucht:

Zur Transparenz habe ich auch Folgendes versucht:

Ändern von browser = Watir::Browser.new :chrome

An browser = Watir::Browser.new :chrome, headless: true

Obwohl ich nicht erwartet habe, dass das funktioniert.


Auch versucht:

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

Hinzufügen: https://github.com/heroku/heroku-buildpack-xvfb-google-chrome .

Hinzufügen von headless gem.

Und führen Sie das folgende Skript aus, das auf der Seite watir gem angegeben ist: Ссылка .

%Vor%

Fehler:

  

Selenium :: WebDriver :: Fehler :: Unbekannter Fehler: unbekannter Fehler: kann nicht gefunden werden   Chrome-Binärdatei

Ich nehme an, das ist fehlgeschlagen, weil ich den Speicherort der Chrom-Binärdatei / Shim nicht angegeben habe. Konnte nicht finden, wie dies angegeben wird, wenn headless in den Dokumenten verwendet wird.


Versucht pro Vorschlag:

%Vor%
  

Running / usr / bin / chromedriver auf ⬢ App-Name ... up, run.2151

     

(Hobby) bash: / usr / bin / chromedriver: Keine solche Datei oder Verzeichnis

Siehe auch Protokolle, die chrome bei der Bereitstellung in heroku erwähnen:

%Vor%


Etwas Fortschritt:

Wenn ich auf den Heroku-Server stehe,

heroku run bash --app app-name

Und suchen Sie nach Dateien mit dem Namen chrome ,

find /app/ -name "*chrome*"

%Vor%

Ich kann das binäre Chrominanzsystem bei /app/.chromedriver/bin/chromedriver sehen.

Also habe ich es versucht

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

Ergebnis:

%Vor%

Aber das Ausführen von heroku run rake selenium_namespace:task_one --app app-name gibt das gleiche Ergebnis.

  

Selenium :: WebDriver :: Error :: WebDriverError: Verbindung nicht möglich   verchromter 127.0.0.1:9515 ...   /app/vendor/ruby-2.4.1/lib/ruby/2.4.0/net/http.rb:906:in Rettung in   block in connect ': Fehler beim Öffnen der TCP-Verbindung zu 127.0.0.1:9515   (Verbindung abgelehnt - Verbindung herstellen (2) für "127.0.0.1" Port 9515)   (Errno :: ECONNREFUSED) ...

    
tim_xyz 15.11.2017, 22:40
quelle

3 Antworten

0

Dies ist auf Heroku möglich.

Verwirrend chrome und chromedriver

Ihre Konfiguration vermischt chromedriver und Chrome . GOOGLE_CHROME_SHIM zeigt auf die ausführbare Datei Chrome google-chrome-stable , nicht auf chromedriver . Die folgende Zeile führt dazu, dass Selen die falsche Binärdatei ausführt, was zu einer irreführenden Fehlermeldung führt.

%Vor%

Zum Zeitpunkt des Schreibens (17. Januar) fügt das Build-Pack chromedriver automatisch /app/.chromedriver/bin zur Variable $PATH hinzu. Wenn Sie die obige Zeile löschen , sollte Selenium% chromedriver automatisch wiederfinden können.

Und dann?

Sie haben wahrscheinlich die obige Zeile hinzugefügt, um Selenium zu reparieren, da es die Chrome-Binärdatei nicht finden konnte. Die Fehlermeldung dafür hätte etwa wie folgt ausgesehen:

  

Selenium :: WebDriver :: Fehler :: Unbekannter Fehler: unbekannter Fehler: kann nicht gefunden werden   Chrome-Binärdatei

Sie können das beheben, indem Sie Selenium mit Selenium::WebDriver::Chrome::Options mitteilen, wo sich die Chrome-Binärdatei befindet. Der folgende Code sollte das erreichen.

%Vor%

Buildpacks

Das sollte alles mit den Standard-Build-Packs chrome und chromedriver möglich sein:

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

Sie können heroku-buildpack-xvfb-google-chrome anstelle von vanilla chrome benötigen, wenn Sie Klicks im Browser automatisieren, aber das sollte nicht erforderlich sein, damit Chrome ohne Kopf ausgeführt wird.

    
laverick 17.01.2018, 15:36
quelle
0

Ich zitiere Ilya Vassilevsky aus diesem posten

  

ChromeDriver ist nur ein Treiber für Chrome. Der tatsächliche Chrome-Browser, der auf demselben Computer installiert ist, muss tatsächlich funktionieren.

     

Heroku hat standardmäßig kein Chrome auf seinen Dynos installiert. Sie müssen ein Buildpack verwenden, das Chrome installiert. Zum Beispiel:

     

Ссылка

     

Sie können sehen, wie Chrome abgerufen wird:

     

Ссылка

Dann lese ich ihre Diskussion in den Kommentaren:

Petr Gazarov sagt

  

Ich habe dieses Buildpack ausprobiert und es hat nicht funktioniert. Ich vermute, dass die Installation von Google Chrome (oder eines anderen Browsers) auf Heroku mehr involviert sein könnte.

Ilya Vassilevsky antwortet

  

Ja, Heroku ist eine sehr eigenwillige und geschlossene Plattform. Es sollte viel einfacher sein, Chrome mit ChromeDriver auf Ihrer eigenen VM auf AWS, Linode oder DigitalOcean einzurichten.

Petr Gazarov antwortet

  

Danke für deine Antwort Ilya. Ich habe mit Watir mit Phantomjs neu geschrieben, weil ich Heroku nicht dazu bringen konnte, Chrome zu installieren.

Sie können mehr Informationen in dieser Frage lesen. Wenn mir etwas in den Sinn kommt, werde ich es veröffentlichen.

    
Fabrizio Bertoglio 19.11.2017 18:01
quelle
-2

Ja, ich stimme Fabrizio zu. DigitalOcean muss verwendet werden. ChromeDriver benötigt einen Chrome-Browser, der ein weniger flexibles Programm und komplexeres Coding erstellt.

    
NL628 24.11.2017 23:34
quelle