Introduction au sélénium dans Python 3

Introduction au sélénium dans Python 3
Selenium est un cadre utilisé pour tester les applications Web. Selenium automatise un navigateur, comme Chrome ou Firefox, pour exécuter des tests sur votre site Web souhaité. Selenium est également un outil de grattage Web très puissant. Selenium prend en charge JavaScript et toutes les fonctionnalités du navigateur moderne. Cet outil est très efficace pour extraire les informations des sites Web.

Cet article vous montrera comment configurer le sélénium sur votre distribution Linux (i.e., Ubuntu), ainsi que comment effectuer l'automatisation Web de base et la mise en rejet en ligne avec la bibliothèque Selenium Python 3.

Conditions préalables

Pour essayer les commandes et les exemples utilisés dans cet article, vous devez avoir ce qui suit:

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) Le navigateur Web Google Chrome ou Firefox installé sur votre ordinateur.

Vous pouvez trouver de nombreux articles sur ces sujets à Linuxhint.com. Assurez-vous de vérifier ces articles si vous avez besoin d'une aide supplémentaire.

Préparer 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, plutôt que dans le monde entier.

Le python virtualv Le module est utilisé pour gérer les environnements virtuels Python.

Vous pouvez installer le python virtualv Module mondial à l'aide de PIP 3, comme suit:

$ sudo pip3 installer VirtualEnv

PIP3 téléchargera et installera à l'échelle mondiale tous les modules requis.

À ce stade, le python virtualv Le module doit être installé dans le monde entier.

Créer le répertoire de projet python-sélénium-basic / Dans votre répertoire de travail actuel, comme suit:

$ mkdir -pv python-selenium-basic / pilotes

Accédez à votre répertoire de projet nouvellement créé python-sélénium-basic /, comme suit:

$ CD Python-Selenium-Basic /

Créez un environnement virtuel Python dans votre répertoire de projet avec la commande suivante:

$ virtualenv .env

L'environnement virtuel Python devrait désormais être créé dans votre répertoire de projet.'

Activez l'environnement virtuel Python dans votre répertoire de projet via la commande suivante:

$ source .env / bin / activer

Comme vous pouvez le voir, l'environnement virtuel Python est activé pour ce répertoire de projet.

Installation de la bibliothèque de sélénium Python

La bibliothèque Selenium Python est disponible dans le référentiel officiel Python PYPI.

Vous pouvez installer cette bibliothèque à l'aide de PIP 3, comme suit:

$ pip3 installer le sélénium

La bibliothèque Selenium Python doit maintenant être installée.

Maintenant que la bibliothèque Selenium Python est installée, la prochaine chose que vous devez faire est d'installer un pilote Web pour votre navigateur Web préféré. Dans cet article, je vais vous montrer comment installer les pilotes Web Firefox et Chrome pour Selenium.

Installation de Firefox Gecko Driver

Le pilote Firefox Gecko vous permet de contrôler ou d'automatiser le navigateur Web Firefox à l'aide de sélénium.

Pour télécharger le pilote Firefox Gecko, visitez la page GitHub Releases de Mozilla / Geckodriver à partir d'un navigateur Web.

Comme vous pouvez le voir, V0.26.0 est la dernière version du Firefox Gecko Driver au moment où cet article a été écrit.

Pour télécharger le pilote Firefox Gecko, faites défiler un peu et cliquez sur le Tar Linux Geckodriver.GZ Archive, selon votre architecture de système d'exploitation.

Si vous utilisez un système d'exploitation 32 bits, cliquez sur le geckodriver-v0.26.0-LINUX32.le goudron.gz lien.

Si vous utilisez un système d'exploitation 64 bits, cliquez sur le geckodriver-v0.26.0-Linuxx64.le goudron.gz lien.

Dans mon cas, je téléchargerai la version 64 bits du pilote Firefox Gecko.

Votre navigateur devrait vous inviter à enregistrer les archives. Sélectionner Enregistrer le fichier puis cliquez D'ACCORD.

Les archives du pilote Firefox Gecko doivent être téléchargées dans le ~ / Téléchargements annuaire.

Extraire le geckodriver-v0.26.0-LINUX64.le goudron.gz Archive du ~ / Téléchargements répertoire au Conducteurs/ Répertoire de votre projet en entrant la commande suivante:

