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 ?
Headless browsers provide easy access to the webpage DOM (document object model), which is helpful for front-end developers using JavaScript frameworks such as 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.
- Evaluating JavaScript for event handlers and AJAX operations.
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)
Headless scraping is an automated data extraction technique you can use in conjunction with a web scraper.
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.
- Imitates a user agent profile that is necessary to execute javascript rendering.
- 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
A Mozilla project that aims to create a headless build of their latest web browser with enabled support for WebGL and 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 provides a JavaScript API and uses Chromium. Chromium can run on various web pages, but it is mainly used to test the DOM APIs and website behavior automatically.
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
A necessary Python library to interact with web servers by an HTTP request.
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
The puppeteer library makes it easier to control Chrome and Chromium than other libraries such as Selenium/WebDriver. You can install it with npm or yarn in NodeJS applications to run tests or scrape data from web pages. It provides you with methods to specify the URL, download resources, handle 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
This library is used for Electron applications. It provides Electron with automation tools that can be used by an application to drive Electron’s browser process via a remote connection.
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 ?
You generally have less control with a headless server since many tasks require additional plugins or configurations handled by a standard web browser. For example, some headless browsers don’t support CSS selectors, which makes scraping data from the DOM more difficult.
Even though a headless browser is efficient, web blocks may slow you down. Depending on how many pages you plan to scrape, you need to think about using a proxy service. A proxy service will help to save your IP address from a potential block.
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.
Rotating residential proxies, or backconnect proxies, are ideal for automation testing and web applications that harvest data.
Want to know more about proxies for web scraping with a headless browser? Check out this article on how many proxies you need.
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 ?
Yes! Some headless servers have APIs which allow you to utilize them in different ways than simply loading websites through a proxy server. You can check what types of APIs any given headless browser offers by reading up on their documentation. This is a good way of determining whether or not you should use them with web scrapers, especially if a proxy API is available.
Quels sont les navigateurs sans tête qui prennent en charge les sélecteurs CSS ?
Headless Chrome currently supports CSS selectors, while PhantomJS’ WebKit engine does not. For more information on system dependencies, you can check out this website.
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.
For a basic example, headless Chrome requires Javascript, while PhantomJS requires CORS headers for web pages to load correctly.
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.
If you’d like to learn more about how web scraping works, check out this 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.