Puppeteer

Mis à jour le lundi 7 juin 2021 par johackim

Si vous souhaitez parser un site internet, il existe puppeteer.

Installation

Pour installer puppeteer :

yarn add -D puppeteer

Prendre un screenshot

Voici un exemple de script Node.js pour prendre un screenshot d'un site internet :

#!/bin/node
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://johackim.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();

Parser l'URL d'une vidéo

Si la page que vous souhaitez parser dispose d'un lien video, vous pouvez reprendre son URL :

const url = await page.$eval('video', (a) => a.getAttribute('src'));

Et si vous intégrer youtube-dl, vous pouvez enregistrer la vidéo en question :

await execSync(`youtube-dl -o "${filePath}" -f 'best[ext=mp4]' ${url}`, { stdio: 'inherit' });

Vous connecter sur un site automatiquement

Vous pouvez vous connecter automatiquement sur un site en remplissant automatiquement les champs email et password, puis sauvegarder le cookie dans un fichier cookie.json :

await page.focus('input#email');
await page.keyboard.type(email);
await page.focus('input#password');
await page.keyboard.type(password);
await page.click('.container form button[type=submit]');
await page.waitForSelector('.logged-in');
const cookies = await page.cookies();
await page.setCookie(...cookies);
fs.writeFileSync('cookie.json', JSON.stringify(cookies, null, 2));

Facultatif : vous pouvez exporter le cookie directement depuis votre navigateur via cette extension.

Pour réutiliser vos cookies dans une autre session Puppeteer :

const cookieFile = await fs.readFile('cookies.json');
const cookies = JSON.parse(cookieFile);
await page.setCookie(...cookies);

Modifier les paramètre du navigateur headless

Puppetteer vous permet de modifier les paramètres du navigateur headless. Si vous souhaitez modifier le navigateur ou le header HTTP User-Agent, écrivez les lignes suivantes :

const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome-stable' });
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4512.0 Safari/537.36');

Récupérer le contenu complet d'une page HTML

const html = await page.content();
// Ou
const html = await page.evaluate(() => document.body.innerHTML);

Debugger

Pour débugger, désactivez le mode headless :

await puppeteer.launch({ headless: false });

Cela vous permettra de visualiser le rendu directement depuis un vrai navigateur.