[PYTHON] [Selenium] Je souhaite afficher le navigateur en appuyant sur le pilote du système d'exploitation hôte à partir de WSL

introduction

WSL est très pratique en ce sens que vous pouvez utiliser des commandes Linux tout en utilisant Windows, mais en ce qui concerne Selenium, il y a un inconvénient: il est difficile de vérifier le comportement du navigateur car vous ne pouvez pas utiliser l'interface graphique d'Ubuntu.

Si vous lancez l'affichage virtuel et prenez une capture d'écran, vous pouvez vérifier l'affichage de l'écran à ce moment-là [^ 1], mais il semble qu'il n'y a rien de tel que de le voir bouger réellement.

À la suite de divers essais et erreurs, j'ai réussi à afficher le navigateur en appuyant sur le pilote du système d'exploitation hôte de WSL2 en utilisant Selenium Grid, je vais donc le partager.

environnement

OS hôte: Windows 10 Famille 20H2 WSL: Ubuntu 18.04.5 on WSL2 Python: 3.7.5

Recherche précédente

[Exploitation d'un navigateur Web côté Windows en utilisant Selenium de Python sur WSL (Ubuntu16.04.4 LTS) - Laboradian](https://laboradian.com/operate-browser-on-win-by-python- de-wsl-via-sélénium /) ⇒ Comme c'était un article il y a plus de deux ans, je n'ai pas pu le reproduire dans mon environnement. J'obtiens le message d'erreur «Impossible de se connecter au service». Cela peut être possible si l'environnement est préparé.

Je voulais faire fonctionner la fenêtre Chrome du côté Windows à partir de Selenium Webdriver ou Puppeteer démarré sur WSL2, mais je ne peux pas - Corredor ⇒ Bien que cela n'ait pas été résolu, cela peut être utile pour ceux qui développent dans des langages autres que Python car il existe de nombreuses références à des recherches antérieures.

Méthode 1: Selenium3 (fiabilité: moyenne)

① Windows: installez Java (11 ou supérieur).

Voir ci-dessous pour la procédure. S'il s'agit de Java 10 ou moins, une erreur peut se produire. Mémo de méthode d'installation OpenJDK11 --Qiita

② Windows: téléchargez Selenium Server (Grid).

Allez sur la page here et téléchargez «3.141.59». L'emplacement du fichier téléchargé n'est pas spécifié.

③ Windows: téléchargez le pilote du navigateur.

Pilote Chrome depuis ici, geckodriver (Firefox) depuis ici. Veuillez télécharger le pilote de la même version ** que le navigateur installé sur Windows **. Extrayez le zip téléchargé et les autres fichiers, et placez les fichiers exécutables (chromedriver.exe et geckodriver.exe) dans le même dossier ** que le fichier jar téléchargé dans ** ②.

④ Windows: démarrez Selenium Server.

Dans Selenium Grid 3, nous devons configurer deux processus, Hub et Node, nous allons donc lancer deux invites de commande. Tout d'abord, démarrez Hub en exécutant la commande suivante à l'une des invites de commande.

java -jar [Emplacement de stockage du fichier jar]\selenium-server-standalone-3.141.59.jar -role hub

Si la sortie suivante est sortie et que le processus ne se termine pas, il n'y a pas de problème.

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

Ensuite, exécutez la commande suivante à l'autre invite de commandes pour démarrer le nœud. Pour «[URL Hub]», remplacez l'URL qui suit «Les clients doivent se connecter» dans la sortie ci-dessus.

java -jar [Emplacement de stockage du fichier jar]\selenium-server-standalone-3.141.59.jar -role node -hub [URL du hub]:4444

Si la sortie suivante est sortie et que le processus ne se termine pas, il n'y a pas de problème.

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: installez Selenium 3.141.0.

pip install selenium==3.141.0

 WSL: créez un exemple de code.

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

Pour command_executor, spécifiez l'URL qui suit Les clients doivent se connecter à. Si vous remplacez ChromeOptions () par FirefoxOptions (), vous utiliserez geckodriver.

 WSL: exécutez l'exemple de code.

python sample.py

En cas de succès, cela ressemblera à ceci: selenium_demo.gif

Méthode 2: Selenium4 (fiabilité: élevée)

Pour dire la vérité, la méthode ci-dessus avec Selenium 3 n'a pas bien fonctionné depuis le début, et j'ai trouvé une échappatoire pour réussir en jouant avec la source de Selenium, mais j'ai pensé que ce serait une bonne idée de l'introduire, alors je l'ai mise en stock une fois. J'étais là. Après cela, j'ai découvert comment l'implémenter dans Selenium 4, et quand j'ai écrit cet article, je l'ai vérifié à nouveau avec Selenium 3 et cela a fonctionné. L'opinion selon laquelle "alors je devrais introduire celle avec la plus grande certitude en premier" est également plausible, mais comme Selenium 4 est toujours une pré-version, je pense qu'il vaut mieux que la version stable de Selenium 3 fonctionne bien. Cela dépend de la priorité. Excusez-moi depuis longtemps.

① Windows: installez Java (11 ou supérieur).

Omis car il est identique à Selenium3. S'il ne s'agit pas de Java 11 ou supérieur, une erreur se produira certainement.

② Windows: Téléchargez Selenium Server (Grid) 4.

Allez à la page ici et téléchargez à partir du lien intitulé «Dernière version de Selenium 4 Alpha».

③ Windows: téléchargez le pilote du navigateur.

Identique à Selenium3. La différence est que le fichier exécutable ne doit pas nécessairement être situé au même emplacement que le fichier jar.

 Windows: ajoutez le chemin du pilote à la variable d'environnement système PATH.

Cette procédure n'est requise que pour Selenium 4. Ouvrez l'écran de réglage en sélectionnant [Démarrer] → [Paramètres] et entrez "Variables d'environnement" dans la zone de recherche. Deux candidats, "Modifier les variables d'environnement" et "Modifier les variables d'environnement système", apparaîtront. Sélectionnez "Modifier la variable". スクリーンショット 2020-11-23 165701.png

Ensuite, l'écran suivant s'ouvrira, alors appuyez sur "Variables d'environnement". スクリーンショット 2020-11-23 165510.png Lorsque l'écran «Variables d'environnement» s'ouvre, sélectionnez la ligne «Chemin» dans le tableau «Variables d'environnement système» et appuyez sur «Modifier». スクリーンショット 2020-11-23 165853.png Lorsque l'écran "Modifier le nom de la variable d'environnement" s'ouvre, cliquez sur "Nouveau" et entrez le chemin du dossier dans lequel le pilote du navigateur est stocké. Une fois la saisie terminée, appuyez sur la touche Entrée pour confirmer et appuyez sur "OK". スクリーンショット 2020-11-23 170220.png Cliquez sur «OK» sur l'écran «Variables environnementales» et sur l'écran «Propriétés système», fermez l'écran «Paramètres» et vous avez terminé.

⑤ Windows: démarrez Selenium Server.

Selenium Grid 4 a un mode appelé «autonome», qui vous permet de lancer tous les composants à partir d'une invite de commande.

Démarrez une invite de commande et exécutez la commande suivante. Veuillez noter que le nom du fichier varie en fonction de la version téléchargée.

java -jar [Emplacement de stockage du fichier jar]\selenium-server-4.0.0-alpha-7.jar standalone

Si la dernière ligne de la sortie de commande est la suivante et que le processus ne se termine pas, il n'y a pas de problème.

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

⑥ WSL: installez Selenium4.

pip install selenium==4.0.0a7

Si Selenium est installé, vous pouvez mettre à niveau avec la commande suivante.

pip install -U --pre selenium

Si la version Python est 3.8 ou supérieure, il semble que l'installation de Selenium == 4.0.0a7 échouera.Dans ce cas, je pense que vous allez soit abaisser la version Python, soit installer Selenium == 4.0.0a6. ** Veuillez noter que si vous abaissez la version de Selenium, vous devez également abaisser la version de Selenium Server **.

 WSL: créez un exemple de code.

Identique à Selenium3. L'URL définie dans command_executor peut être différente entre Selenium 3 et 4, donc changez-la si nécessaire.

 WSL: exécutez l'exemple de code.

python sample.py

En cas de succès, cela ressemblera à ceci:

selenium4_demo.gif

Épilogue

Je ne connais pas du tout Java, donc quand j'ai exécuté le fichier jar et que j'ai eu une erreur, j'étais tellement confus que j'ai presque pleuré, mais en conséquence j'étais soulagé que cela fonctionne. Je pense que les points étaient la ** version Java ** et la ** variable d'environnement système PATH **. Nous sommes impatients de vous aider.

Merci d'avoir regardé jusqu'à la fin.

Références

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

[^ 1]: La page suivante a été utile pour cette méthode. Python: Prenez une capture d'écran de la page Web entière avec Selenium + Headless Chrome-CUBE SUGAR CONTAINER

Recommended Posts

[Selenium] Je souhaite afficher le navigateur en appuyant sur le pilote du système d'exploitation hôte à partir de WSL
Je veux afficher la barre de progression
Je veux afficher la progression en Python!
[Ecriture] Je souhaite afficher les variables utilisées dans le programme côté serveur en temps réel sur le navigateur et les mettre à jour.
Je veux changer la destination du lien symbolique de / lib64 de / usr / lib64 à / my-lib64 sur CentOS
Je souhaite enregistrer les photos envoyées par LINE vers S3
Je souhaite calculer le temps d'arrêt autorisé à partir du taux de fonctionnement
J'ai essayé de résumer les langues que les débutants devraient désormais apprendre par but
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
Pour le moment en utilisant FastAPI, je veux montrer comment utiliser l'API comme ça dans swagger
Je souhaite envoyer un signal uniquement du sous-thread au thread principal
Je souhaite afficher une image sur Jupyter Notebook à l'aide d'OpenCV (mac)
[Google Colab] Je souhaite afficher plusieurs images côte à côte dans une vignette
Je veux épingler Spyder à la barre des tâches
Je veux sortir froidement sur la console
Je veux gérer la rime part1
Je veux gérer la rime part3
Je veux utiliser jar de python
Je veux utiliser Linux sur mac
Je veux empêcher le haut-parleur connecté au Raspberry Pi (jessie) d'être bonked lorsque le système d'exploitation est redémarré (script Python)
Je veux gérer la rime part2
Je souhaite développer des applications Android sur Android
Je veux gérer la rime part5
Je veux gérer la rime part4
[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
J'ai essayé de passer le test G et la qualification E en m'entraînant à partir de 50
J'ai essayé d'afficher le degré d'infection par le virus corona sur la carte thermique Seaborn
Je souhaite me connecter à PostgreSQL à partir de plusieurs langues
J'ai essayé d'accéder à l'API Qiita depuis le début
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je souhaite afficher plusieurs images avec matplotlib.
Lorsque vous souhaitez mettre à jour le pilote Chrome.
Je veux gérer la rime part7 (BOW)
Je veux faire des crises de ma tête
Je veux utiliser le solveur ceres de python
Je veux faire pyenv + pipenv même sous Windows
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux enregistrer les entrées / sorties de fichiers sous Linux
Je veux créer du code C ++ à partir de code Python!
Je souhaite personnaliser l'apparence de zabbix
Je souhaite utiliser la fonction d'activation Mish
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police