Introduction à Selenium en Python 3

Introduction Selenium Python 3



Selenium est un framework utilisé pour tester des applications Web. Selenium automatise un navigateur, tel que Chrome ou Firefox, pour exécuter des tests sur le site Web de votre choix. Selenium est également un outil de grattage Web très puissant. Selenium prend en charge JavaScript et toutes les fonctionnalités de navigateur modernes. Cet outil est très efficace pour extraire des informations de sites Web.

Cet article vous montrera comment configurer Selenium sur votre distribution Linux (c'est-à-dire Ubuntu), ainsi que comment effectuer une automatisation Web de base et un scrapping Web avec la bibliothèque Selenium Python 3.







Conditions préalables

Pour essayer les commandes et les exemples utilisés dans cet article, vous devez disposer des éléments suivants :



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 sur LinuxHint.com . N'oubliez pas de consulter ces articles si vous avez besoin d'aide supplémentaire.





Préparation de l'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 globalement.

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



Vous pouvez installer le Python virtualenv module globalement en utilisant PIP 3, comme suit :

$ sudo pip3 installer virtualenv

PIP3 téléchargera et installera globalement tous les modules requis.

À ce stade, le Python virtualenv le module doit être installé globalement.

Créer le répertoire du projet python-selenium-basic/ dans votre répertoire de travail actuel, comme suit :

$ mkdir -pv python-selenium-basic/drivers

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

$CDpython-selenium-basic/

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

$ virtualenv.env

L'environnement virtuel Python doit maintenant ê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 Python Selenium

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 devrait 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 du pilote Firefox Gecko

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

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

Comme vous pouvez le voir, la v0.26.0 est la dernière version du pilote Firefox Gecko au moment de la rédaction de cet article.

Pour télécharger le pilote Firefox Gecko, faites défiler un peu vers le bas et cliquez sur l'archive Linux geckodriver tar.gz, en fonction de l'architecture de votre système d'exploitation.

Si vous utilisez un système d'exploitation 32 bits, cliquez sur le bouton geckodriver-v0.26.0-linux32.tar.gz relier.

Si vous utilisez un système d'exploitation 64 bits, cliquez sur le bouton geckodriver-v0.26.0-linuxx64.tar.gz relier.

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

Votre navigateur devrait vous inviter à enregistrer l'archive. Sélectionner Enregistrer le fichier puis cliquez d'accord .

L'archive du pilote Firefox Gecko doit être téléchargée dans le ~/Téléchargements annuaire.

Extraire le geckodriver-v0.26.0-linux64.tar.gz archives de la ~/Téléchargements répertoire vers le Conducteurs/ répertoire de votre projet en saisissant la commande suivante :

$le goudron -xzf~/Téléchargements/geckodriver-v0.26.0-linux64.tar.gz-CConducteurs/

Une fois l'archive du pilote Firefox Gecko extraite, un nouveau pilote de gecko 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.

Test du pilote Selenium Firefox Gecko

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

Tout d'abord, ouvrez le répertoire du projet python-selenium-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.

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés
de temps importerdormir
navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')
navigateur.avoir('http://www.google.com')
dormir(5)
navigateur.quitter()

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 Selenium pour utiliser le pilote Firefox Gecko à partir du Conducteurs/ répertoire de votre projet.

Pour tester si le pilote Firefox Gecko fonctionne avec Selenium, exécutez la commande suivante ex01.py Script Python :

$ python3 ex01.py

Le navigateur Web Firefox devrait automatiquement visiter Google.com et se fermer après 5 secondes. Si cela se produit, 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 de Selenium.

Vous devez télécharger la même version du pilote Web Chrome que celle 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 le page officielle de téléchargement du pilote Chrome .

Dans le Versions actuelles 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 Versions actuelles section, faites défiler un peu et vous devriez trouver la version souhaitée.

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

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

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

Vous pouvez extraire le Chromedriver-linux64.zip archives de la ~/Téléchargements répertoire vers le Conducteurs/ répertoire de votre projet avec la commande suivante :

$ décompresser~/Téléchargements/chromedriver_linux64.Zip *: français-d pilotes/

Une fois l'archive Chrome Web Driver extraite, un nouveau Chromedriver 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.

Test du pilote Web Selenium Chrome

Dans cette section, je vais vous montrer comment configurer votre tout premier script Python Selenium 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.

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés
de temps importerdormir
navigateur=pilote Web.Chrome(chemin_exécutable='./drivers/chromedriver')
navigateur.avoir('http://www.google.com')
dormir(5)
navigateur.quitter()

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 Selenium pour utiliser le pilote Web Chrome à partir du Conducteurs/ répertoire de votre projet.

Pour tester si le pilote Web Chrome fonctionne avec Selenium, exécutez le ex02.py Script Python, comme suit :

$ python3 ex01.py

Le navigateur Web Google Chrome devrait se rendre automatiquement sur Google.com et se fermer au bout de 5 secondes. Si cela se produit, le pilote Selenium Firefox Gecko fonctionne correctement.

Principes de base du grattage Web avec Selenium

J'utiliserai désormais le navigateur Web Firefox. Vous pouvez également utiliser Chrome, si vous le souhaitez.

Un script de base Selenium Python devrait ressembler au script montré 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 de sélénium.webdriver.common.keys . Cela vous aidera à envoyer les touches du clavier au navigateur que vous automatisez à partir de Selenium.

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 à l'aide de cet objet.

Pour charger un site Web ou une URL (je chargerai le site Web https://www.duckduckgo.com ), appeler le avoir() méthode de la navigateur objet sur votre navigateur Firefox.

En utilisant Selenium, vous pouvez écrire vos tests, effectuer du web scrapping, et enfin, fermer le navigateur en utilisant le quitter() méthode de la navigateur objet.

Ci-dessus se trouve la disposition de base d'un script Python Selenium. Vous allez écrire 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 Selenium. Dans cet exemple, nous imprimerons le titre de la page Web que nous visiterons.

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

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés

navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')

navigateur.avoir('https://www.duckduckgo.com')
imprimer('Titre : %s'% navigateur.Titre)
navigateur.quitter()

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 au imprimer() 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 de votre choix
3) Récupérer le titre de la page
4) Imprimer 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 tapez les lignes de code suivantes dans le script :

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés

navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')


URL= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
pourURLdansURL :
navigateur.avoir(URL)
imprimer('Titre : %s'% navigateur.Titre)
navigateur.quitter()

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

Ici le URL list conserve l'URL de chaque page Web.

À pour La boucle est utilisée pour parcourir le URL éléments de la liste.

À chaque itération, Selenium indique 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 Selenium peut effectuer la même tâche avec plusieurs pages Web ou sites Web.

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

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

Tout d'abord, visitez le Aléatoire.org lien 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 de Selenium, vous devez également connaître la représentation HTML des données.

Pour voir comment les données de chaîne aléatoires sont représentées en HTML, sélectionnez les données de chaîne aléatoires et appuyez sur le bouton droit de la souris (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 Icône d'inspection ( ) pour inspecter les données de la page.

Cliquez sur l'icône d'inspection ( ) 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 encapsulées dans un code HTML pour tag et contient la classe Les 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 Selenium.

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

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés

navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')

navigateur.avoir('https://www.random.org/strings/?num=1&len=20&digits
=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=nouveau'
)

élément de données=navigateur.find_element_by_css_selector('pré.données')
imprimer(dataElement.texte)
navigateur.quitter()

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

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

Les browser.find_element_by_css_selector() La méthode recherche dans le code HTML de la page un élément spécifique et le renvoie.

Dans ce cas, l'élément serait pré.données , les pour balise qui a le nom de la classe Les données .

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

Le script imprime alors le contenu textuel du pré.données élément.

Si vous exécutez le ex06.py Script Python, il doit 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 lance le ex06.py Script Python, il extrait une donnée de chaîne aléatoire différente de la page Web.

Exemple 4 : Extraction de la liste des données d'une 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 Selenium. Dans cet exemple, je vais vous montrer comment utiliser Selenium pour extraire une liste de données d'une page Web.

Tout d'abord, visitez le générateur-nom-aléatoire.info depuis votre navigateur Web Firefox. Ce site Web générera dix noms aléatoires à chaque fois que vous rechargerez la page, comme vous pouvez le voir dans la capture d'écran ci-dessous. Notre objectif est d'extraire ces noms aléatoires à l'aide de Selenium.

Si vous examinez la liste de noms de plus près, vous pouvez voir qu'il s'agit d'une liste ordonnée ( mourir étiqueter). Les mourir la balise inclut également le nom de la classe liste de nom . Chacun des noms aléatoires est représenté sous la forme d'un élément de liste ( au balise) à l'intérieur du mourir é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.

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés

navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')

navigateur.avoir('http://random-name-generator.info/')

liste de nom=navigateur.find_elements_by_css_selector('ol.nameList li')

pourNomdansliste de nom:
imprimer(Nom.texte)

navigateur.quitter()

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

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

Les browser.find_elements_by_css_selector() la méthode utilise le sélecteur CSS ol.nameList li pour tout trouver au éléments à l'intérieur du mourir balise ayant le nom de la classe liste de nom . J'ai stocké tous les sélectionnés au éléments dans le liste de nom variable.

À pour La boucle est utilisée pour parcourir le liste de nom liste de au éléments. A chaque itération, le contenu du au élément est imprimé sur la console.

Si vous exécutez le ex07.py Script Python, il récupérera tous les noms aléatoires de la page Web et l'imprimera à 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 : Soumission du formulaire – Recherche sur DuckDuckGo

Cet exemple est aussi simple que le premier exemple. Dans cet exemple, je vais visiter le moteur de recherche DuckDuckGo et rechercher le terme QG de sélénium utilisant le sélénium.

Première visite Moteur de recherche DuckDuckGo depuis le navigateur Web Firefox.

Si vous inspectez le champ de saisie de recherche, il devrait avoir l'identifiant 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.

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés
navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')
navigateur.avoir('https://duckduckgo.com/')
rechercheEntrée=navigateur.find_element_by_id('search_form_input_homepage')
rechercheEntrée.envoyer_clés('sélénium qq'+ Clés.ENTRER)

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

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

Les browser.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 rechercheEntrée variable.

Les searchInput.send_keys() méthode est utilisée pour envoyer des données de pression de touche au champ de saisie. Dans cet exemple, il envoie la chaîne QG de sélénium , et la touche Entrée est enfoncée à l'aide du Touches.ENTRÉE constant.

Dès que le moteur de recherche DuckDuckGo reçoit la touche Entrée, appuyez sur ( Touches.ENTRÉE ), il recherche et affiche le résultat.

Exécutez 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é QG de sélénium dans la zone de texte de recherche.

Dès que le navigateur a reçu la touche Entrée, appuyez sur ( Touches.ENTRÉE ), il affiche le résultat de la recherche.

Exemple 6 : Soumettre un formulaire sur W3Schools.com

Dans l'exemple 5, la soumission du formulaire du moteur de recherche 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 gestion de formulaire plus complexe.

Tout d'abord, visitez le Page de formulaires HTML de W3Schools.com depuis le navigateur Web Firefox. Une fois la page chargée, vous devriez voir un exemple de formulaire. C'est le formulaire que nous allons soumettre dans cet exemple.

Si vous examinez le formulaire, le Prénom le champ de saisie doit avoir l'identifiant fnom , les Nom de famille le champ de saisie doit avoir l'identifiant lnom , et le Bouton de soumission devrait avoir le taper nous faire parvenir , 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.

deséléniumimporterWebdriver
desélénium.Webdriver.commun.clés importerClés
navigateur=pilote Web.Firefox(chemin_exécutable='./drivers/geckodriver')
navigateur.avoir('https://www.w3schools.com/html/html_forms.asp')
fnom=navigateur.find_element_by_id('fnom')
fnom.dégager()
fnom.envoyer_clés('Shahriar')
lnom=navigateur.find_element_by_id('lnom')
lnom.dégager()
lnom.envoyer_clés('Shovon')
bouton de soumission=navigateur.find_element_by_css_selector('saisir[type='soumettre']')
bouton de soumission.envoyer_clés(Clés.ENTRER)

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

Ici le navigateur.get() La méthode ouvre la page des formulaires HTML de W3schools dans le navigateur Web Firefox.

Les browser.find_element_by_id() la méthode trouve les champs de saisie par l'identifiant fnom et lnom et il les stocke dans le fnom et lnom variables, respectivement.

Les fname.clear() et lname.clear() les méthodes effacent le prénom par défaut (John) fnom valeur et nom de famille (Doe) lnom valeur des champs de saisie.

Les fname.send_keys() et lname.send_keys() type de méthodes Shahriar et Shovon dans le Prénom et Nom de famille champs de saisie, respectivement.

Les browser.find_element_by_css_selector() méthode sélectionne le Bouton de soumission du formulaire et le stocke dans le bouton de soumission variable.

Les soumettreButton.send_keys() méthode envoie la touche Entrée appuyez sur ( Touches.ENTRÉE ) à la Bouton de soumission de la forme. Cette action envoie le formulaire.

Exécutez 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 les bibliothèques de test de navigateur Selenium, d'automatisation Web et de scrapping Web dans Python 3. Pour plus d'informations, consultez le Documentation officielle Selenium Python .