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.
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.
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.
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: Ссылка .
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.
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:
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*"
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) ...
Dies ist auf Heroku möglich.
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.
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.
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.
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.
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.
Tags und Links ruby-on-rails heroku selenium-chromedriver watir buildpack