Qu'est-ce qu'un navigateur sans tête ? Ces navigateurs facilitent-ils ou entravent-ils l'expédition de collecte de données ?
Un navigateur sans tête est un navigateur web sans interface utilisateur graphique (GUI). Il n'a pas de fenêtre visible ou d'élément d'interface utilisateur.
Il suffit d'utiliser des scripts pour gérer le contenu de la page.
Cela signifie que vous pouvez faire toutes sortes de bêtises.
Mais nous ne parlerons aujourd'hui que de la partie "whitehat".
Qu'y a-t-il de si spécial dans un navigateur sans tête ?
- Interactions plus rapides avec le contenu web - ce qui signifie que vous pouvez obtenir davantage de données dont vous avez besoin.
- Ne nécessite pas autant de bande passante ou de temps pour charger une page - ce qui signifie que vous n'avez pas à attendre.
- Cela a l'air cool, dans le genre Sleepy Hollow, ce qui est un comble.

À quoi sert un navigateur sans tête ?
Les navigateurs sans interface graphique permettent d'accéder facilement au DOM (modèle objet du document) d'une page web, ce qui est utile pour les développeurs front-end utilisant des frameworks JavaScript tels qu'AngularJS.
Ils sont également couramment utilisés pour charger et exécuter des pages web fonctionnelles sur un serveur sans tête lors de tests automatisés. C'est ce qu'on appelle les tests de navigateur sans tête.
Tests de navigateurs sans tête
Le test sans tête est une technique de test automatisée utilisée pour la validation des pages web. Un programme contrôle un navigateur web à l'aide d'automatismes, de scripts ou d'autres outils sans rendre les graphiques ou exécuter les composants visibles de l'interface utilisateur. L'objectif des tests de navigateur sans tête peut être le suivant :
- Vérification de la validité des balises, du contenu et du style d'une page HTML/XHTML.
- Validation d'un formulaire web ou d'un formulaire de connexion.
- Évaluation de JavaScript pour les gestionnaires d'événements et les opérations AJAX.
Il s'agit de vérifier que les contenus dynamiques s'affichent à l'écran avec un positionnement correct, etc.
Les navigateurs sans tête fonctionnent également bien avec d'autres logiciels. Outre les tests et le développement web, ils peuvent faciliter la collecte de données.
Le "headless browser scraping" (raclage de navigateur sans tête)
Le « headless scraping » est une technique d'extraction automatisée de données que vous pouvez utiliser en association avec un outil de scraping Web.
Un navigateur en mode sans tête :
- Scrape les sites web et stocke les données web dans un répertoire local sur un disque.
- Récupère plusieurs pages de la plupart des sites web modernes.
- Imite un profil d'agent utilisateur nécessaire à l'exécution du rendu JavaScript.
- Scrape plus efficacement avec des arguments de ligne de commande.
Par exemple, les navigateurs sans tête sont couramment utilisés pour extraire des données de catalogues en ligne, des informations tarifaires de sites de commerce électronique ou des widgets/icônes de médias sociaux intégrés au site web de l'entreprise.
Quels sont les navigateurs sans tête les plus répandus ?

Chrome sans tête
La version sans tête du navigateur Chrome de Google.
Firefox sans tête
Un projet Mozilla visant à créer une version « headless » de son dernier navigateur web, avec prise en charge de WebGL et de JavaScript.


Unité Htlm
Un cadre de test fonctionnel qui utilise des navigateurs sans tête pour charger et valider les pages web.
SimpleBrowser
Navigateur sans tête réalisé avec le logiciel Net 4, capable d'effectuer des activités d'automatisation du navigateur. Il n'autorise pas le JavaScript, mais vous pouvez modifier l'agent utilisateur, le référent, les en-têtes de requête, les valeurs du formulaire et d'autres éléments avant la soumission ou la navigation.


SlimerJS
Projet de Mozilla visant à permettre l'utilisation de JavaScript et de HTML5 dans un environnement de type système de fichiers. Il utilise Gecko (le moteur du navigateur derrière Firefox) comme noyau. Cela lui permettra de supporter pleinement toutes les API JavaScript (par exemple, même si elles ne sont pas implémentées ou incomplètes d'une manière ou d'une autre).
ZombieJS
Zombie fournit une API JavaScript et utilise Chromium. Chromium peut s'exécuter sur diverses pages Web, mais il sert principalement à tester automatiquement les API DOM et le comportement des sites Web.

