Navigateur Python Headless : les meilleures bibliothèques pour l'automatisation
Explorez les meilleures bibliothèques Python pour l'automatisation des navigateurs sans interface graphique, en comparant leurs points forts en matière de web scraping, de tests et d'efficacité des ressources.

Les navigateurs headless vous permettent d'automatiser les tâches Web sans afficher de fenêtre de navigateur visible. Ils sont plus rapides, utilisent moins de ressources et sont parfaits pour le scraping Web, les tests, etc. Python propose plusieurs bibliothèques pour l'automatisation des navigateurs headless, chacune avec des atouts uniques :
- Sélénium (2004) : Fonctionne avec plusieurs navigateurs, écosystème mature, idéal pour les systèmes hérités.
- Dramaturge (2020) : Support moderne, asynchrone, rapide et idéal pour les applications Web modernes.
- Fantomime (2017) : Léger, Chromium-uniquement, idéal pour les scripts rapides.
- Requêtes-HTML:Simple, rapide et idéal pour le scraping de contenu statique.
Comparaison rapide
| Fonctionnalité | Sélénium | Dramaturge | Fantomime | Requêtes-HTML |
|---|---|---|---|---|
| Support du navigateur | Chrome, Firefox, IE | Chrome, Firefox, WebKit | Chrome uniquement | Chrome (pour JS) |
| Prise en charge asynchrone | Non | Oui | Oui | Non |
| L'utilisation des ressources | Élevée | Moyenne | Moyenne | Faible |
| Idéal pour | Systèmes | Applications Web modernes | Scripts rapides | Contenu statique |
Si vous avez besoin d'une prise en charge étendue du navigateur, optez pour Selenium. Pour des 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 celui qui correspond aux besoins de votre projet.
Qu'est-ce qu'un navigateur headless ? Comment exécuter Headless Chrome ?
1. Sélénium
Sélénium, introduit pour la première fois en 2004[2], est un outil bien établi pour l'automatisation du navigateur, offrant une prise en charge sur plusieurs navigateurs et des fonctionnalités d'automatisation avancées.
Installation et configuration
Pour commencer, installez Selenium en utilisant pip :
pip install selenium
Pour configurer un navigateur Chrome sans tête :
<span class="hljs-keyword">from</span> selenium <span class="hljs-keyword">import</span> webdriver
<span class="hljs-keyword">from</span> selenium.webdriver.common.by <span class="hljs-keyword">import</span> By
options = webdriver.ChromeOptions()
options.add_argument(<span class="hljs-string">"--headless=new"</span>)
driver = webdriver.Chrome(options=options)
Prise en charge et fonctionnalités du navigateur
Selenium 4 et les versions plus récentes apportent une gestion automatique de WebDriver et une compatibilité avec le protocole WebDriver et Protocole Chrome DevTools (CDP). Il prend en charge trois principaux navigateurs en mode headless, chacun avec ses points forts :
| Navigateur | Temps forts | Meilleur cas d'utilisation |
|---|---|---|
| Chrome | Exécution rapide, outils de développement | Automatisation générale, scraping Web |
| Firefox | Confidentialité renforcée, rendu fiable | Tâches axées sur la sécurité |
| Intégration Windows, base Chromium | Automatisation spécifique à Windows |
Optimisation des performances
Pour améliorer les performances de Selenium, envisagez ces stratégies :
Gestion des ressources
Désactivez les ressources inutiles (comme les images), définissez des délais de chargement de page et utilisez des attentes dynamiques pour réduire les délais.Emplacement efficace des éléments
Utilisez des méthodes précises pour localiser les éléments pour une interaction plus rapide :element = driver.find_element(By.ID, <span class="hljs-string">"search-input"</span>)Gestion des instances du navigateur
Gérez soigneusement les instances du navigateur pour éviter l’épuisement des ressources :driver.set_page_load_timeout(<span class="hljs-number">30</span>) driver.quit() <span class="hljs-comment"># Clean up resources</span>
Fonctionnalités avancées
Selenium offre plusieurs fonctionnalités avancées :
- Contourner la détection anti-bot à l'aide d'outils comme Undetected ChromeDriver
- Tests multi-navigateurs
- Contrôle du réseau pour une automatisation plus poussée
- Exécution JavaScript pour les interactions personnalisées
Bien que Selenium puisse nécessiter plus de configuration que des outils comme Playwright, sa prise en charge étendue des navigateurs et sa compatibilité avec les systèmes plus anciens, notamment Internet Explorer, en font un choix solide pour les projets d'automatisation complexes. Son écosystème mature garantit la fiabilité pour un large éventail de cas d'utilisation.
2. Dramaturge
Playwright, développé par Microsoft, fournit un moyen rapide et fiable d'automatiser les navigateurs sans tête en communiquant directement avec le protocole Chrome DevTools.
Installation et configuration
Pour commencer à utiliser Playwright, installez-le à l'aide de pip et configurez les binaires de navigateur requis :
pip install playwright
playwright install <span class="hljs-comment"># Installs browser binaries</span>
Voici un exemple de script de base :
<span class="hljs-keyword">from</span> playwright.sync_api <span class="hljs-keyword">import</span> sync_playwright
<span class="hljs-keyword">with</span> sync_playwright() <span class="hljs-keyword">as</span> p:
browser = p.chromium.launch()
page = browser.new_page()
<span class="hljs-comment"># Add your automation tasks here</span>
browser.close()
Une fois installé, vous pouvez explorer les capacités et les performances de Playwright.
Performances et fonctionnalités
Playwright se distingue par son efficacité en matière de communication 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].
Certaines fonctionnalités clés incluent:
- Attente automatique: Attend automatiquement que les éléments soient prêts, réduisant ainsi le besoin de délais d'attente manuels.
- Enregistrement video:Prise en charge intégrée de l'enregistrement des sessions de débogage.
- Prise en charge de plusieurs navigateurs:Fonctionne avec Chromium, Firefox et WebKit.
- Contextes de navigateur isolés: Assure l'isolement des tests en séparant les sessions du navigateur.
Comparaison de la prise en charge des navigateurs
Voici un aperçu rapide de la prise en charge du mode sans tête dans les navigateurs dans Playwright :
| Navigateur | Mode sans tête |
|---|---|
| Chromium | Activé par défaut |
| Firefox | Appareils |
| WebKit | Appareils |
Pratiques d'excellence
Pour tirer le meilleur parti de Playwright, suivez ces conseils :
- Tirer parti de l'attente intégrée
Au lieu de coder en dur les délais, utilisez l'attente automatique de Playwright :
<span class="hljs-comment"># Avoid time.sleep()</span>
page.wait_for_selector(<span class="hljs-string">'#element'</span>)
- Utiliser les contextes du navigateur
Les contextes du navigateur fournissent une table rase pour chaque test :
context = browser.new_context()
page = context.new_page()
<span class="hljs-comment"># Perform tasks within this context</span>
context.close()
La gestion appropriée des instances de navigateur est particulièrement importante dans les environnements avec plusieurs threads.
Considérations sur le filetage
Étant donné que l'API de Playwright n'est pas thread-safe, vous aurez besoin d'une instance distincte pour chaque thread [3]:
<span class="hljs-keyword">def</span> <span class="hljs-title function_">thread_function</span>():
<span class="hljs-keyword">with</span> sync_playwright() <span class="hljs-keyword">as</span> p:
browser = p.chromium.launch()
<span class="hljs-comment"># Perform thread-specific tasks</span>
browser.close()
Playwright est parfaitement adapté aux projets d'automatisation web modernes. Ses outils de débogage et son générateur de code permettent aux développeurs de gagner du temps par rapport aux frameworks plus anciens. Cependant, sa communauté (116 283 dépôts GitHub) est plus petite que celle de Selenium (XNUMX XNUMX dépôts). [1], sa croissance rapide et le soutien de Microsoft indiquent un avenir prometteur.
sbb-itb-23997f1
3. Fantomime
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 version ultérieure. Installez-le via pip avec les commandes suivantes :
pip install pyppeteer
pyppeteer-install <span class="hljs-comment"># Downloads Chromium (~150MB)</span>
Voici un script simple présentant ses fonctionnalités asynchrones :
<span class="hljs-keyword">import</span> asyncio
<span class="hljs-keyword">from</span> pyppeteer <span class="hljs-keyword">import</span> launch
<span class="hljs-keyword">async</span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>():
browser = <span class="hljs-keyword">await</span> launch()
page = <span class="hljs-keyword">await</span> browser.newPage()
<span class="hljs-keyword">await</span> page.goto(<span class="hljs-string">'https://example.com'</span>)
<span class="hljs-keyword">await</span> page.screenshot({<span class="hljs-string">'path'</span>: <span class="hljs-string">'screenshot.png'</span>})
<span class="hljs-keyword">await</span> browser.close()
asyncio.get_event_loop().run_until_complete(main())
Perspectives de performance
Les tests indiquent que Pyppeteer fonctionne environ 30 % plus rapidement que Playwright pour les scripts plus courts [5]Sa conception asynchrone le rend également efficace lors de la gestion de plusieurs tâches en même temps.
Principales caractéristiques et limites
| Fonctionnalité | DÉTAILS |
|---|---|
| Support du navigateur | Chrome uniquement |
| Prise en charge asynchrone | Encastré |
| Rendu JavaScript | Entièrement pris en charge |
| Utilisation de la mémoire | Inférieur par rapport au sélénium |
| Taille d'installation | Compact (~150 Mo avec Chromium) |
| Test multi-navigateurs | Non 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 = <span class="hljs-keyword">await</span> launch()
<span class="hljs-keyword">for</span> task <span class="hljs-keyword">in</span> tasks:
page = <span class="hljs-keyword">await</span> browser.newPage()
<span class="hljs-comment"># Perform operations</span>
<span class="hljs-keyword">await</span> page.close()
<span class="hljs-keyword">await</span> browser.close()
Cette approche peut aider à réduire les frais généraux et à accélérer vos scripts.
Gestion des erreurs
Un problème courant est l'erreur « Navigateur fermé de manière inattendue », qui est souvent causée par des dépendances Chromium manquantes. [4]. Fonctionnement pyppeteer-install s'assure que tous les composants nécessaires sont en place.
« Pyppeteer est un outil permettant d'automatiser un navigateur Chromium avec du code, permettant aux développeurs Python d'obtenir des capacités de rendu JavaScript pour interagir avec des sites Web modernes et mieux simuler le comportement humain. » - ZenRows [4]
Comme il ne prend en charge que Chromium, Pyppeteer est particulièrement adapté aux projets axés sur le scraping et l'automatisation du Web basés sur Chrome. C'est un excellent choix si les tests multi-navigateurs ne sont pas une priorité.
4. Requêtes-HTML
Requests-HTML est un outil léger de scraping Web qui combine la simplicité de Requests avec de puissantes capacités d'analyse HTML. Il est particulièrement rapide et efficace lorsque vous travaillez avec du contenu statique.
Installation et configuration
Pour utiliser Requests-HTML, assurez-vous que vous disposez 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 navigateur comme Selenium en termes de vitesse. Voici une comparaison issue de tests récents. [6]:
| Type d'opération | Requêtes-HTML | Sélénium |
|---|---|---|
| Requêtes API | 0.11s ± 0.01s | 5.16s ± 0.04s |
| Extraction de texte | 0.28s ± 0.01s | 5.32s ± 0.09s |
Ces données mettent en évidence la manière dont Requests-HTML excelle dans les tâches nécessitant des réponses rapides.
Fonctionnalités et capacités clés
Voici un exemple rapide de la façon d'utiliser Requests-HTML :
<span class="hljs-keyword">from</span> requests_html <span class="hljs-keyword">import</span> HTMLSession
session = HTMLSession()
r = session.get(<span class="hljs-string">'https://example.com'</span>)
r.html.links <span class="hljs-comment"># Extract all links</span>
r.html.absolute_links <span class="hljs-comment"># Extract absolute URLs</span>
<span class="hljs-comment"># Enable JavaScript rendering</span>
r.html.render()
Certaines de ses fonctionnalités remarquables incluent :
- Sélecteurs CSS (similaires à jQuery)
- Prise en charge de XPath
- Gestion automatique des redirections
- Mise en commun des connexions
- Persistance des cookies
- Chaînes d'agent utilisateur simulées pour plus de flexibilité
Conseils d'optimisation des performances
Pour obtenir les meilleures performances :
- Limitez le rendu JavaScript pour réduire la surcharge de Chromium.
- Réutiliser les objets de session pour plusieurs requêtes.
- Optez pour les sélecteurs CSS plutôt que XPath pour des requêtes plus simples et plus rapides.
Limites et cas d'utilisation
| Aspect | DÉTAILS |
|---|---|
| Prise en charge de JavaScript | Disponible mais doit être explicitement activé |
| Utilisation de la mémoire | Faible pour le contenu statique ; plus élevé avec le rendu JS |
| Authentification | Nécessite une configuration manuelle |
| Gestion du CAPTCHA | Fonctionnalité limitée |
« Utilisez des requêtes si vous avez besoin d'un moyen rapide, léger et fiable pour récupérer du contenu Web statique ou des données API. » - Joseph McGuire [6]
Requests-HTML est idéal pour les tâches où la rapidité et l'efficacité des ressources sont essentielles. Par exemple, l'extraction 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 chargeant uniquement les ressources demandées. Cela peut réduire considérablement les coûts de proxy pour les projets utilisant 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 simple et efficace par rapport aux outils d'automatisation de navigateur plus lourds. Cela en fait un choix judicieux dans les scénarios où la vitesse et les économies de ressources sont des priorités.
Tableau comparatif des bibliothèques
Voici une comparaison détaillée des bibliothèques de navigateur sans tête Python en fonction de leurs fonctionnalités, de leurs performances et de l'efficacité de leurs ressources.
Fonctionnalités et capacités de base
| Fonctionnalité | Sélénium | Dramaturge | Fantomime | Requêtes-HTML |
|---|---|---|---|---|
| Support du navigateur | Chrome, Firefox, Safari, IE | Chrome, Firefox, WebKit | Chrome uniquement | Chrome (pour JS) |
| Prise en charge de JavaScript | Full | Full | Full | Édition |
| Prise en charge asynchrone | Non | Oui | Oui | Non |
| Complexité d'installation | Élevé (WebDriver requis) | Moyenne | Moyenne | Faible |
| L'utilisation des ressources | Élevée | Moyenne | Moyenne | Faible |
| Taille de la communauté | Plus de 283 XNUMX dépôts | Plus de 116 XNUMX dépôts | Modérée | Petite |
Ces fonctionnalités fournissent un aperçu des points forts et des limites de chaque bibliothèque, ouvrant la voie à une analyse plus approfondie.
Benchmarks de Performance
Les tests de référence mettent en évidence les principales différences de performances [1][5]:
| Opération | Dramaturge | Sélénium | Fantomime |
|---|---|---|---|
| Temps d'exécution | 290.37ms | 536.34ms | ~203 ms |
| Intensité des ressources | Moyenne | Élevée | Moyenne |
| Utilisation de la mémoire | Modérée | Élevée | Modérée |
Playwright et Pyppeteer affichent des temps d'exécution plus rapides par rapport à Selenium, Pyppeteer étant en tête des performances des scripts courts.
Fonctionnalités de développement et de débogage
Les outils de débogage et le support de développement varient considérablement parmi ces bibliothèques :
| Fonctionnalité | Sélénium | Dramaturge | Fantomime | Requêtes-HTML |
|---|---|---|---|---|
| Outils de débogage | Basic | Avancé | Basic | Édition |
| Fonctionnalités d'attente automatique | Manuel | Encastré | Basic | N/D |
| Prise en charge multiplateforme | Oui | Oui | Édition | Oui |
| Soutien technique | Communauté | Documentation + Communauté | Édition | Basic |
Playwright se distingue par des outils de débogage avancés et des fonctionnalités d'attente automatique intégrées, ce qui le rend idéal pour les projets complexes.
Optimisation des cas d'utilisation
Différentes bibliothèques excellent dans des scénarios spécifiques :
| Case Study | Bibliothèque recommandée | Pourquoi |
|---|---|---|
| Systèmes hérités | Sélénium | Compatibilité étendue avec les navigateurs |
| Applications Web modernes | Dramaturge | Prise en charge asynchrone et exécution plus rapide |
| Article statique | Requêtes-HTML | Léger et efficace |
| Scripts rapides | Fantomime | Exécution rapide et fonctionnalités équilibrées |
Chaque bibliothèque a sa niche, en fonction des exigences du projet.
Efficacité des ressources
L’utilisation des ressources varie considérablement selon les bibliothèques :
| Bibliothèque | L'utilisation du processeur | Empreinte mémoire | Efficacité de la bande passante |
|---|---|---|---|
| Sélénium | Élevée | Élevée | Modérée |
| Dramaturge | Moyenne | Moyenne | Élevée |
| Fantomime | Moyenne | Moyenne | Élevée |
| Requêtes-HTML | Faible | Faible | Très élevé |
Pour le contenu statique, Requests-HTML est le plus efficace, tandis que Playwright équilibre les performances et l'utilisation des ressources pour les applications dynamiques.
Pyppeteer surpasse Playwright dans l'exécution de scripts courts, fonctionnant presque 30 % plus rapidement [5]Cependant, la compatibilité plus large des navigateurs et les outils de débogage avancés de Playwright en font un meilleur choix pour les tâches plus exigeantes au niveau de l'entreprise.
Quelle bibliothèque choisir ?
Le choix de la bibliothèque de navigateur headless appropriée dépend de vos besoins d'automatisation spécifiques et de votre configuration technique. Sur la base des comparaisons ci-dessus, voici comment vous pouvez décider.
Si vous travaillez avec applications Web modernesPlaywright est un excellent choix. Il a surpassé Selenium lors des tests de performance, réalisant des tâches en seulement 290.37 millisecondes, contre 536.34 millisecondes pour Selenium.[1]Son support asynchrone et ses outils de débogage avancés le rendent parfaitement adapté à la gestion de tâches d'automatisation complexes.
Pour systèmes d'entreprise ou héritésSelenium est une option fiable. Avec plus de 283,000 XNUMX dépôts GitHub dédiés,[1]Selenium offre une multitude de ressources communautaires, une compatibilité avec les anciens navigateurs comme Internet Explorer et une automatisation réelle des appareils.
Pour les environnements aux ressources limitées, voici un guide rapide :
| Type d'environnement | Bibliothèque recommandée | Avantage clé |
|---|---|---|
| Article statique | Requêtes-HTML | Faible utilisation des ressources |
| Contenu dynamique | Fantomime | Léger avec des opérations asynchrones |
In configurations d'intégration continue (CI)Playwright brille. Il s'intègre parfaitement à des plateformes comme GitHub Actions.[8], prend en charge les tests parallèles et aide à réduire les tests instables, ce qui en fait une solution idéale pour les pipelines CI/CD.
En fin de compte, 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 étendue des navigateurs et des options de test sur appareils réels.[1].
articles similaires



