
Vous avez déjà rêvé de faire exécuter à votre ordinateur des tâches répétitives sur le web à votre place ? Remplir des formulaires, cliquer sur des boutons, récupérer des données sur des dizaines de pages en quelques secondes… C’est exactement ce que permet Selenium avec Python. Véritable couteau suisse de l’automatisation web, cette combinaison est plébiscitée aussi bien par les développeurs que par les testeurs QA et les data analysts.
Selenium est une librairie open source qui permet de piloter un navigateur web (Chrome, Firefox, Edge…) depuis un script Python. Contrairement aux outils d’analyse HTML statique, Selenium interagit réellement avec la page comme le ferait un utilisateur humain : il clique, scrolle, tape du texte et attend le chargement du JavaScript. C’est ce qui le rend indispensable pour les sites modernes construits avec React, Angular ou Vue.js.
Dans ce guide complet, vous allez découvrir comment installer et configurer Selenium avec Python, piloter votre premier navigateur, localiser des éléments sur une page, automatiser des interactions, et même aller plus loin avec les tests automatisés. Que vous soyez débutant ou développeur intermédiaire, vous trouverez ici tout ce qu’il faut pour démarrer efficacement.
Sommaire
- Qu’est-ce que Selenium et pourquoi l’utiliser avec Python ?
- Installation de Selenium avec Python
- Votre premier script Selenium avec Python
- Localiser des éléments sur la page
- Interagir avec les éléments web
- Exemple concret : scraper une liste de produits
- Selenium pour les tests automatisés
- Bonnes pratiques et conseils pour aller plus loin
- Questions fréquentes
- Récapitulatif : ce qu’il faut retenir
Qu’est-ce que Selenium et pourquoi l’utiliser avec Python ?
Selenium est un projet open source initialement conçu pour l’automatisation des tests fonctionnels de navigateurs web. Il permet de simuler les interactions d’un utilisateur réel avec une interface web : navigation, clics, saisie de texte, soumission de formulaires, capture d’écran, etc. Il supporte plusieurs langages de programmation, mais Python est de loin le plus utilisé grâce à sa syntaxe claire et à la richesse de son écosystème.
Les cas d’usage sont nombreux :
- Tests automatisés (QA) : valider que les fonctionnalités d’un site web fonctionnent correctement après chaque déploiement.
- Web scraping de pages dynamiques : extraire des données depuis des sites qui chargent leur contenu via JavaScript.
- Automatisation de tâches répétitives : remplir des formulaires, télécharger des fichiers, générer des rapports.
- Surveillance de sites : vérifier régulièrement la disponibilité ou le contenu d’une page.
Le saviez-vous ? Selon JetBrains, Python est l’un des langages de programmation les plus populaires au monde, notamment pour l’automatisation et la data science — ce qui explique pourquoi la combinaison Python + Selenium est devenue un standard de l’industrie pour les équipes de développement et de test.
Installation de Selenium avec Python
Prérequis
Avant de commencer, assurez-vous d’avoir :
- Python installé sur votre machine (version 3.7 ou supérieure recommandée)
- pip, le gestionnaire de paquets Python
- Un navigateur web (Google Chrome ou Firefox de préférence)
Installer la librairie Selenium
L’installation se fait en une seule commande depuis votre terminal ou invite de commandes :
pip install selenium
Pour une meilleure gestion des dépendances, il est fortement recommandé de travailler dans un environnement virtuel :
python -m venv mon_projet
source mon_projet/bin/activate # Linux/macOS
mon_projet\Scripts\activate # Windows
pip install selenium
Installer le WebDriver correspondant à votre navigateur
Selenium ne pilote pas le navigateur directement : il passe par un WebDriver, un exécutable qui fait le lien entre votre script et le navigateur. Depuis Selenium 4, le gestionnaire de drivers est intégré et peut être géré automatiquement :
pip install webdriver-manager
Cette librairie télécharge et gère automatiquement la bonne version du driver en fonction de votre navigateur installé, ce qui vous évite les problèmes de compatibilité de version — un problème classique pour les débutants.
Votre premier script Selenium avec Python
Ouvrir un navigateur et naviguer vers une URL
Voici le script le plus simple possible pour ouvrir Chrome et naviguer vers un site :
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# Initialiser le driver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# Naviguer vers une URL
driver.get("https://www.example.com")
# Afficher le titre de la page
print(driver.title)
# Fermer le navigateur
driver.quit()
En exécutant ce script, Chrome s’ouvre automatiquement, charge la page example.com, puis le titre est affiché dans la console avant que le navigateur se ferme.
Utiliser le mode headless pour ne pas afficher le navigateur
En production ou sur un serveur sans interface graphique, on préfère lancer le navigateur en mode headless (sans fenêtre visible) :
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = Options()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get("https://www.example.com")
print(driver.title)
driver.quit()
Localiser des éléments sur la page
L’une des opérations les plus fondamentales avec Selenium est de localiser un élément HTML pour interagir avec lui. Selenium propose plusieurs stratégies via la classe By :
By.ID— localise un élément par son attributidBy.NAME— par l’attributnameBy.CLASS_NAME— par la classe CSSBy.TAG_NAME— par la balise HTML (ex:h1,a)By.CSS_SELECTOR— par un sélecteur CSS (le plus flexible)By.XPATH— par une expression XPath (le plus puissant)By.LINK_TEXT— par le texte visible d’un lien
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.google.com")
# Localiser le champ de recherche par son nom
champ_recherche = driver.find_element(By.NAME, "q")
champ_recherche.send_keys("Selenium Python")
champ_recherche.submit()
print(driver.title)
driver.quit()
Interagir avec les éléments web
Cliquer, taper du texte et soumettre des formulaires
Une fois un élément localisé, vous pouvez effectuer diverses actions :
element.click()— simule un clicelement.send_keys("texte")— simule la frappe au clavierelement.clear()— vide le contenu d’un champelement.submit()— soumet un formulaireelement.text— récupère le texte visible de l’élémentelement.get_attribute("href")— récupère la valeur d’un attribut HTML
Gérer les attentes avec WebDriverWait
Un problème fréquent est d’essayer d’interagir avec un élément qui n’est pas encore chargé. L’utilisation de time.sleep() fixes est à éviter : elle ralentit inutilement votre script. Préférez les attentes explicites avec WebDriverWait :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# Attendre jusqu'à 10 secondes que l'élément soit cliquable
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "mon-bouton"))
)
element.click()
Cette approche est bien plus robuste et rend vos scripts résistants aux variations de vitesse de chargement.
Exemple concret : scraper une liste de produits
Imaginons que vous souhaitiez extraire les titres et prix de produits sur un site e-commerce fictif. Voici un exemple type de script Selenium pour ce cas :
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://books.toscrape.com/")
livres = driver.find_elements(By.CSS_SELECTOR, "article.product_pod")
for livre in livres:
titre = livre.find_element(By.TAG_NAME, "h3").text
prix = livre.find_element(By.CLASS_NAME, "price_color").text
print(f"{titre} — {prix}")
driver.quit()
Ce script se connecte à books.toscrape.com, un site de démonstration légal conçu exprès pour pratiquer le scraping, et liste tous les livres avec leurs prix. C’est un excellent terrain d’entraînement avant de passer à des projets réels.
Pour aller plus loin sur les techniques de collecte de données web, vous pouvez consulter notre guide dédié au web scraping en Python, qui couvre également d’autres outils complémentaires à Selenium.
Selenium pour les tests automatisés
L’usage originel de Selenium reste les tests fonctionnels bout en bout (end-to-end). Combiné avec un framework de test comme pytest, il devient un outil de test extrêmement puissant :
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
@pytest.fixture
def driver():
d = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
yield d
d.quit()
def test_titre_page_accueil(driver):
driver.get("https://www.example.com")
assert "Example" in driver.title
def test_lien_present(driver):
driver.get("https://www.example.com")
lien = driver.find_element(By.LINK_TEXT, "More information...")
assert lien is not None
Cette approche est directement liée aux pratiques de test d’acceptation utilisateur (UAT), qui visent à s’assurer que le logiciel répond bien aux besoins réels des utilisateurs finaux. Pour comprendre ces méthodes de validation, notre article sur l’user acceptance testing vous apportera un éclairage complémentaire très utile.
Bonnes pratiques et conseils pour aller plus loin
Structurer son projet proprement
- Utilisez le Page Object Model (POM) : une classe par page web, avec ses méthodes d’interaction. Cela rend le code maintenable et réutilisable.
- Centralisez la configuration du driver dans un fichier dédié ou une fixture pytest.
- Stockez vos sélecteurs CSS/XPath dans des constantes nommées, jamais en dur dans le code.
Gérer les erreurs et les cas limites
- Utilisez des blocs
try/exceptpour gérer lesNoSuchElementExceptionet lesTimeoutException. - Activez les logs Selenium pour diagnostiquer les problèmes.
- Faites des captures d’écran automatiques en cas d’erreur :
driver.save_screenshot("erreur.png").
Alternatives et compléments à Selenium
Selenium n’est pas toujours le bon outil. Pour les sites purement statiques (sans JavaScript), Requests + BeautifulSoup est bien plus rapide et léger. Pour une automatisation plus moderne avec une API plus fluide, Playwright (également disponible en Python) est une excellente alternative plus récente à Selenium, avec une meilleure gestion des attentes asynchrones.
Questions fréquentes
- Quelle est la différence entre Selenium et BeautifulSoup ?
-
BeautifulSoup est une librairie d’analyse HTML statique : elle lit le code source d’une page sans exécuter le JavaScript. Selenium, lui, pilote un vrai navigateur et peut interagir avec des pages dynamiques, cliquer sur des boutons, remplir des formulaires et attendre le chargement du JavaScript.
- Selenium avec Python est-il légal pour le web scraping ?
-
L’utilisation de Selenium est légale pour automatiser vos propres applications ou tester vos sites. Pour le scraping de sites tiers, il faut vérifier les conditions d’utilisation du site, le fichier robots.txt et la réglementation en vigueur (RGPD en Europe). Ne récoltez jamais de données personnelles sans consentement.
- Comment éviter d’être détecté par les sites web lors de l’utilisation de Selenium ?
-
Plusieurs techniques existent : utiliser le mode headless avec des options réalistes (user-agent, résolution d’écran), ajouter des délais aléatoires entre les actions avec time.sleep(), désactiver les flags qui signalent l’automatisation via les options ChromeDriver, ou encore utiliser undetected-chromedriver, un fork spécialement conçu pour éviter la détection.
Récapitulatif : ce qu’il faut retenir
- Selenium + Python est le duo de référence pour l’automatisation de navigateurs web.
- L’installation nécessite la librairie
seleniumet un WebDriver (géré automatiquement viawebdriver-manager). - Utilisez toujours les attentes explicites (WebDriverWait) plutôt que
time.sleep(). - Le mode headless est indispensable pour les environnements serveur.
- Pour les tests, combinez Selenium avec pytest et adoptez le pattern Page Object Model.
- Vérifiez toujours la légalité du scraping avant de cibler un site tiers.
Selenium avec Python est une compétence qui ouvre des portes considérables : automatisation de workflows, tests de qualité, collecte de données, surveillance de sites… Les applications sont quasi illimitées. Le meilleur moyen d’apprendre reste la pratique : commencez par automatiser une tâche simple de votre quotidien numérique, et montez progressivement en complexité. Vous verrez rapidement à quel point cet outil peut vous faire gagner un temps précieux.
Prêt à automatiser le web ? Installez Selenium dès maintenant, ouvrez votre éditeur favori et écrivez votre premier script. La courbe d’apprentissage est douce et les résultats sont visibles immédiatement — de quoi rester motivé !