$ tar -xzf ~ / téléchargements / geckodriver-v0.26.0-LINUX64.le goudron.Pilotes GZ -C /

Une fois l'archive du conducteur de Firefox Gecko extrait, un nouveau geckodriver Le fichier binaire doit être créé dans le Conducteurs/ Répertoire de votre projet, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Tester Selenium Firefox Gecko Driver

Dans cette section, je vais vous montrer comment configurer votre tout premier script Selenium Python pour tester si le pilote Firefox Gecko fonctionne.

Tout d'abord, ouvrez le répertoire du projet python-sélénium-basic / avec votre IDE ou éditeur préféré. Dans cet article, j'utiliserai Visual Studio Code.

Créer le nouveau script Python ex01.py, et tapez les lignes suivantes dans le script.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
à partir de temps pour sommeil
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ('http: // www.Google.com ')
sommeil (5)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le ex01.py Script python.

J'expliquerai le code dans une section ultérieure de cet article.

La ligne suivante configure le sélénium pour utiliser le pilote Firefox Gecko du Conducteurs/ Répertoire de votre projet.

Pour tester si le conducteur de Firefox Gecko travaille avec Selenium, exécutez ce qui suit ex01.py Script python:

$ python3 ex01.py

Le navigateur Web Firefox doit visiter automatiquement Google.com et se fermer après 5 secondes. Si cela se produit, alors le pilote Selenium Firefox Gecko fonctionne correctement.

Installation du pilote Web Chrome

Le pilote Web Chrome vous permet de contrôler ou d'automatiser le navigateur Web Google Chrome à l'aide du sélénium.

Vous devez télécharger la même version du pilote Web Chrome que celui de votre navigateur Web Google Chrome.

Pour trouver le numéro de version de votre navigateur Web Google Chrome, visitez Chrome: // Paramètres / Aide dans Google Chrome. Le numéro de version doit être dans le À propos de Chrome Section, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Dans mon cas, le numéro de version est 83.0.4103.116. Les trois premières parties du numéro de version (83.0.4103, Dans mon cas) doit correspondre aux trois premières parties du numéro de version du pilote Web Chrome.

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 sera disponible, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Si la version de Google Chrome que vous utilisez n'est pas dans le Rejets en cours Section, faites défiler un peu vers le bas, et vous devriez trouver la version souhaitée.

Une fois que vous avez cliqué sur la bonne version de pilote Web Chrome, cela devrait vous amener à la page suivante. Clique sur le chromedriver_linux64.zipper lien, comme indiqué dans la capture d'écran ci-dessous.

L'archive Chrome Web Driver devrait maintenant être téléchargée.

L'archive Chrome Web Driver devrait maintenant être téléchargée dans le ~ / Téléchargements annuaire.

Vous pouvez extraire le ChromEdriver-Linux64.zipper Archive du ~ / Téléchargements répertoire au Conducteurs/ Répertoire de votre projet avec la commande suivante:

$ unzip ~ / téléchargements / chromedriver_linux64.pilotes zip -d /

Une fois l'archive de pilote Web Chrome extraite, un nouveau chromedriver Le fichier binaire doit être créé dans le Conducteurs/ Répertoire de votre projet, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Tester le pilote Web de Selenium Chrome

Dans cette section, je vais vous montrer comment configurer votre tout premier script Selenium Python pour tester si le pilote Web Chrome fonctionne.

Tout d'abord, créez le nouveau script Python ex02.py, et tapez les lignes de codes suivantes dans le script.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
à partir de temps pour sommeil
navigateur = webdriver.Chrome (exécutable_path = "./ pilotes / chromedriver ")
navigateur.get ('http: // www.Google.com ')
sommeil (5)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le ex02.py Script python.

J'expliquerai le code dans une section ultérieure de cet article.

La ligne suivante configure le sélénium pour utiliser le pilote Web Chrome à partir du Conducteurs/ Répertoire de votre projet.

Pour tester si le pilote Web Chrome travaille avec le sélénium, exécutez le ex02.py Script Python, comme suit:

$ python3 ex01.py

Le navigateur Web Google Chrome doit visiter automatiquement Google.com et se fermer après 5 secondes. Si cela se produit, alors le pilote Selenium Firefox Gecko fonctionne correctement.

Bases du grattage Web avec le sélénium

