n8n+DiffHook

n8n + Puppeteer — scraping Chrome headless senza l'operatività

DiffHook pilota Puppeteer per te, aspetta che il DOM si assesti, diffa il risultato contro lo snapshot precedente e consegna le modifiche a n8n tramite webhook firmato. Nessun binario Chromium, nessuna immagine Docker, nessun riavvio-su-OOM.

Ospitare Puppeteer dentro un deployment di n8n è un classico footgun: il binario Chromium gonfia la dimensione dell'immagine, i worker perdono memoria dopo poche centinaia di run e qualunque cambio di pagina rompe lo script di selettori alle 3 di notte. DiffHook porta il browser in una flotta gestita. Tu descrivi una volta cosa osservare e n8n vede solo il diff post-render — mai i crash del browser, mai la latenza a freddo, mai il drift di versione degli stealth plugin.

n8n

L hub completo di n8n + DiffHook

Tutte le ricette, i template e i prezzi n8n in un unico posto.

Flusso

Collega i diff renderizzati da Puppeteer a n8n in 5 passi

Il browser gira dalla nostra parte. n8n vede solo i cambiamenti — niente cold start, niente processi Chromium zombi.

01

Esporre un webhook n8n

Aggiungi un nodo trigger Webhook a un flusso n8n nuovo o esistente e annota l'URL di produzione. È la destinazione a cui DiffHook farà POST quando il DOM renderizzato cambia.

02

Scegliere html_rendered e il motore Puppeteer

Imposta type su html_rendered e render.engine su puppeteer. Aggiungi wait_for_selector o wait_until: networkidle perché DiffHook faccia lo snapshot solo dopo che la pagina ha finito di caricare JS e dati.

03

Colpire l'elemento giusto con un selettore

DiffHook esegue il selettore CSS contro il DOM renderizzato. Un selettore stretto (una specifica card prodotto, una riga di prezzo, un banner di status) mantiene il diff focalizzato e fa sì che n8n si attivi solo sul segnale che conta.

04

Creare il monitor

POST su /v1/monitors con URL, configurazione di rendering, selettore, intervallo e una consegna webhook verso il tuo URL n8n. DiffHook pianifica le run Puppeteer — tu non possiedi nulla a forma di browser.

05

Reagire al cambiamento in n8n

Quando l'output del selettore renderizzato cambia, il nodo Webhook di n8n parte con un body JSON firmato: previous_value, current_value, url, detected_at. Verifica l'HMAC e instrada il diff ai passi successivi.

Esempio API

Monitor renderizzato da Puppeteer in un POST

render.engine sceglie il browser. Puppeteer è un ottimo default per i siti che testano specificamente fingerprint della famiglia 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"
    }
  ]
}

Flusso importabile

Parti da un flusso n8n già pronto

Il template verifica l'HMAC, parsa l'HTML renderizzato da Puppeteer con HTML Extract e spinge righe strutturate in un database Notion. Modifica il nodo di destinazione a piacere.

FAQ

n8n Puppeteer — domande frequenti

Puppeteer vs Playwright — quale motore scegliere?
Sono intercambiabili per ~95% dei siti. Scegli Puppeteer quando il target testa esplicitamente feature di Chrome (chiamate al Chrome DevTools Protocol, API browser Chrome-specific) o quando trovi una pagina che si comporta diversamente sotto i due. Scegli Playwright quando ti serve un controllo più fine sui wait o quando il sito funziona meglio col profilo di default di Playwright. Passare dall'uno all'altro è una riga nella config del monitor.
Devo tenere il mio Chromium in esecuzione da qualche parte?
No. DiffHook ospita la flotta Chromium, la mantiene aggiornata e ricicla i worker tra le run. Tu mandi solo il POST. Ecco perché questo pattern batte il classico «n8n + nodo Puppeteer»: nessun binario da installare, nessuna immagine da mantenere, nessun alert di worker crashed da smistare.
Come gestisce DiffHook le pagine che caricano contenuti a scroll?
Due opzioni. Puoi impostare scroll_to_bottom: true perché Puppeteer scrolli automaticamente prima dello snapshot, oppure fornire un wait_for_selector che compare solo quando il contenuto lazy-caricato viene montato. Entrambe funzionano per liste prodotti a scroll infinito, changelog lazy e widget basati su intersection-observer.
Posso passare cookie di auth a Puppeteer?
Sì. Ogni monitor ha un array cookies e una mappa request_headers, entrambi salvati cifrati. Utile quando vuoi osservare la vista autenticata di una app — un pannello dietro login, una pagina SaaS per singolo tenant. Rotazione o revoca delle credenziali direttamente dal pannello.
Qual è la cadenza minima sui monitor renderizzati?
Stessi minimi dei monitor statici — 60 secondi sui piani a pagamento, oraria sul piano gratuito. Il browser rende ogni check più oneroso in termini di consumo del piano, ma il pannello mostra sempre il costo effettivo per monitor, quindi niente salti improvvisi.

Flussi correlati

Perfetti anche con DiffHook

Smetti di spedire Chromium con la tua immagine n8n

Flotta Puppeteer gestita, webhook firmati HMAC, check ogni 60 secondi, piano gratuito. In produzione in pochi minuti.