Comment utiliser le headless browsing pour faire du web scrape ?
L'objectif d'un navigateur sans tête est l'automatisation (des tests fonctionnels, du développement web, etc.) Ils constituent également d'excellents outils pour le web scraping en raison de leur facilité d'utilisation et de leur capacité à effectuer des tâches sans surveillance/sans intervention humaine.

Lorsque vous utilisez des navigateurs sans tête pour faire du web scrape, vous devez fournir au navigateur une liste d'URL et attendre qu'il se charge. Lorsqu'il est chargé dans le navigateur sans tête, cette opération peut être automatisée en envoyant des commandes à votre navigateur sans tête depuis la ligne de commande.
Il vous permet de contrôler totalement quand et comment les URLs sont tirées dans votre navigateur sans tête.
Pour récupérer des sites web avec un navigateur sans tête, vous devez ajouter des bibliothèques à votre application afin que le navigateur puisse communiquer avec elles. Cette communication peut se faire via une ligne de commande ou en se connectant à un serveur web.
Les bibliothèques les plus courantes sont les suivantes
Demandes
Une bibliothèque Python indispensable pour interagir avec des serveurs web via des requêtes HTTP.


jsdom
Cette bibliothèque nécessite également un paquetage appelé jsdom-global, qui est utilisé pour créer les objets globaux nécessaires au navigateur sans tête.
Marionnettiste
La bibliothèque Puppeteer facilite le contrôle de Chrome et Chromium par rapport à d’autres bibliothèques telles que Selenium/WebDriver. Vous pouvez l’installer via npm ou yarn dans des applications Node.js pour exécuter des tests ou extraire des données à partir de pages web. Elle vous offre des méthodes permettant de spécifier l’URL, de télécharger des ressources, de gérer les cookies, etc.

Nous devons nous rappeler que Puppeteer est une bibliothèque basée sur des promesses : Elle effectue des appels asynchrones à l'instance Chrome sans tête dans le compartiment moteur.

Cauchemar
Cette bibliothèque est destinée aux applications Electron. Elle fournit à Electron des outils d'automatisation qui permettent à une application de contrôler le processus de navigateur d'Electron via une connexion à distance.
Sélénium
Une poignée de bibliothèques sont disponibles pour le JavaScript sans tête utilisant des liaisons Selenium telles que webdriver js et selenium-web driver.

Vous pensez peut-être qu'il est difficile de créer une bibliothèque, mais ce n'est pas le cas. Prenons un exemple.
Tutoriel du marionnettiste de base

Tout d'abord, vous devez installer Puppeteer dans le répertoire du projet.
Installation de Puppeteer
Pour utiliser Puppeteer dans un navigateur sans tête, exécutez :
npm i puppeteer
# or "yarn add puppeteer"
Ou pour une version allégée de Puppeteer, exécutez :
npm i puppeteer-core
# or "yarn add puppeteer-core"
Comme mentionné ci-dessus, tout le code du marionnettiste s'exécute en NodeJS. Vous l'exportez en tant que fonction d'usine qui renverra un objet avec des méthodes pour contrôler Chrome. Vous pouvez l'utiliser pour créer de nouvelles instances de navigateur via la méthode de lancement, naviguer vers des URL, gérer des événements, etc.
L'extrait de code suivant concerne le script Puppeteer.
Si vous souhaitez vous rendre sur le site , naviguez jusqu'à https://example.com et faites une capture d'écran au format example.png:
Enregistrer le fichier sous example.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Exécuter le script sur la ligne de commande :
node example.js
Si vous souhaitez créer un PDF :
Enregistrer le fichier sous le nom hn.js.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {
waitUntil: 'networkidle2',
});
await page.pdf({ path: 'hn.pdf', format: 'a4' });
await browser.close();
})();
C'est du gâteau, n'est-ce pas ?
L'exemple ci-dessus n'est qu'un extrait de code. Vous trouverez un tutoriel complet sur Puppeteer pour plus d'informations ici.
Quelles sont les limites de l'utilisation d'un scraper web avec un navigateur sans tête ?
En général, on dispose d'un contrôle plus limité avec un serveur « headless », car de nombreuses tâches nécessitent des plugins ou des configurations supplémentaires gérés par un navigateur web standard. Par exemple, certains navigateurs « headless » ne prennent pas en charge les sélecteurs CSS, ce qui complique l'extraction de données à partir du DOM.
Même si un navigateur sans interface graphique est efficace, les blocages sur le Web peuvent ralentir votre travail. En fonction du nombre de pages que vous prévoyez d'extraire, vous devriez envisager d'utiliser un service proxy. Un service proxy vous permettra de protéger votre adresse IP contre un éventuel blocage.
Les meilleurs proxies à utiliser en mode headless
Si tous vos appels API et toutes vos requêtes HTTP sont effectués à partir de la même adresse IP, l'ensemble du processus sera interrompu.
Les meilleurs proxys à utiliser avec les web scrapers sont les proxys rotatifs. De cette manière, chaque instance du navigateur est associée à une adresse IP différente.
Les proxys résidentiels rotatifs, ou proxys « backconnect », sont parfaits pour les tests automatisés et les applications web destinées à la collecte de données.
Vous souhaitez en savoir plus sur les proxys pour le web scraping avec un navigateur headless ? Consultez cet article pour découvrir combien de proxys il vous faut.