J'utiliserai le navigateur Web Firefox à partir de maintenant. Vous pouvez également utiliser Chrome, si vous le souhaitez.

Un script de base de Selenium Python devrait ressembler au script indiqué dans la capture d'écran ci-dessous.

Tout d'abord, importez le sélénium webdriver du sélénium module.

Ensuite, importez le Clés depuis sélénium.webdriver.commun.clés. Cela vous aidera à envoyer des pressions de touches de clavier au navigateur que vous automatisez à partir de sélénium.

La ligne suivante crée un navigateur Objet pour le navigateur Web Firefox à l'aide du pilote Firefox Gecko (WebDriver). Vous pouvez contrôler les actions du navigateur Firefox en utilisant cet objet.

Pour charger un site Web ou une URL (je chargerai le site Web https: // www.Duckduckgo.com), appelez le obtenir() Méthode de la navigateur Objet sur votre navigateur Firefox.

À l'aide du sélénium, vous pouvez écrire vos tests, effectuer un coup de pied en ligne et enfin, fermer le navigateur à l'aide du arrêter() Méthode de la navigateur objet.

Ci-dessus est la disposition de base d'un script de sélénium python. Vous écrirez ces lignes dans tous vos scripts Selenium Python.

Exemple 1: Impression du titre d'une page Web

Ce sera l'exemple le plus simple discuté en utilisant du sélénium. Dans cet exemple, nous imprimerons le titre de la page Web que nous visiterons.

Créer le nouveau fichier ex04.py et saisissez les lignes de codes suivantes.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ('https: // www.Duckduckgo.com ')
Imprimer ("Titre:% S"% BROWNER.titre)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le fichier.

Ici le navigateur.titre est utilisé pour accéder au titre de la page Web visitée et du imprimer() La fonction sera utilisée pour imprimer le titre dans la console.

Après avoir exécuté le ex04.py script, il devrait:

1) Ouvrez Firefox
2) Chargez la page Web souhaitée
3) Retrouvez le titre de la page
4) Imprimez le titre sur la console
5) Et enfin, fermez le navigateur

Comme vous pouvez le voir, le ex04.py Le script a bien imprimé le titre de la page Web dans la console.

$ python3 ex04.py

Exemple 2: Impression des titres de plusieurs pages Web

Comme dans l'exemple précédent, vous pouvez utiliser la même méthode pour imprimer le titre de plusieurs pages Web à l'aide de la boucle Python.

