[PYTHON] [Selenium] Ich möchte den Browser anzeigen, indem ich den Treiber auf dem Host-Betriebssystem von WSL aus drücke

Einführung

WSL ist sehr praktisch, da Sie unter Windows Linux-Befehle verwenden können. Wenn es jedoch um Selen geht, gibt es den Nachteil, dass es schwierig ist, das Verhalten des Browsers zu überprüfen, da die Ubuntu-GUI nicht verwendet werden kann.

Wenn Sie die virtuelle Anzeige starten und einen Screenshot machen, können Sie die Bildschirmanzeige zu diesem Zeitpunkt überprüfen [^ 1], aber es scheint, als gäbe es nichts Schöneres, als zu sehen, wie sie sich tatsächlich bewegt.

Aufgrund verschiedener Versuche und Fehler gelang es mir, den Browser anzuzeigen, indem ich den Treiber auf dem Host-Betriebssystem von WSL2 mithilfe von Selenium Grid traf, sodass ich ihn freigeben werde.

Umgebung

Host-Betriebssystem: Windows 10 Home 20H2 WSL: Ubuntu 18.04.5 on WSL2 Python: 3.7.5

Frühere Forschungen

[Betreiben eines Webbrowsers auf der Windows-Seite mit Selenium von Python unter WSL (Ubuntu16.04.4 LTS) - Laboradian](https://laboradian.com/operate-browser-on-win-by-python- of-wsl-via-selen /) ⇒ Da es sich um einen Artikel vor mehr als zwei Jahren handelte, konnte ich ihn in meiner Umgebung nicht reproduzieren. Ich erhalte die Fehlermeldung "Kann keine Verbindung zum Dienst herstellen". Es kann möglich sein, wenn die Umgebung vorbereitet ist.

Ich wollte das Chrome-Fenster auf der Windows-Seite von Selenium Webdriver oder Puppeteer aus betreiben, das auf WSL2 gestartet wurde, aber ich kann nicht ... Corredor ⇒ Obwohl es nicht gelöst wurde, kann es für diejenigen hilfreich sein, die sich in anderen Sprachen als Python entwickeln, da es zahlreiche Verweise auf frühere Forschungen gibt.

Methode 1: Selen3 (Zuverlässigkeit: mittel)

① Windows: Installieren Sie Java (11 oder höher).

Siehe unten für die Vorgehensweise. Wenn es sich um Java 10 oder weniger handelt, kann ein Fehler auftreten. OpenJDK11-Installationsmethoden-Memo - Qiita

② Windows: Laden Sie Selenium Server (Grid) herunter.

Gehen Sie zur Seite hier und laden Sie 3.141.59 herunter. Der Speicherort der heruntergeladenen Datei ist nicht angegeben.

③ Windows: Laden Sie den Browsertreiber herunter.

Chrome-Treiber von hier, Geckodriver (Firefox) von hier. Bitte laden Sie den Treiber derselben Version ** herunter wie den unter Windows installierten Browser **. Extrahieren Sie die heruntergeladene Zip-Datei und andere Dateien und platzieren Sie die ausführbaren Dateien (chromedriver.exe und geckodriver.exe) im selben Ordner ** wie die in ** ② heruntergeladene JAR-Datei.

④ Windows: Starten Sie Selenium Server.

In Selenium Grid 3 müssen wir zwei Prozesse einrichten, Hub und Node, damit wir zwei Eingabeaufforderungen starten. Starten Sie Hub zunächst, indem Sie den folgenden Befehl an einer der Eingabeaufforderungen ausführen.

java -jar [Speicherort der JAR-Datei]\selenium-server-standalone-3.141.59.jar -role hub

Wenn die folgende Ausgabe ausgegeben wird und der Prozess nicht beendet wird, gibt es kein Problem.

13:11:40.423 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
13:11:40.483 INFO [GridLauncherV3.lambda$buildLaunchers$5] - Launching Selenium Grid hub on port 4444
2020-11-23 13:11:40.848:INFO::main: Logging initialized @636ms to org.seleniumhq.jetty9.util.log.StdErrLog
13:11:41.814 INFO [Hub.start] - Selenium Grid hub is up and running
13:11:41.816 INFO [Hub.start] - Nodes should register to http://192.168.21.1:4444/grid/register/
13:11:41.816 INFO [Hub.start] - Clients should connect to http://192.168.21.1:4444/wd/hub

Führen Sie dann den folgenden Befehl an der anderen Eingabeaufforderung aus, um den Knoten zu starten. Ersetzen Sie für "[Hub-URL]" die URL, die in der obigen Ausgabe auf "Clients sollten eine Verbindung herstellen" folgt.

java -jar [Speicherort der JAR-Datei]\selenium-server-standalone-3.141.59.jar -role node -hub [Hub-URL]:4444

Wenn die folgende Ausgabe ausgegeben wird und der Prozess nicht beendet wird, gibt es kein Problem.

13:11:59.609 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
13:11:59.688 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Launching a Selenium Grid node on port 31688
2020-11-23 13:12:00.999:INFO::main: Logging initialized @1598ms to org.seleniumhq.jetty9.util.log.StdErrLog
13:12:01.177 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
13:12:01.231 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 31688
13:12:01.231 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Selenium Grid node is up and ready to register to the hub
13:12:01.654 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
13:12:01.883 INFO [SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://192.168.21.1:4444/grid/register
13:12:02.317 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use

⑤ WSL: Installieren Sie Selenium 3.141.0.

pip install selenium==3.141.0

⑥ WSL: Erstellen Sie einen Beispielcode.

sample.py


from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Remote(
    command_executor="http://192.168.21.1:4444/wd/hub",
    options=chrome_options
    )
driver.get("https://www.google.com/search?q=qiita")

Geben Sie für command_executor die folgende URL an Clients sollten eine Verbindung zu herstellen. Wenn "ChromeOptions ()" in "FirefoxOptions ()" geändert wird, wird Geckodriver verwendet.

⑦ WSL: Führen Sie den Beispielcode aus.

python sample.py

Wenn dies erfolgreich ist, sieht es folgendermaßen aus: selenium_demo.gif

Methode 2: Selen4 (Zuverlässigkeit: hoch)

Um die Wahrheit zu sagen, die obige Methode mit Selen 3 funktionierte von Anfang an nicht gut, und ich fand eine Lücke, um erfolgreich zu sein, indem ich mit der Selenquelle spielte, aber ich dachte, es wäre eine gute Idee, sie einzuführen, also lagerte ich sie einmal ein. Ich war da. Danach entdeckte ich, wie man es in Selenium 4 implementiert, und als ich diesen Artikel schrieb, überprüfte ich ihn erneut mit Selenium 3 und es funktionierte. Die Meinung, dass "dann sollte ich zuerst die mit höherer Sicherheit einführen", ist ebenfalls plausibel, aber da Selenium 4 immer noch eine Vorabversion ist, denke ich, dass es besser ist, wenn die stabile Version von Selenium 3 gut funktioniert. Das hängt von der Priorität ab. Entschuldigung für eine lange Zeit.

① Windows: Installieren Sie Java (11 oder höher).

Ausgelassen, weil es dasselbe ist wie Selenium3. Wenn es sich nicht um Java 11 oder höher handelt, tritt definitiv ein Fehler auf.

② Windows: Selenium Server (Grid) herunterladen 4.

Gehen Sie zur Seite hier und laden Sie sie über den Link "Neueste Selenium 4 Alpha-Version" herunter.

③ Windows: Laden Sie den Browsertreiber herunter.

Gleich wie Selenium3. Der Unterschied besteht darin, dass sich die ausführbare Datei nicht am selben Speicherort wie die JAR-Datei befinden muss.

④ Windows: Fügen Sie den Treiberpfad zur Systemumgebungsvariablen PATH hinzu.

Dieses Verfahren ist nur für Selen 4 erforderlich. Öffnen Sie den Einstellungsbildschirm, indem Sie [Start] → [Einstellungen] auswählen und "Umgebungsvariablen" in das Suchfeld eingeben. Zwei Kandidaten, "Umgebungsvariablen bearbeiten" und "Systemumgebungsvariablen bearbeiten", werden angezeigt. Wählen Sie "Variable bearbeiten". スクリーンショット 2020-11-23 165701.png

Dann öffnet sich der folgende Bildschirm, also drücken Sie "Umgebungsvariablen". スクリーンショット 2020-11-23 165510.png Wenn der Bildschirm "Umgebungsvariablen" geöffnet wird, wählen Sie die Zeile "Pfad" in der Tabelle "Systemumgebungsvariablen" aus und klicken Sie auf "Bearbeiten". スクリーンショット 2020-11-23 165853.png Wenn der Bildschirm "Name der Umgebungsvariablen bearbeiten" geöffnet wird, klicken Sie auf "Neu" und geben Sie den Pfad des Ordners ein, in dem der Browsertreiber gespeichert ist. Drücken Sie nach Abschluss der Eingabe die Eingabetaste zur Bestätigung und drücken Sie "OK". スクリーンショット 2020-11-23 170220.png Klicken Sie im Bildschirm "Umgebungsvariablen" und "Systemeigenschaften" auf "OK", schließen Sie den Bildschirm "Einstellungen" und Sie sind fertig.

⑤ Windows: Starten Sie Selenium Server.

Selenium Grid 4 verfügt über einen Modus namens "Standalone", mit dem Sie alle Komponenten über eine Eingabeaufforderung starten können.

Starten Sie eine Eingabeaufforderung und führen Sie den folgenden Befehl aus. Bitte beachten Sie, dass der Dateiname je nach heruntergeladener Version variiert.

java -jar [Speicherort der JAR-Datei]\selenium-server-4.0.0-alpha-7.jar standalone

Wenn die letzte Zeile der Befehlsausgabe wie folgt lautet und der Prozess nicht beendet wird, gibt es kein Problem.

17:08:44.674 INFO [Standalone.execute] - Started Selenium standalone 4.0.0-alpha-7 (revision Unknown): http://172.26.240.1:4444

⑥ WSL: Installieren Sie Selenium4.

pip install selenium==4.0.0a7

Wenn Sie Selenium installiert haben, können Sie mit dem folgenden Befehl ein Upgrade durchführen.

pip install -U --pre selenium

Wenn die Python-Version 3.8 oder höher ist, scheint die Installation von Selenium == 4.0.0a7 fehlzuschlagen. In diesem Fall werden Sie entweder die Python-Version senken oder Selenium == 4.0.0a6 installieren. ** Bitte beachten Sie, dass Sie beim Verringern der Version von Selenium auch die Version von Selenium Server ** senken müssen.

⑦ WSL: Erstellen Sie einen Beispielcode.

Gleich wie Selenium3. Die in command_executor festgelegte URL kann zwischen Selenium 3 und 4 unterschiedlich sein. Ändern Sie sie daher bei Bedarf.

⑧ WSL: Führen Sie den Beispielcode aus.

python sample.py

Wenn dies erfolgreich ist, sieht es folgendermaßen aus:

selenium4_demo.gif

Nachwort

Ich bin mit Java überhaupt nicht vertraut. Als ich die JAR-Datei ausführte und einen Fehler bekam, war ich so verwirrt, dass ich fast geweint hätte, aber als Ergebnis war ich erleichtert, dass es funktionierte. Ich denke, die Punkte waren ** Java-Version ** und ** Systemumgebungsvariable PATH **. Wir freuen uns darauf, Ihnen zu helfen.

Danke, dass du bis zum Ende zugesehen hast.

Verweise

Remote WebDriver client :: Documentation for Selenium Grid :: Documentation for Selenium

[^ 1]: Die folgende Seite war für diese Methode hilfreich. Python: Machen Sie einen Screenshot der gesamten Webseite mit Selenium + Headless Chrome-CUBE SUGAR CONTAINER

Recommended Posts

[Selenium] Ich möchte den Browser anzeigen, indem ich den Treiber auf dem Host-Betriebssystem von WSL aus drücke
Ich möchte den Fortschrittsbalken anzeigen
Ich möchte den Fortschritt in Python anzeigen!
[Schreiben] Ich möchte die im Programm verwendeten Variablen auf der Serverseite in Echtzeit im Browser anzeigen und aktualisieren.
Ich möchte das symbolische Linkziel von / lib64 unter CentOS von / usr / lib64 in / my-lib64 ändern
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich möchte die zulässige Ausfallzeit aus der Betriebsrate berechnen
Ich habe versucht, die Sprachen, die Anfänger von nun an lernen sollten, absichtlich zusammenzufassen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Ich möchte nur ein Signal vom Sub-Thread zum Haupt-Thread senden
Ich möchte ein Bild auf Jupyter Notebook mit OpenCV (Mac) anzeigen.
[Google Colab] Ich möchte mehrere Bilder nebeneinander in einer Kachel anzeigen
Ich möchte Spyder an die Taskleiste anheften
Ich möchte kühl auf die Konsole ausgeben
Ich möchte mit dem Reim Teil1 umgehen
Ich möchte mit dem Reim part3 umgehen
Ich möchte ein Glas aus Python verwenden
Ich möchte Linux auf dem Mac verwenden
Ich möchte verhindern, dass der an den Raspberry Pi (jessie) angeschlossene Lautsprecher beim Neustart des Betriebssystems bon wird (Python-Skript).
Ich möchte mit dem Reim part2 umgehen
Ich möchte Android-Apps auf Android entwickeln
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Ich habe versucht, den G-Test und die E-Qualifikation durch Training ab 50 zu bestehen
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Ich möchte mehrere Bilder mit matplotlib anzeigen.
Wenn Sie den Chrome-Treiber aktualisieren möchten.
Ich möchte mit dem Reim part7 (BOW) umgehen
Ich möchte Passungen aus meinem Kopf machen
Ich möchte Ceres Solver aus Python verwenden
Ich möchte pyenv + pipenv auch unter Windows machen
Ich möchte die Produkte verkaufen, die ich durch Python Scraping Mercari aufgelistet habe
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Ich möchte die Eingabe / Ausgabe von Dateien unter Linux protokollieren
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte die Aktivierungsfunktion Mish verwenden
So legen Sie einen freigegebenen Ordner mit dem Host-Betriebssystem in CentOS7 auf Virtual BOX fest
Ich möchte die Standortinformationen von GTFS Realtime auf Jupyter zeichnen! (Mit Ballon)
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen