Latenode

Navigateur headless Python : les meilleures bibliothèques pour l’automatisation

Découvrez les meilleures bibliothèques Python pour l’automatisation avec un navigateur headless et comparez leurs atouts pour le web scraping, les tests et l’efficacité des ressources.

13 min de lecture
Illustration de bibliothèques Python pour automatiser un navigateur headless

Les navigateurs headless permettent d’automatiser des tâches web sans afficher de fenêtre de navigateur visible. Ils sont plus rapides, consomment moins de ressources et sont parfaits pour le web scraping, les tests, et bien plus encore. Python propose plusieurs bibliothèques d’automatisation des navigateurs headless, chacune avec ses propres atouts :

  • Selenium (2004) : fonctionne avec plusieurs navigateurs, dispose d’un écosystème mature et convient parfaitement aux systèmes existants.
  • Playwright (2020) : moderne, avec prise en charge de l’asynchrone, rapide et idéal pour les applications web modernes.
  • Pyppeteer (2017) : léger, uniquement compatible avec Chromium, idéal pour les scripts rapides.
  • Requests-HTML : simple, rapide et particulièrement adapté au scraping de contenu statique.

Comparaison rapide

FonctionnalitéSeleniumPlaywrightPyppeteerRequests-HTML
Navigateurs pris en chargeChrome, Firefox, IEChrome, Firefox, WebKitChromium uniquementChromium (pour JS)
Prise en charge de l’asynchroneNonOuiOuiNon
Consommation de ressourcesÉlevéeMoyenneMoyenneFaible
Idéal pourSystèmes existantsApplications web modernesScripts rapidesContenu statique

Si vous avez besoin d’une large prise en charge des navigateurs, choisissez Selenium. Pour les applications modernes et de meilleures performances, Playwright est un meilleur choix. Pyppeteer est idéal pour les tâches rapides, tandis que Requests-HTML excelle dans le scraping statique léger. Choisissez la bibliothèque adaptée aux besoins de votre projet.

Qu’est-ce qu’un navigateur headless ? Comment exécuter Headless Chrome ?

1. Selenium

Selenium, lancé pour la première fois en 2004[2], est un outil bien établi d’automatisation des navigateurs, offrant une prise en charge de plusieurs navigateurs et des fonctionnalités avancées d’automatisation.

Installation et configuration

Pour commencer, installez Selenium avec pip :

pip install selenium

Pour configurer un navigateur Chrome headless :

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)

Prise en charge des navigateurs et fonctionnalités

Selenium 4 et les versions ultérieures intègrent la gestion automatique de WebDriver ainsi que la compatibilité avec le protocole WebDriver et le Chrome DevTools Protocol (CDP). Il prend en charge trois navigateurs majeurs en mode headless, chacun avec ses points forts :

NavigateurPoints fortsCas d’utilisation idéal
ChromeExécution rapide, outils de développementAutomatisation générale, web scraping
FirefoxProtection de la vie privée, rendu fiableTâches axées sur la sécurité
EdgeIntégration Windows, base ChromiumAutomatisation spécifique à Windows

Optimisation des performances

Pour améliorer les performances de Selenium, envisagez les stratégies suivantes :

  • Gestion des ressources
    Désactivez les ressources inutiles (comme les images), configurez des délais d’expiration de chargement des pages et utilisez des attentes dynamiques afin de réduire les délais.

  • Localisation efficace des éléments
    Utilisez des méthodes précises pour localiser les éléments et accélérer les interactions :

    element = driver.find_element(By.ID, "search-input")
    
  • Gestion des instances de navigateur
    Gérez soigneusement les instances de navigateur afin d’éviter une consommation excessive de ressources :

    driver.set_page_load_timeout(30)
    driver.quit()  # Clean up resources
    

Fonctionnalités avancées

Selenium offre plusieurs capacités avancées :

  • Contournement de la détection anti-bot à l’aide d’outils comme Undetected ChromeDriver
  • Tests multi-navigateurs
  • Contrôle réseau pour une automatisation plus approfondie
  • Exécution de JavaScript pour des interactions personnalisées

Bien que Selenium puisse nécessiter davantage de configuration que des outils comme Playwright, sa vaste prise en charge des navigateurs et sa compatibilité avec les systèmes plus anciens, y compris Internet Explorer, en font un choix solide pour les projets d’automatisation complexes. Son écosystème mature garantit une grande fiabilité pour de nombreux cas d’usage.

2. Playwright

Playwright, développé par Microsoft, offre une manière rapide et fiable d’automatiser les navigateurs headless grâce à une communication directe avec le protocole Chrome DevTools.

Installation et configuration

Pour commencer avec Playwright, installez-le avec pip et configurez les binaires de navigateur requis :

pip install playwright
playwright install  # Installs browser binaries

Voici un exemple de script basique :

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    # Add your automation tasks here
    browser.close()

Une fois installé, vous pouvez explorer les capacités et les performances de Playwright.

Performances et fonctionnalités

Playwright se distingue grâce à une communication efficace basée sur WebSocket, contrairement aux méthodes traditionnelles de Selenium. Lors des tests de performance, Playwright a réalisé 100 itérations en 290,37 ms, contre 536,34 ms pour Selenium [1].

Parmi ses fonctionnalités clés :

  • Attente automatique : attend automatiquement que les éléments soient prêts, réduisant le besoin de délais d’expiration manuels.
  • Enregistrement vidéo : prise en charge intégrée de l’enregistrement des sessions de débogage.
  • Prise en charge multi-navigateurs : fonctionne avec Chromium, Firefox et WebKit.
  • Contextes de navigateur isolés : assure l’isolation des tests en séparant les sessions de navigateur.

Comparaison de la prise en charge des navigateurs

Voici un aperçu rapide de la prise en charge du mode headless par les navigateurs dans Playwright :

NavigateurMode headless
ChromiumActivé par défaut
FirefoxPris en charge
WebKitPris en charge

Bonnes pratiques

Pour tirer le meilleur parti de Playwright, suivez ces conseils :

  • Exploitez l’attente intégrée

Au lieu de coder des délais fixes, utilisez l’attente automatique de Playwright :

# Avoid time.sleep()
page.wait_for_selector('#element')
  • Utilisez les contextes de navigateur

Les contextes de navigateur fournissent un environnement vierge pour chaque test :

context = browser.new_context()
page = context.new_page()
# Perform tasks within this context
context.close()

La bonne gestion des instances de navigateur est particulièrement importante dans les environnements multithreads.

Considérations sur le multithreading

L’API de Playwright n’étant pas thread-safe, vous aurez besoin d’une instance distincte par thread [3] :

def thread_function():
    with sync_playwright() as p:
        browser = p.chromium.launch()
        # Perform thread-specific tasks
        browser.close()

Playwright est parfaitement adapté aux projets modernes d’automatisation web. Ses outils de débogage et son générateur de code peuvent faire gagner du temps aux développeurs par rapport aux frameworks plus anciens. Bien que la taille de sa communauté (116 000 dépôts GitHub) soit inférieure à celle de Selenium (283 000 dépôts) [1], sa croissance rapide et le soutien de Microsoft indiquent un avenir prometteur.

sbb-itb-23997f1

3. Pyppeteer

Pyppeteer est un portage Python non officiel de Puppeteer, conçu pour automatiser les navigateurs basés sur Chromium. Malgré sa petite taille, il offre des outils puissants pour l’automatisation web.

Installation et configuration de base

Pour utiliser Pyppeteer, vous aurez besoin de Python 3.6 ou d’une version ultérieure. Installez-le avec pip à l’aide des commandes suivantes :

pip install pyppeteer
pyppeteer-install  # Downloads Chromium (~150MB)

