Web scraping avec puppeteer…

Lincoln memorial à Washington avec les textes Puppeteer et NodeJS

Puppeteer est une librairie Nodejs qui fournit des outils pour contrôler Chromium avec le protocole DevTools. Puppeteer exécute Chrome ou Chromium, sans en entête par défaut.

Sans entête signifie que les opérations dans le navigateur sont réalisées sans interface graphique. Il n’y a aucun bouton ou formulaire à cliquer ou remplir, mais vous pouvez contrôler la page ouverte en javascript. Inversement, Puppeteer en mode entête affiche le navigateur, ce qui peut être utile pour déboguer.

Installation

Nodejs doit être installé. On tape la commande node -v pour en être sûr, et l’on crée un projet avec npm dans un dossier choisi :

Cela crée un fichier package.json et un dossier node_modules. On installe alors puppeteer :

On crée un fichier javascript exemple.js dans le dossier project, qui recevra les instructions.

Prendre un screenshot de la page

On peut ajuster le viewport avec setViewPort(), attendre un certain temps, histoire que les images soient chargées avec waitForTimeout(), et prendre un screenshot avec screenshot(). Les fonctions et options de l’API Puppeteer sont disponible sur le repo github :

Pour éviter les erreurs de requêtes non prises en charge par Puppeteer, il faut utiliser try, catch, finally. Le bloc finally sert à fermer le navigateur.

On lance ensuite la commande dans le dossier du projet :

La sortie retourne le nom du fichier image qui se trouve dans le dossier du projet.

L’instruction await est utilisé pour attendre une promesse promise. Il ne peut être utilisé que dans une fonction asynchrone async dans le code javascript.

Retourner des éléments de la page evaluate()

La fonction evaluate() permet de passer en argument une fonction qui retourne une promesse. page.evaluate() résous la promesse et retourne le résultat. Pour retourner le contenu d’une div, on sélectionne la div en javascript, et l’on retourne le contenu :

Si l’on veut voir la sortie de la console du navigateur, on peut écrire :

Argument page evaluate(), (pageFunction[, …args])

Si l’argument est arg :

Et hop, on peut visiter un site avec un navigateur headless et en tirer des informations tel un robot.

1 commentaire

  1. Très bien expliqué, le successeur de phantomjs avec Node …

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.