Pour comprendre comment cela fonctionne, créez le nouveau script Python ex05.py et saisissez les lignes de code suivantes dans le script:

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
urls = ['https: // www.Duckduckgo.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
pour l'URL dans les URL:
navigateur.obtenir (URL)
Imprimer ("Titre:% S"% BROWNER.titre)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le script Python ex05.py.

Ici le URL La liste maintient l'URL de chaque page Web.

UN pour la boucle est utilisée pour itérer à travers le URL énumérer les éléments.

À chaque itération, Selenium dit au navigateur de visiter le URL Et obtenez le titre de la page Web. Une fois que Selenium a extrait le titre de la page Web, il est imprimé dans la console.

Exécutez le script Python ex05.py, et vous devriez voir le titre de chaque page Web dans le URL liste.

$ python3 ex05.py

Ceci est un exemple de la façon dont le sélénium peut effectuer la même tâche avec plusieurs pages Web ou sites Web.

Exemple 3: Extraction des données d'une page Web

Dans cet exemple, je vais vous montrer les bases de l'extraction des données des pages Web à l'aide de sélénium. Ceci est également connu sous le nom de grattage Web.

Tout d'abord, visitez le hasard.lien org de Firefox. La page doit générer une chaîne aléatoire, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Pour extraire les données de chaîne aléatoires à l'aide du sélénium, vous devez également connaître la représentation HTML des données.

Pour voir comment les données de chaîne aléatoire sont représentées dans HTML, sélectionnez les données de chaîne aléatoire et appuyez sur le bouton de souris droit (RMB) et cliquez sur Inspecter l'élément (Q), Comme indiqué dans la capture d'écran ci-dessous.

La représentation HTML des données doit être affichée dans le Inspecteur Onglet, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Vous pouvez également cliquer sur le Inspecter l'icône ( ) Pour inspecter les données de la page.

Cliquez sur l'icône Inspecter () et survolez les données de chaîne aléatoires que vous souhaitez extraire. La représentation HTML des données doit être affichée comme avant.

Comme vous pouvez le voir, les données de chaîne aléatoires sont enveloppées dans un HTML pré Tag et contient la classe données.

Maintenant que nous connaissons la représentation HTML des données que nous voulons extraire, nous allons créer un script Python pour extraire les données à l'aide de sélénium.

Créer le nouveau script Python ex06.py et tapez les lignes de codes suivantes dans le script

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ("https: // www.aléatoire.org / cordes /?num = 1 & len = 20 & chiffres
= on & uperalpha = on & boweralpha = on & unique = on & format = html & rnd = new ")
DataElement = navigateur.find_element_by_css_selector ('pré.données')
Imprimer (élément de données.texte)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le ex06.py Script python.

Ici le navigateur.obtenir() La méthode charge la page Web dans le navigateur Firefox.

Le navigateur.find_element_by_css_selector () La méthode recherche le code HTML de la page pour spécifiquement un élément et le renvoie.

Dans ce cas, l'élément serait pré.données, le pré Tag qui a le nom de classe données.

Sous le pré.données l'élément a été stocké dans le élément de données variable.

Le script imprime ensuite le contenu texte du sélectionné pré.données élément.

Si vous exécutez le ex06.py Script Python, il devrait extraire les données de chaîne aléatoires de la page Web, comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ Python3 Ex06.py

Comme vous pouvez le voir, chaque fois que je dirige le ex06.py Script Python, il extrait des données de chaîne aléatoires différentes de la page Web.

Exemple 4: Extraction de la liste des données de la page Web

L'exemple précédent vous a montré comment extraire un seul élément de données d'une page Web à l'aide de sélénium. Dans cet exemple, je vais vous montrer comment utiliser le sélénium pour extraire une liste de données d'une page Web.

Tout d'abord, visitez le générateur de noms aléatoires.Informations de votre navigateur Web Firefox. Ce site Web générera dix 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.

Si vous inspectez la liste des noms de plus près, vous pouvez voir qu'il s'agit d'une liste commandée (ol étiqueter). Le ol La balise comprend également le nom de classe liste de nom. Chacun des noms aléatoires est représenté comme un élément de liste (li tag) à l'intérieur du ol étiqueter.

Pour extraire ces noms aléatoires, créez le nouveau script Python ex07.py et tapez les lignes de codes suivantes dans le script.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ("http: // aléatoire-générateur.Info/")
Namelist = navigateur.find_elements_by_css_selector ('ol.Namelist li ')
pour le nom dans Namelist:
imprimer (nom.texte)
navigateur.arrêter()

Une fois que vous avez terminé, enregistrez le ex07.py Script python.

Ici le navigateur.obtenir() La méthode charge la page Web du générateur de noms aléatoires dans le navigateur Firefox.

Le navigateur.find_elements_by_css_selector () La méthode utilise le sélecteur CSS ol.Namelist Li pour trouver tout li éléments à l'intérieur du ol Tag ayant le nom de classe liste de nom. J'ai stocké tous les sélectionnés li éléments dans le liste de nom variable.

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.

Si vous exécutez le ex07.py Script Python, il va récupérer tous les noms aléatoires de la page Web et l'imprimer à l'écran, comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ python3 ex07.py

Si vous exécutez le script une deuxième fois, il devrait renvoyer une nouvelle liste de noms d'utilisateurs aléatoires, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Exemple 5: Formulaire de soumission - Recherche sur DuckDuckgo

Cet exemple est tout aussi simple que le premier exemple. Dans cet exemple, je visiterai le moteur de recherche DuckDuckgo et rechercherai le terme HQ du sélénium Utilisation du sélénium.

Tout d'abord, visitez le moteur de recherche DuckDuckgo du navigateur Web Firefox.

Si vous inspectez le champ de saisie de recherche, il devrait avoir l'ID search_form_input_homepage, Comme vous pouvez le voir dans la capture d'écran ci-dessous.

Maintenant, créez le nouveau script Python ex08.py et tapez les lignes de codes suivantes dans le script.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ("https: // DuckDuckgo.com / ")
SearchInput = navigateur.find_element_by_id ('search_form_input_homepage')
Rechercher.Send_keys ('Selenium HQ' + Keys.ENTRER)

Une fois que vous avez terminé, enregistrez le ex08.py Script python.

Ici le navigateur.obtenir() La méthode charge la page d'accueil du moteur de recherche DuckDuckgo dans le navigateur Web Firefox.

Le navigateur.find_element_by_id () la méthode sélectionne l'élément d'entrée avec l'ID search_form_input_homepage et le stocke dans le Rechercher variable.

Le Rechercher.send_keys () La méthode est utilisée pour envoyer des données d'appui de touche au champ de saisie. Dans cet exemple, il envoie la chaîne HQ du sélénium, et la touche Entrée est enfoncée en utilisant le Clés.ENTRER constant.

Dès que le moteur de recherche DuckDuckgo reçoit la touche Entrée (Clés.ENTRER), il recherche et affiche le résultat.

Courir le ex08.py Script Python, comme suit:

$ python3 ex08.py

Comme vous pouvez le voir, le navigateur Web Firefox a visité le moteur de recherche DuckDuckgo.

Il a automatiquement tapé HQ du sélénium Dans la zone de texte de recherche.

Dès que le navigateur a reçu la touche Entrée Appuyer (Clés.ENTRER), il a affiché le résultat de la recherche.

Exemple 6: Soumettre un formulaire sur W3Schools.com

Dans l'exemple 5, la soumission du formulaire de moteur de recherche de DuckDuckgo était facile. Tout ce que vous aviez à faire était d'appuyer sur la touche Entrée. Mais ce ne sera pas le cas pour toutes les soumissions de formulaires. Dans cet exemple, je vais vous montrer une manipulation de forme plus complexe.

Tout d'abord, visitez la page HTML Forms of W3Schools.com du navigateur Web Firefox. Une fois que la page se charge, vous devriez voir un exemple de formulaire. C'est le formulaire que nous soumettrons dans cet exemple.

Si vous inspectez le formulaire, le Prénom Le champ de saisie devrait avoir l'ID fname, le Nom de famille Le champ de saisie devrait avoir l'ID nom, et le Bouton de soumission devrait avoir le taper soumettre, Comme vous pouvez le voir dans la capture d'écran ci-dessous.

Pour soumettre ce formulaire à l'aide de Selenium, créez le nouveau script Python ex09.py et tapez les lignes de codes suivantes dans le script.

à partir de Selenium Import WebDriver
de sélénium.webdriver.commun.Clés Import les clés
navigateur = webdriver.Firefox (exécutable_path = "./ pilotes / geckodriver ")
navigateur.get ("https: // www.W3schools.com / html / html_forms.aspic")
fname = navigateur.find_element_by_id ('fname')
fname.clair()
fname.send_keys ('shahriar')
lname = navigateur.find_element_by_id ('lname')
nom.clair()
nom.send_keys ('shovon')
SoumisButton = navigateur.find_element_by_css_selector ('input [type = "soumi"]')
bouton de soumission.Send_keys (clés.ENTRER)

Une fois que vous avez terminé, enregistrez le ex09.py Script python.

Ici le navigateur.obtenir() La méthode ouvre la page des formulaires HTML W3Schools dans le navigateur Web Firefox.

Le navigateur.find_element_by_id () La méthode trouve les champs d'entrée par l'ID fname et nom Et il les stocke dans le fname et nom variables, respectivement.

Le fname.clair() et nom.clair() Méthodes Effacer le prénom par défaut (John) fname Valeur et nom de famille (DOE) nom valeur des champs d'entrée.

Le fname.send_keys () et nom.send_keys () Type de méthodes Shahriar et Bousculade dans le Prénom et Nom de famille champs d'entrée, respectivement.

Le navigateur.find_element_by_css_selector () la méthode sélectionne le Bouton de soumission de la forme et le stocke dans le bouton de soumission variable.

Le bouton de soumission.send_keys () La méthode envoie la touche Entrée Appuyer (Clés.ENTRER) au Bouton de soumission de la forme. Cette action soumet le formulaire.

Courir le ex09.py Script Python, comme suit:

$ python3 ex09.py

Comme vous pouvez le voir, le formulaire a été automatiquement soumis avec les entrées correctes.

Conclusion

Cet article devrait vous aider à démarrer avec le test de navigateur de Selenium, l'automatisation Web et les bibliothèques de mise en ligne dans Python 3. Pour plus d'informations, consultez la documentation officielle de Selenium Python.