n8n+DiffHook

n8n + Puppeteer — scraping Chrome headless sans l'exploitation

DiffHook pilote Puppeteer pour vous, attend que le DOM se stabilise, diff le résultat contre le snapshot précédent et livre les changements à n8n via un webhook signé. Pas de binaire Chromium, pas d'image Docker, pas de redémarrage-sur-OOM.

Héberger Puppeteer à l'intérieur d'un déploiement n8n est un classique des pièges : le binaire Chromium fait exploser la taille de votre image, les workers fuient de la mémoire au bout de quelques centaines de runs et le moindre changement de page casse le script de sélecteurs à 3h du matin. DiffHook tire le navigateur dans une flotte managée. Vous décrivez une fois ce qu'il faut surveiller, et n8n ne voit que le diff post-rendu — jamais les crashs du navigateur, jamais la latence de démarrage à froid, jamais les dérives de version des plugins stealth.

n8n

Le hub n8n + DiffHook complet

Toutes les recettes, templates et tarifs n8n au même endroit.

Workflow

Brancher les diffs rendus par Puppeteer sur n8n en 5 étapes

Le navigateur tourne chez nous. n8n ne voit que les changements — pas de démarrage à froid, pas de processus Chromium zombies.

01

Exposer un webhook n8n

Ajoutez un node déclencheur Webhook à un workflow n8n nouveau ou existant, notez l'URL de production. C'est la destination sur laquelle DiffHook va POSTer quand le DOM rendu change.

02

Choisir html_rendered et le moteur Puppeteer

Passez type à html_rendered et render.engine à puppeteer. Ajoutez wait_for_selector ou wait_until: networkidle pour que DiffHook ne prenne le snapshot qu'une fois la page chargée en JS et en données.

03

Cibler le bon élément avec un sélecteur

DiffHook applique le sélecteur CSS au DOM rendu. Utilisez un sélecteur serré (une fiche produit précise, une ligne tarifaire, un bandeau de statut) pour que le diff reste focalisé et que n8n ne se déclenche que sur le signal qui vous intéresse.

04

Créer le moniteur

POST sur /v1/monitors avec l'URL, la config de rendu, le sélecteur, l'intervalle et une livraison webhook vers votre URL n8n. DiffHook planifie les runs Puppeteer — vous ne possédez rien de forme navigateur.

05

Réagir au changement dans n8n

Quand la sortie du sélecteur rendu change, le node Webhook de n8n se lance avec un corps JSON signé : previous_value, current_value, url, detected_at. Vérifiez le HMAC, puis routez le diff vers les étapes aval.

Exemple d'API

Moniteur rendu par Puppeteer, un POST

render.engine choisit le navigateur. Puppeteer est un bon défaut pour les sites qui testent spécifiquement les empreintes de la famille Chrome.

POST /v1/monitors
POST https://api.diffhook.com/v1/monitors
Authorization: Bearer $DIFFHOOK_API_KEY
Content-Type: application/json

{
  "type": "html_rendered",
  "url": "https://spa.example.com/pricing",
  "render": { "engine": "puppeteer", "wait_for_selector": "[data-ready]" },
  "css_selector": "main .plan",
  "interval_seconds": 600,
  "deliveries": [
    {
      "type": "webhook",
      "url": "https://n8n.yourdomain.com/webhook/spa-pricing"
    }
  ]
}

Workflow importable

Démarrez avec un workflow n8n prêt à l'emploi

Le template vérifie le HMAC, parse le HTML rendu par Puppeteer avec HTML Extract et pousse des lignes structurées dans une base Notion. Éditez le node de destination comme vous voulez.

FAQ

n8n Puppeteer — questions fréquentes

Puppeteer vs Playwright — quel moteur choisir ?
Ils sont interchangeables pour ~95 % des sites. Prenez Puppeteer quand la cible teste explicitement des features Chrome (appels Chrome DevTools Protocol, APIs navigateur spécifiques à Chrome), ou quand vous trouvez une page qui se rend différemment sous les deux. Prenez Playwright quand il vous faut un contrôle plus fin des waits ou que le site marche mieux avec le profil navigateur par défaut de Playwright. Le passage de l'un à l'autre est un changement d'une ligne dans la config du moniteur.
Dois-je faire tourner mon propre Chromium quelque part ?
Non. DiffHook héberge la flotte Chromium, la maintient à jour et recycle les workers entre les runs. Vous n'envoyez que le POST. C'est la raison principale qui fait battre à ce pattern le « n8n + node Puppeteer » : pas de binaire à installer, pas d'image à maintenir, pas d'alerte worker-crashed à trier.
Comment DiffHook gère-t-il les pages qui chargent leur contenu au scroll ?
Deux options. Vous pouvez mettre scroll_to_bottom: true pour que Puppeteer scrolle automatiquement avant de snapshoter, ou fournir un wait_for_selector qui n'apparaît qu'une fois le contenu lazy-loadé monté. Les deux fonctionnent pour les listes de produits en scroll infini, les changelogs chargés paresseusement et les widgets basés sur intersection-observer.
Puis-je passer des cookies d'auth à Puppeteer ?
Oui. Chaque moniteur dispose d'un tableau cookies et d'une map request_headers, tous deux stockés chiffrés. Utile quand vous voulez surveiller la vue authentifiée d'une app — un dashboard derrière login, une page SaaS propre à un tenant. Renouvelez ou révoquez les identifiants depuis le tableau de bord à tout moment.
Quelle est la cadence minimale sur les moniteurs rendus ?
Mêmes minimums que pour les moniteurs statiques — 60 secondes sur les plans payants, horaire sur l'offre gratuite. Le navigateur rend chaque vérification plus coûteuse en termes d'utilisation de plan, mais le tableau de bord affiche toujours le coût effectif par moniteur — pas de falaise.

Workflows associés

Aussi parfait avec DiffHook

Arrêtez de livrer Chromium avec votre image n8n

Flotte Puppeteer managée, webhooks signés HMAC, vérifications à 60 secondes, offre gratuite. Passez en production en quelques minutes.