Voici un script simple qui illustre ses fonctionnalités asynchrones :

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://example.com')
    await page.screenshot({'path': 'screenshot.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Aperçu des performances

Les tests indiquent que Pyppeteer s’exécute environ 30 % plus rapidement que Playwright pour les scripts courts [5]. Sa conception asynchrone le rend également efficace pour gérer plusieurs tâches simultanément.

Fonctionnalités clés et limites

FonctionnalitéDétails
Navigateurs pris en chargeChromium uniquement
Prise en charge de l’asynchroneIntégrée
Rendu JavaScriptEntièrement pris en charge
Utilisation de la mémoireInférieure à celle de Selenium
Taille d’installationCompacte (~150 Mo avec Chromium)
Tests multi-navigateursNon pris en charge

Conseils d’optimisation des performances

Pour améliorer les performances de Pyppeteer, réutilisez la même instance de navigateur pour plusieurs tâches au lieu d’ouvrir de nouvelles instances :

browser = await launch()

for task in tasks:
    page = await browser.newPage()
    # Perform operations
    await page.close()
await browser.close()

Cette approche peut réduire la surcharge et accélérer vos scripts.

Gestion des erreurs

L’un des problèmes fréquents est l’erreur « Browser Closed Unexpectedly », souvent causée par des dépendances Chromium manquantes [4]. L’exécution de pyppeteer-install garantit que tous les composants nécessaires sont installés.

« Pyppeteer est un outil permettant d’automatiser un navigateur Chromium avec du code. Il permet aux développeurs Python de bénéficier de capacités de rendu JavaScript afin d’interagir avec des sites web modernes et de mieux simuler le comportement humain. » - ZenRows [4]

Comme il prend uniquement en charge Chromium, Pyppeteer convient particulièrement aux projets de web scraping et d’automatisation axés sur Chrome. C’est un excellent choix si les tests multi-navigateurs ne sont pas prioritaires.

4. Requests-HTML

Requests-HTML est un outil léger de web scraping qui combine la simplicité de Requests avec de puissantes capacités d’analyse HTML. Il est particulièrement rapide et efficace pour travailler avec du contenu statique.

Installation et configuration

Pour utiliser Requests-HTML, assurez-vous de disposer de Python 3.6 ou d’une version ultérieure. Installez-le avec :

pip install requests-html

Si vous activez le rendu JavaScript pour la première fois, la bibliothèque téléchargera automatiquement Chromium (150 Mo) dans votre répertoire personnel (`/.pyppeteer/`).

Benchmarks de performance

Requests-HTML surpasse les outils basés sur des navigateurs comme Selenium en matière de vitesse. Voici une comparaison issue de tests récents [6] :

Type d’opérationRequests-HTMLSelenium
Requêtes API0,11 s ± 0,01 s5,16 s ± 0,04 s
Extraction de texte0,28 s ± 0,01 s5,32 s ± 0,09 s

Ces données montrent que Requests-HTML excelle pour les tâches nécessitant des réponses rapides.

Fonctionnalités et capacités clés

Voici un exemple rapide d’utilisation de Requests-HTML :

from requests_html import HTMLSession

session = HTMLSession()
r = session.get('https://example.com')

r.html.links           # Extract all links
r.html.absolute_links  # Extract absolute URLs

# Enable JavaScript rendering
r.html.render()        

Parmi ses fonctionnalités remarquables :

  • Sélecteurs CSS (similaires à jQuery)
  • Prise en charge de XPath
  • Gestion automatique des redirections
  • Pooling de connexions
  • Persistance des cookies
  • Chaînes user-agent simulées pour plus de flexibilité

Conseils d’optimisation des performances

Pour obtenir les meilleures performances :

  • Limitez le rendu JavaScript afin de réduire la surcharge liée à Chromium.
  • Réutilisez les objets de session pour plusieurs requêtes.
  • Préférez les sélecteurs CSS à XPath pour des requêtes plus simples et rapides.

Limites et cas d’utilisation

AspectDétails
Prise en charge de JavaScriptDisponible, mais doit être activée explicitement
Utilisation de la mémoireFaible pour le contenu statique ; plus élevée avec le rendu JS
AuthentificationNécessite une configuration manuelle
Gestion des CAPTCHAFonctionnalités limitées

« Utilisez requests si vous avez besoin d’un moyen rapide, léger et fiable de récupérer du contenu web statique ou des données d’API. » - Joseph McGuire [6]

Requests-HTML est idéal pour les tâches où la vitesse et l’efficacité des ressources sont essentielles. Par exemple, le scraping de pages web statiques ne prend que quelques millisecondes, contre plusieurs secondes avec des outils comme Selenium [6].

Optimisation des ressources

Requests-HTML minimise l’utilisation de la bande passante en ne chargeant que les ressources que vous demandez. Cela peut réduire considérablement les coûts de proxy pour les projets reposant sur des modèles de tarification basés sur la bande passante [7]. Sa conception efficace accélère non seulement l’exécution, mais réduit également la consommation de ressources.

Pour les projets axés sur le contenu statique, Requests-HTML offre une solution légère et efficace par rapport aux outils plus lourds d’automatisation des navigateurs. Il représente donc un choix solide lorsque la rapidité et les économies de ressources sont prioritaires.

Tableau comparatif des bibliothèques

Voici une comparaison détaillée des bibliothèques Python de navigateurs headless selon leurs fonctionnalités, leurs performances et leur efficacité en ressources.

Fonctionnalités et capacités principales

FonctionnalitéSeleniumPlaywrightPyppeteerRequests-HTML
Navigateurs pris en chargeChrome, Firefox, Safari, IEChrome, Firefox, WebKitChromium uniquementChromium (pour JS)
Prise en charge de JavaScriptComplèteComplèteComplèteLimitée
Prise en charge de l’asynchroneNonOuiOuiNon
Complexité d’installationÉlevée (WebDriver requis)MoyenneMoyenneFaible
Consommation de ressourcesÉlevéeMoyenneMoyenneFaible
Taille de la communauté283 000+ dépôts116 000+ dépôtsModéréePetite

Ces fonctionnalités offrent un aperçu des forces et des limites de chaque bibliothèque, préparant le terrain pour une analyse plus approfondie.

Benchmarks de performance

Les tests de benchmark mettent en évidence des différences de performances importantes [1][5] :

OpérationPlaywrightSeleniumPyppeteer
Temps d’exécution290,37 ms536,34 ms~203 ms
Intensité des ressourcesMoyenneÉlevéeMoyenne
Utilisation de la mémoireModéréeÉlevéeModérée

Playwright et Pyppeteer affichent des temps d’exécution plus rapides que Selenium, Pyppeteer étant en tête pour les performances des scripts courts.

Fonctionnalités de développement et de débogage

Les outils de débogage et l’assistance au développement varient fortement entre ces bibliothèques :

FonctionnalitéSeleniumPlaywrightPyppeteerRequests-HTML
Outils de débogageBasiquesAvancésBasiquesLimités
Fonctionnalités d’attente automatiqueManuellesIntégréesBasiquesN/A
Prise en charge multiplateformeOuiOuiLimitéeOui
Support techniqueCommunautéDocumentation + communautéLimitéBasique

Playwright se démarque par ses outils de débogage avancés et ses fonctionnalités d’attente automatique intégrées, ce qui le rend idéal pour les projets complexes.

Optimisation selon le cas d’utilisation

Différentes bibliothèques excellent dans des contextes spécifiques :

Cas d’utilisationBibliothèque recommandéePourquoi
Systèmes existantsSeleniumLarge compatibilité avec les navigateurs
Applications web modernesPlaywrightPrise en charge asynchrone et exécution plus rapide
Contenu statiqueRequests-HTMLLéger et efficace
Scripts rapidesPyppeteerExécution rapide et fonctionnalités équilibrées

Chaque bibliothèque possède son propre domaine d’excellence, selon les exigences du projet.

Efficacité des ressources

La consommation de ressources varie considérablement selon les bibliothèques :

BibliothèqueUtilisation du CPUEmpreinte mémoireEfficacité de la bande passante
SeleniumÉlevéeÉlevéeModérée
PlaywrightMoyenneMoyenneÉlevée
PyppeteerMoyenneMoyenneÉlevée
Requests-HTMLFaibleFaibleTrès élevée

Pour le contenu statique, Requests-HTML est la solution la plus efficace, tandis que Playwright équilibre performances et consommation de ressources pour les applications dynamiques.

Pyppeteer dépasse Playwright pour l’exécution de scripts courts, avec une vitesse près de 30 % supérieure [5]. Toutefois, la compatibilité plus large de Playwright avec les navigateurs et ses outils de débogage avancés en font un meilleur choix pour les tâches plus exigeantes, à l’échelle de l’entreprise.

Quelle bibliothèque devez-vous choisir ?

Le choix de la bonne bibliothèque de navigateur headless dépend de vos besoins spécifiques en automatisation et de votre configuration technique. D’après les comparaisons ci-dessus, voici comment prendre votre décision.

Si vous travaillez avec des applications web modernes, Playwright est un choix solide. Il a surpassé Selenium dans les benchmarks, accomplissant les tâches en seulement 290,37 millisecondes contre 536,34 millisecondes pour Selenium[1]. Sa prise en charge asynchrone et ses outils de débogage avancés le rendent particulièrement adapté à la gestion de tâches d’automatisation complexes.

Pour les systèmes d’entreprise ou existants, Selenium est une option fiable. Avec plus de 283 000 dépôts GitHub qui lui sont dédiés[1], Selenium propose de nombreuses ressources communautaires, une compatibilité avec des navigateurs plus anciens comme Internet Explorer et l’automatisation sur de vrais appareils.

Pour les environnements aux ressources limitées, voici un guide rapide :

Type d’environnementBibliothèque recommandéeAvantage principal
Contenu statiqueRequests-HTMLFaible consommation de ressources
Contenu dynamiquePyppeteerLéger avec des opérations asynchrones

Dans les configurations d’intégration continue (CI), Playwright excelle. Il s’intègre facilement à des plateformes comme GitHub Actions[8], prend en charge les tests parallèles et contribue à réduire les tests instables, ce qui en fait un excellent choix pour les pipelines CI/CD.

En définitive, votre choix doit se concentrer sur vos objectifs d’automatisation. Playwright est excellent pour l’automatisation web moderne, tandis que Selenium offre une prise en charge plus large des navigateurs et des options de test sur appareils réels[1].

References

FAQ

Frequently Asked Questions

Un navigateur headless Python exécute des interactions web automatisées sans afficher d’interface graphique, ce qui accélère le scraping, les tests et l’automatisation de formulaires tout en consommant moins de ressources.

Cela vous a aidé ? Partagez-le →

Écrit par

Vasiliy Datsenko

Responsable du support client

Vasiliy Datsenko est responsable du support client chez Latenode et un rédacteur en automatisation axé sur les produits. Son travail relie les conversations clients, la recherche sur l'automatisation des flux de travail, les cas d'utilisation de l'IA et la formation pratique sur les produits pour les équipes cherchant à automatiser des processus métier réels.

Profil de l'auteur →

Vérifié par

Oleg Zankov

PDG de Latenode, expert en no-code

Avec une philosophie ancrée dans l'innovation, la résolution de problèmes et l'expérience utilisateur, je me consacre à donner aux équipes les moyens de créer des intégrations sur mesure et d'automatiser les workflows avec facilité et efficacité. Fort d'une riche expérience en développement commercial, entrepreneurship technologique et développement logiciel, j'ai reconnu le besoin d'une solution d'intégration plus accessible, évolutive et adaptable. Ainsi est né Latenode.com. Grâce à notre plateforme, les entreprises peuvent exploiter la puissance de la technologie sans nécessiter de compétences approfondies en codage. Passionné par la création d'un avenir où la technologie nous sert, et non l'inverse, ma mission est de simplifier les processus complexes. Je crois en la démocratisation de la technologie et en dotant les équipes des outils nécessaires pour innover, croître et réussir dans un monde de plus en plus numérique.

Profil de l'auteur →

Continuer la lecture