Heureusement, vous pouvez configurer le sélénium pour exécuter le navigateur Web Chrome en mode sans tête. Dans ce mode, le navigateur Web Chrome s'exécutera sans aucune interface utilisateur graphique. Ainsi, le sélénium peut faire l'automatisation Web, le coup de terre, les tests de navigateur, etc. Utilisation du navigateur Web Chrome dans les serveurs Linux où vous n'avez aucun environnement de bureau graphique installé.
Dans cet article, je vais vous montrer comment exécuter le sélénium avec le navigateur Web Chrome en mode sans tête. J'utiliserai la bibliothèque Selenium Python et j'écrirai les scripts de sélénium à l'aide du langage de programmation Python 3. Alors, commençons.
Conditions préalables:
Pour essayer les commandes et les exemples de cet article, vous devez avoir,
1) Une distribution Linux (de préférence Ubuntu) installée sur votre ordinateur.
2) Python 3 installé sur votre ordinateur.
3) PIP 3 installé sur votre ordinateur.
4) Google Chrome installé sur votre ordinateur.
Vous pouvez trouver de nombreux articles sur ces sujets sur Linuxhint.com. Assurez-vous de les vérifier si vous avez besoin d'aide.
Préparation d'un environnement virtuel Python 3 pour le projet:
L'environnement virtuel Python est utilisé pour créer un répertoire de projet Python isolé. Les modules Python que vous installez à l'aide de PIP seront installés dans le répertoire du projet uniquement, pas à l'échelle mondiale.
Python virtualv Le module est utilisé pour gérer les environnements virtuels Python.
Vous pouvez installer python virtualv Module mondial à l'aide de PIP 3 comme suit:
$ sudo pip3 installer VirtualEnvPython virtualv devrait être installé.
Créer un répertoire de projet chrome-tête sans dans votre répertoire de travail actuel comme suit:
$ mkdir -pv chrome-headless / pilotes
Accédez à votre répertoire de projet nouvellement créé chrome-tête sans comme suit:
$ cd chrome-headless /Créez un environnement virtuel Python dans votre répertoire de projet avec la commande suivante:
$ virtualenv .venv
Un environnement virtuel python doit être créé dans le .Venv / Répertoire dans votre répertoire de projet.
Activez l'environnement virtuel Python de votre répertoire de projet avec la commande suivante:
$ source .Venv / bin / Activer
Installation de la bibliothèque de Selenium Python:
La bibliothèque de sélénium est disponible dans le référentiel officiel Python PYPI.
Vous pouvez installer la bibliothèque Selenium Python à l'aide de PIP 3 comme suit:
$ pip3 installer le séléniumLa bibliothèque Selenium Python doit être installée.
Installation du pilote Web Chrome:
Le pilote Web Chrome vous permettra de contrôler ou d'automatiser le navigateur Web Google Chrome de Selenium.
Dans cette section, je vais vous montrer comment installer le pilote Web Chrome.
Tout d'abord, ouvrez Google Chrome et visitez Chrome: // Paramètres / Aide.
Une fois que la page se charge, vous devriez trouver le numéro de version Google Chrome dans le À propos de Chrome section. Notez les 3 premières sections du numéro de version comme marqué dans la capture d'écran ci-dessous.
Pour télécharger Chrome Web Driver, visitez la page de téléchargement officielle du pilote Chrome.
Dans le Rejets en cours Section, le pilote Web Chrome pour les versions les plus récentes du navigateur Web Google Chrome devrait être disponible, comme vous pouvez le voir dans la capture d'écran ci-dessous. L'une des versions actuelles de pilotes Web Chrome devrait avoir un numéro de version correspondant avec votre navigateur Web Google Chrome. Les 3 premières sections du numéro de version de Chrome Web Driver et Google Chrome Web Browser doivent correspondre.
Si la version que vous recherchez n'est pas dans le Rejets en cours Section, faites défiler un peu vers le bas, et vous devriez pouvoir le trouver.
Une fois que vous avez cliqué sur le numéro de version de Chrome Web Driver, il devrait reprendre sa page de téléchargement. Clique sur le chromedriver_linux64.zipper fichier d'ici.
L'archive Chrome Web Driver doit être téléchargée.
Le téléchargement chromedriver_linux64.zipper Le fichier doit être dans votre ~ / Téléchargements annuaire.
$ ls -lh ~ / téléchargements
Extraire le chromedriver_linux64.zipper Archive du ~ / Téléchargements répertoire au Conducteurs/ Répertoire de votre projet comme suit:
$ unzip ~ / téléchargements / chromedriver_linux64.pilotes zip -d /Un nouveau fichier chromedriver devrait être créé dans le Conducteurs/ Répertoire de votre projet une fois que l'archive de pilote Web Chrome est extraite, comme vous pouvez le voir dans la capture d'écran ci-dessous.
Tester le pilote Web Chrome en mode sans tête:
Dans cette section, je vais vous montrer comment exécuter le sélénium en utilisant Chrome Driver en mode sans tête.
Tout d'abord, créez un nouveau script python ex01.py dans votre répertoire de projet et saisissez les lignes de codes suivantes.
à partir de Selenium Import WebDriverUne fois que vous avez terminé, enregistrez le ex01.py Script python.
Ces lignes importent toutes les choses requises de la sélénium bibliothèque.
Comme je l'ai dit plus tôt, par défaut, le conducteur Chrome essaie d'exécuter Google Chrome en mode graphique. Pour exécuter Google Chrome en mode sans tête, nous devons dire au conducteur de Chrome de passer des options supplémentaires. Cette ligne crée un Options objet que nous pouvons transmettre au pilote Web Chrome plus tard.
Vous pouvez exécuter Google Chrome en mode sans tête simplement en définissant le sans tête propriété du chromeoptions s'opposer à Vrai.
Ou, vous pouvez utiliser le add_argument () Méthode de la chromeoptions objet pour ajouter le -sans tête Argument en ligne de commande pour exécuter Google Chrome en mode sans tête en utilisant le pilote Web Selenium Chrome.
Vous pouvez utiliser un webdriver.Chrome() Méthode pour initialiser / exécuter un navigateur Web Google Chrome de Selenium. Le exécutable_path L'argument est utilisé pour dire à Selenium d'utiliser le chromedriver binaire du Conducteurs/ Annuaire du projet. Le options L'argument dit à Selenium d'utiliser nos options personnalisées chromeoptions.
Une fois que Selenium exécute un navigateur Web Google Chrome à l'aide du pilote Web Selenium Chrome, il renvoie un navigateur objet. Nous pouvons l'utiliser pour contrôler l'instance Google Chrome plus tard.
Le navigateur.obtenir() la méthode charge le linuxhint.com Site Web du navigateur Web Google Chrome en arrière-plan (en mode sans tête).
Une fois la page chargée, navigateur.titre la propriété aura le titre du site Web. Le python imprimer() La méthode imprime le titre du site Web sur la console.
Puis le navigateur.arrêter() La méthode ferme le navigateur Web Google Chrome.
Pour tester si le sélénium peut fonctionner en mode sans tête, exécutez le script Python ex01.py comme suit:
$ python3 ex01.pyIl devrait imprimer le titre du site Web sur la console sans ouvrir le navigateur Web Google Chrome en mode graphique.
Juste pour vous montrer qu'il fonctionne à partir de serveurs sans tête Linux (où aucune interface utilisateur graphique n'est installée), j'ai exécuté le script Python ex01.py sur le serveur Ubuntu 20.04 LTS. Comme vous pouvez le voir, le script fonctionne très bien.
Stracage Web avec le sélénium en mode sans tête à l'aide du pilote Web Chrome:
Dans cette section, je vais vous montrer un exemple de mise au rebut du scénario en sélénium en utilisant le pilote Web Chrome en mode sans tête.
Tout d'abord, visitez le générateur de noms aléatoires.Informations de Google Chrome ou de tout autre navigateur Web. Ce site Web générera 10 noms aléatoires chaque fois que vous rechargez la page, comme vous pouvez le voir dans la capture d'écran ci-dessous. Notre objectif est d'extraire ces noms aléatoires en utilisant le sélénium en mode sans tête.
Pour découvrir la structure HTML de la liste, vous devez ouvrir le Outil de développeur chromé. Pour ce faire, appuyez sur le bouton de souris droit (RMB) sur la page et cliquez sur Inspecter ou presser + + je.
Outil de développeur chromé devrait être ouvert. Clique sur le Inspecter l'icône () comme marqué dans la capture d'écran ci-dessous.
Ensuite, survolez la liste de Noms aléatoires. La liste doit être mise en évidence comme marqué dans la capture d'écran ci-dessous. Ensuite, appuyez sur le bouton gauche de la souris (LMB) pour sélectionner la liste.
Le code HTML de la liste doit être mis en évidence dans le Éléments Onglet du Outil de développeur chromé. Ici, la liste des noms aléatoires est à l'intérieur d'un div élément. Le div élément a le classe nom résultats. À l'intérieur, nous avons un ol élément avec le classe nom liste de nom. À l'intérieur de ol élément, chacun des noms est dans un li élément.
De cela, nous pouvons dire que pour arriver au li Tags, nous devons suivre div.Résultats> OL.Namelist> li
Ainsi, notre sélecteur CSS sera div.Résultats ol.Namelist Li (Remplacez simplement le > Signes avec un espace)
Pour extraire ces noms aléatoires, créez un nouveau script Python ex02.py et saisissez les lignes de codes suivantes.
à partir de Selenium Import WebDriverUne fois que vous avez terminé, enregistrez le ex02.py Script python.
J'ai expliqué les lignes 1 à 8 dans la section précédente de cet article. Ce sont les mêmes que dans ex01.py.
La ligne 10 charge le site Web du générateur de noms aléatoires à l'aide du navigateur.obtenir() méthode.
La ligne 11 sélectionne la liste des noms à l'aide du navigateur.find_elements_by_css_selector () méthode. Cette méthode utilise le sélecteur CSS div.Résultats ol.Namelist Li Pour trouver la liste des noms. Ensuite, la liste des noms est stockée dans le liste de nom variable.
Aux lignes 13 et 14, un pour la boucle est utilisée pour itérer à travers le liste de nom liste de li éléments. Dans chaque itération, le contenu du li L'élément est imprimé sur la console.
Maintenant, exécutez le script Python ex02.py comme suit:
$ Python3 Ex02.pyComme vous pouvez le voir, le script Python ex02.py a récupéré tous les noms aléatoires de la page Web.
Si vous exécutez le script une deuxième fois, il devrait renvoyer une nouvelle liste de noms aléatoires, comme vous pouvez le voir dans la capture d'écran ci-dessous.
Problèmes auxquels vous pouvez faire face à l'exécution du sélénium en mode sans tête:
Vous avez vu plus tôt que l'exécution du sélénium en mode sans tête à l'aide du pilote chromé est aussi simple que de régler le chromeoptions.sans tête se rapprocher Vrai.
Cette solution peut ne pas fonctionner pour vous sur certaines distributions Linux. Dans cette section, je vais parler de certains des problèmes auxquels vous pourriez rencontrer tout en exécutant le sélénium en mode sans tête en utilisant le pilote Web Chrome.
Par défaut, le navigateur Web Google Chrome fait beaucoup de sable (exécute beaucoup de choses dans un environnement isolé). Cela peut causer des problèmes lors de l'exécution du sélénium en mode sans tête en utilisant le pilote Web Chrome. Vous pouvez désactiver le sable pour Google Chrome en utilisant le -NO-SANDBOX drapeau.
Pour ajouter le -NO-SANDBOX drapeau, ajoutez la ligne suivante avant d'initialiser le conducteur de sélénium chromé en utilisant webdriver.Chrome() méthode (ligne 8 dans ex01.py Script python).
chromeoptions.add_argument ("- no-sandbox")Vous pouvez avoir des problèmes à faire certaines choses dans le navigateur Web Google Chrome de Selenium comme prendre des captures d'écran du site Web et ainsi de suite. Cela peut se produire car, en mode sans tête, Google Chrome peut définir une résolution d'écran virtuelle incorrecte. Donc, votre site Web peut ne pas avoir l'air bien. Vous pouvez définir la résolution d'écran virtuelle souhaitée pour le navigateur Web Google Chrome en mode sans tête à l'aide du -la taille de la fenêtre Option de ligne de commande.
Par exemple, pour définir la largeur de l'écran virtuel sur 1280 px et hauteur à 720 px, ajouter le -la taille de la fenêtre Option de ligne de commande avant d'initialiser le conducteur de Sélénium Chrome à l'aide webdriver.Chrome() méthode (ligne 8 dans ex01.py Script python) comme suit:
chromeoptions.add_argument ("- window-size = 1280,720")Votre serveur peut ne pas avoir un GPU installé, ou il peut avoir un GPU que le navigateur Web Google Chrome ne saura pas comment utiliser. Par défaut, Google Chrome devrait automatiquement désactiver l'accélération du GPU si un GPU n'est pas disponible ou si un GPU non pris en charge est disponible. Dans certains cas, il peut ne pas le faire. Dans ce cas, Selenium peut ne pas être en mesure d'exécuter le navigateur Web Google Chrome en mode sans tête. Pour résoudre ce problème, vous devez désactiver l'accélération du GPU en utilisant le -désactiver le gpu drapeau.
Pour ajouter le -désactiver le gpu drapeau, ajoutez la ligne suivante avant d'initialiser le conducteur de sélénium chromé en utilisant webdriver.Chrome() méthode (ligne 8 dans ex01.py Script python).
chromeoptions.add_argument ("- désactiver-gpu")
Conclusion:
Dans cet article, je vous ai montré comment configurer le sélénium en mode sans tête à l'aide du pilote Web Chrome. J'ai couvert les bases, ce qui vous aidera à démarrer avec l'automatisation du navigateur sélénium sans tête, les tests Web et le grattage Web.
J'ai également couvert certains des arguments / drapeaux de ligne de commande Google Chrome que vous pouvez utiliser pour résoudre certains des problèmes que vous pourriez avoir tout en exécutant le sélénium en mode sans tête à l'aide du pilote Web Chrome.
Il existe de nombreuses autres options de ligne de commande Google Chrome, que je ne couvrais pas dans cet article. Ces options de ligne de commande peuvent être utiles pour votre projet. Vous pouvez trouver toutes les options de ligne de commande Google Chrome prises en charge dans la liste des commutateurs de ligne de commande Chromium par la page Peter Beverloo.