Dans cet article, nous avons expliqué ce que sont les navigateurs sans tête et pourquoi ils peuvent être utiles à ceux qui souhaitent les utiliser comme outil de scraping.
Si vous avez d'autres questions sur les navigateurs sans tête ou sur tout ce qui concerne le web scraping, n'hésitez pas à commenter ci-dessous !
FAQS
Comment puis-je commencer ?
Il suffit de choisir un navigateur sans tête qui fonctionne bien pour vos besoins d'automatisation web. Il existe une grande variété de navigateurs sans tête, tels que Headless Chromium et SlimerJS. Vous aurez également besoin d'une bibliothèque. Si vous envisagez d'utiliser Chrome, par exemple, vous devrez installer la bibliothèque Puppeteer.
Pourquoi le nom de navigateur "sans tête" ?
Un navigateur sans tête n'a pas d'interface utilisateur graphique (GLU) ; la seule chose que vous verrez lorsqu'il fonctionnera est une interface de ligne de commande (CLI). Les développeurs web l'utilisent pour exécuter des tâches automatisées telles que des tests fonctionnels et du web scraping.
Le CLI de votre navigateur headless vous permet de charger des sites web et d'interagir avec eux, entre autres choses. Il agit essentiellement comme un proxy hautement configurable entre vous et le(s) site(s) web que vous chargez dans votre serveur headless. Si vous ne connaissez pas encore le web scraping ou les navigateurs headless, cet article vous en apprendra les bases. Il peut être utile si vous débutez.
Qui a créé Headless Chrome ?
Headless Chrome est un projet open-source mené par Google.
Puis-je l'utiliser à d'autres fins que l'exploration automatisée du web ?
Oui, vous pouvez l'utiliser pour effectuer des tests automatisés et fonctionnels. Vous devez considérer toutes les options avant de décider quel serveur headless répond le mieux à vos besoins.
Étant donné que leur objectif est l'automatisation, les navigateurs sans tête constituent d'excellents outils de scraping, en particulier lorsqu'ils sont associés à une interface de ligne de commande.
Est-il possible d'exécuter des navigateurs sans tête à partir de la ligne de commande ?
Oui. De nombreux serveurs headless vous permettent de les exécuter à partir de leur CLI respectif ou d'une interface web, telle que Chrome. Dans certains cas, vous devrez utiliser les deux pour obtenir un contrôle complet sur votre navigateur headless.
Comment savoir si un navigateur sans tête fonctionne sur mon ordinateur ?
Vous pouvez consulter l'architecture de votre système local et la comparer à celle des navigateurs sans tête que vous souhaitez utiliser. Certains serveurs headless sont multiplateformes ou prennent en charge plusieurs architectures, mais tous ne fonctionnent pas de cette manière. Vous devriez vérifier avant d'en utiliser un.
Est-il vrai que les navigateurs headless ne prennent pas en charge les sélecteurs CSS ?
Ceci est vrai pour certains serveurs headless (mais pas tous) ; notamment, PhantomJS ne supporte pas les sélecteurs CSS alors que Headless Chrome les supporte. Les développeurs de chaque navigateur headless peuvent choisir d'ajouter et/ou de supprimer différentes fonctionnalités à tout moment, c'est pourquoi vous devriez toujours vérifier avant de supposer quoi que ce soit.
Les navigateurs headless fonctionnent-ils avec du code javascript ?
Dans la plupart des cas, les navigateurs sans tête n'ont aucun problème à exécuter le code JavaScript. De nombreux développeurs web utilisent des navigateurs "headless" pour automatiser leurs tâches, ce qui nécessite une prise en charge complète de JavaScript pour atteindre leurs objectifs.
Étant donné que tous les navigateurs "headless" ne prennent pas en charge JavaScript, vous devez vous renseigner sur chacun d'entre eux et déterminer s'ils répondent ou non à vos besoins spécifiques.
Est-il vrai que certains serveurs headless ont des API ?
Oui ! Certains serveurs « headless » disposent d'API qui vous permettent de les utiliser autrement que pour simplement charger des sites web via un serveur proxy. Vous pouvez vérifier quels types d'API propose un navigateur « headless » donné en consultant sa documentation. C'est un bon moyen de déterminer si vous devriez ou non les utiliser avec des outils de scraping, en particulier si une API proxy est disponible.
Quels sont les navigateurs sans tête qui prennent en charge les sélecteurs CSS ?
Headless Chrome prend actuellement en charge les sélecteurs CSS, contrairement au moteur WebKit de PhantomJS. Pour plus d'informations sur les dépendances système, vous pouvez consulter ce site web.
Pourquoi tous les outils de web scraping ne sont-ils pas considérés comme des navigateurs "headless" ?
Les outils de scraping web tels que Scrapy imitent l'interface utilisateur (UI) d'un navigateur web normal pour extraire des données de sites web. Cependant, comme ces outils ne chargent pas les pages dans leur propre fenêtre, nous ne les classons pas dans la catégorie des navigateurs sans tête.
Est-il vrai qu'il n'est pas possible d'utiliser des navigateurs sans tête pour récupérer des sites web mobiles ?
Il n'est pas garanti que les navigateurs sans tête fonctionnent sur toutes les pages d'un site web, mais la plupart d'entre elles peuvent être exécutées sans problème. Les sites spécifiques aux mobiles ont tendance à ne pas se charger correctement dans les serveurs headless, même s'ils peuvent afficher la page.
Puis-je tester mes propres navigateurs sans tête ?
Vous devriez pouvoir le faire, mais il n'y a aucune garantie que le navigateur sans tête fonctionnera. Chaque serveur headless ayant des fonctionnalités et des caractéristiques différentes, il se peut que vous deviez modifier votre propre outil avant qu'il ne fonctionne correctement.
Pour prendre un exemple simple, Chrome « headless » nécessite JavaScript, tandis que PhantomJS a besoin d'en-têtes CORS pour que les pages Web se chargent correctement.
Quelles sont les meilleures pratiques à utiliser lorsque je fais du scraping avec un navigateur sans tête ?
L'objectif du web scraping est généralement d'extraire des données de sites web entièrement ou partiellement inaccessibles sans saisir manuellement des données web dans des formulaires ou des boutons.
Si vous souhaitez en savoir plus sur le fonctionnement du web scraping, consultez cet article.
Vous devez utiliser votre navigateur sans tête de manière éthique. La possibilité d'extraire des données de pages entièrement ou partiellement inaccessibles n'est pas nécessairement une mauvaise chose. Cependant, cela peut l'être si le propriétaire du site ne veut pas que vous le fassiez.
Assurez-vous de bien vérifier toutes les conditions d'utilisation et la politique de confidentialité avant de récupérer la page d'un site web, car ces conditions peuvent être modifiées sans préavis.
Quels sont les meilleurs navigateurs sans tête pour le web scraping ?
Headless Chrome et PhantomJS sont d'excellentes options pour le web scraping car ils sont faciles à utiliser et relativement rapides.
Pourquoi certains développeurs préfèrent-ils utiliser un navigateur sans tête plutôt qu'un navigateur classique ?
Il peut parfois être nécessaire ou plus pratique d'utiliser un navigateur sans tête plutôt qu'un navigateur classique, mais cela dépend généralement des spécificités du projet. Par exemple, supposons que vous souhaitiez récupérer des données sur des sites web qui nécessitent Javascript pour fonctionner correctement. Dans ce cas, il vous sera plus facile d'utiliser Headless Chrome que Google Chrome classique.
Headless Chrome offre de meilleures capacités de suivi que d'autres outils similaires, ce qui est avantageux lorsque l'on travaille sur plusieurs projets.
