Guide

Automazione Headless del Browser con Nodi Puppeteer/Browserless

Se i tuoi flussi dipendono da pagine che caricano contenuti via JavaScript, l’estrazione con semplici richieste HTTP spesso fallisce. Con l’automazione headless del browser con n8n puoi rendere affidabile scraping, test e generazione di asset (screenshot/PDF) orchestrando un “vero” Chromium in cloud. In questa guida creiamo integrazioni scalabili con Browserless tramite il nodo universale n8n-nodes-base.httpRequest: collegherai l’API con un’API key, eseguirai azioni come /screenshot e /pdf, controllerai sessioni persistenti e userDataDir, e costruirai pipeline robuste con retry, timeout e rate limiting. Vedrai anche come introdurre modalità stealth e anti‑bot, rotazione proxy e fingerprinting, oltre a casi avanzati come audit SEO su HTML renderizzato e agenti LLM per navigazione web (sempre nel rispetto di robots.txt e termini d’uso). Chiudiamo con una checklist di messa in produzione, osservabilità, metriche e controllo costi.

📚 Nuovo a n8n? Parti dalla guida completa: cos’è n8n e come funziona.

[IMG: panoramica pipeline: Trigger → HTTP Request (Browserless) → Post‑process → CRM/DB → Report/Alert]

Perché un “real browser” dentro n8n: vantaggi e limiti

Lato vantaggi:

  • browser headless in automazione esegue JS e attende il rendering: utile per app single page, A/B test, lazy load, infinite scroll
  • Playwright e rendering lato client permettono di catturare screenshot e DOM “come utente reale”, con viewport, locale, cookie e user agent
  • puppeteer via API remota (Browserless) evita manutenzione di Chromium/driver; paghi solo l’uso e ottieni endpoint standardizzati (/scrape, /screenshot, /pdf, /performance, /sessions, /metrics, /unblock, /liveURL, /stealth)

Rispetto a richieste HTTP semplici:

  • più affidabile su siti dinamici e anti‑bot, con possibilità di modalità stealth e anti‑bot e rotazione proxy e fingerprinting
  • puoi orchestrare login → navigazione → estrazione con selettori CSS e XPath per scraping → invio a CRM/DB

Limiti e considerazioni:

  • latenza e costo superiori a una singola GET HTTP
  • blocchi anti‑bot e CAPTCHA possibili (serve strategia di evasione lecita o fallback)
  • responsabilità legale: conformità a robots.txt e termini d’uso dei siti target; attenzione a privacy e dati sensibili

Insight operativo: separa “ingaggio” (login/sessione) dall’estrazione. Le sessioni persistenti (sessioni persistenti e userDataDir) riducono latenza per scraping ripetuti, abbattendo login multipli e migliorando la resilienza.

[IMG: schema confronto: HTTP-only vs Browserless (con check per SPA, PDF, screenshot, autenticazione)]

Collegare Browserless a n8n con HTTP Request: setup e credenziali

L’integrazione n8n con Browserless è API‑first. Usiamo il nodo n8n-nodes-base.httpRequest con header Authorization: Bearer e payload JSON.

Passi:

  1. Crea la credenziale (API Key) sul tuo account Browserless.

  2. In n8n, aggiungi al workflow un nodo n8n-nodes-base.httpRequest per ogni operazione (es. /screenshot, /pdf).

  3. Imposta Headers con Authorization: Bearer e Body come JSON.

Esempio: Screenshot di una pagina

{
  "name": "Screenshot",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/screenshot",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "url": "https://example.com",
      "options": {
        "fullPage": true,
        "viewport": { "width": 1366, "height": 768 }
      }
    },
    "options": {
      "bodyContentType": "json"
    },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Esempio: Generazione PDF

{
  "name": "PDF",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/pdf",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "url": "https://example.com",
      "options": {
        "printBackground": true,
        "format": "A4",
        "margin": { "top": "10mm", "right": "10mm", "bottom": "10mm", "left": "10mm" }
      }
    },
    "options": { "bodyContentType": "json" },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Suggerimenti:

  • usa responseFormat: “json” per gestire risposte JSON; se l’API restituisce base64 dell’immagine/PDF, decodifica a valle
  • centralizza la tua API key in variabili d’ambiente e non in chiaro nel nodo
  • per molteplici richieste, imposta un nodo per operazione per isolare i problemi e semplificare i retry

[IMG: configurazione HTTP Request con header Authorization e body JSON]

Sessioni, login e scraping selettori: flusso robusto end‑to‑end

Le sessioni aumentano l’affidabilità (meno login ripetuti) e permettono contesti persistenti (cookie, localStorage, userDataDir).

Esempio: creare sessione, navigare e poi estrarre

{
  "name": "Create Session",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/sessions",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "userDataDir": "my-session-001",
      "launch": { "headless": true }
    },
    "options": { "bodyContentType": "json" },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Una volta ottenuto un sessionId, puoi invocare endpoint di navigazione/scrape passando l’identificativo di sessione per:

  • caricare la pagina di login
  • inviare username/password (campi form con selettori CSS)
  • attendere elementi chiave (waitFor)
  • navigare su pagine interne
  • eseguire selettori CSS e XPath per scraping

Esempio: scraping con selettori (DOM)

{
  "name": "Scrape",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/scrape",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "sessionId": "={{$json.sessionId}}",
      "url": "https://example.com/dashboard",
      "waitFor": [{ "selector": "#stats" }],
      "actions": [
        { "type": "click", "selector": "#expand" }
      ],
      "select": [
        { "selector": "#stats .value", "type": "text", "name": "statValue" },
        { "selector": "img#hero", "type": "attr", "attr": "src", "name": "heroSrc" }
      ]
    },
    "options": { "bodyContentType": "json" },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Consigli pratici:

  • preferisci selettori robusti (data‑testid, attributi stabili) rispetto a classi generate
  • conserva i cookie/sessioni in userDataDir per ridurre login futuri
  • usa step “waitFor” per sincronizzarti con JS e SPA (es. attesa di un selettore visibile)

[IMG: canvas con nodi: Create Session → Login → Navigate → Scrape → Output]

Anti‑bot, proxy e stealth: passi concreti per non farti bloccare

Molti siti impiegano sistemi anti‑bot. Strategie:

  • modalità stealth e anti‑bot: abilita headless moderno, riduci fingerprinting evidente (UA realistico, timezone/locale coerenti, viewport ragionevole)
  • rotazione proxy e fingerprinting: ruota IP e mantiene stabilità per sessioni lunghe; non abusare il crawl rate
  • retry, timeout e rate limiting: ritenta con backoff esponenziale i 429/5xx; rispetta finestre di rate limit
  • rispetto di robots.txt e termini d’uso: verifica policy, limita path esclusi e non aggirare protezioni illegittimamente

Esempio pattern di richiesta con parametri “stealth” e proxy (decisi a livello API):

{
  "name": "Stealth Screenshot",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/screenshot",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "url": "https://example.com",
      "stealth": true,
      "gotoOptions": { "waitUntil": "networkidle2" },
      "userAgent": "Mozilla/5.0 ...",
      "proxy": "http://user:pass@proxy.example:3128"
    },
    "options": { "bodyContentType": "json" },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Suggerimenti avanzati:

  • rallenta intenzionalmente l’azione (piccoli delay) per imitare interazioni umane
  • evita pattern ripetuti (sempre le stesse pagine/ore)
  • monitora codici 403/429 e adatta la concorrenza

[IMG: tab di configurazione con stealth:on, UA custom e proxy impostato]

PDF, screenshot e performance: asset e misure oggettive

Oltre allo scraping testuale, un caso comune è la generazione PDF e screenshot di pagine web:

  • generazione PDF e screenshot di pagine web: crea report periodici di landing, offerte o contratti
  • metriche di performance del browser: misura TTFB, DOMContentLoaded, LCP, CLS per audit SEO su HTML renderizzato
  • audit SEO su HTML renderizzato: estrai title/description/H1, verifica canonical, hreflang e meta robots lato “rendered DOM”

Esempio: Performance

{
  "name": "Performance",
  "type": "n8n-nodes-base.httpRequest",
  "typeVersion": 1,
  "parameters": {
    "url": "https://chrome.browserless.io/performance",
    "method": "POST",
    "responseFormat": "json",
    "jsonParameters": true,
    "bodyParametersJson": {
      "url": "https://example.com",
      "metrics": ["ttfb", "fcp", "lcp", "cls"]
    },
    "options": { "bodyContentType": "json" },
    "headerParametersUi": {
      "parameter": [
        { "name": "Authorization", "value": "Bearer {{$env.BROWSERLESS_API_KEY}}" }
      ]
    }
  }
}

Pipeline tipica:

  • Cron → /screenshot e /pdf su un set di URL → salva su storage/Drive → invia report via email/Slack
  • Per SEO: /performance e /scrape → calcola KPI → alert su regressioni oltre soglia

Tip: conserva l’HTML renderizzato (se supportato dall’endpoint) per analisi differite e debugging.

[IMG: report con metrica LCP/CLS e miniature screenshot]

Orchestrazione, code e controllo costi: eseguire su larga scala

Quando scali:

  • orchestrazione workflow e code/queue: serializza per dominio, parallelizza fra domini per ridurre blocchi; usa batch per liste lunghe
  • rate limiting: pianifica intervalli fra richieste e riduci concorrenza su target sensibili
  • caching: evita di ricaricare pagine identiche (cache HTML per N minuti)
  • code vs no‑code: usa n8n-nodes-base.httpRequest per chiamate e appoggia il post‑processing a nodi downstream; conserva i “selettori” in un codebook condiviso per riuso

Controllo costi:

  • screenshot solo quando il DOM cambia (etags/checksum sul DOM)
  • viewport moderati e fullPage solo se serve
  • usa sessioni per ridurre login ripetuti
  • monitora durata media per job e percentuale di retry

[IMG: dashboard costi: job/minuto, tempo medio, retry rate, spesa stimata]

Agenti LLM per navigazione web: quando usarli, con guardrail

Gli agenti LLM possono pianificare click e navigazioni complesse (“vai a X, clicca Y, leggi Z”). Per limitarne i rischi:

  • “tool” ben definiti: l’agente decide “quando” ma tu definisci “cosa” e “come”, con parametri e validazioni
  • validazione deterministica prima dell’esecuzione (schema JSON e whitelisting selettori/URL)
  • fallback: se l’agente fallisce due volte, passa a una routine deterministica o apri un task umano
  • log a prova di audit: conserva input/azioni/output sintetici (senza PII) per diagnosi

Caso d’uso pratico:

  • audit SEO su HTML renderizzato → l’agente propone azioni (es. “cambia H1?”), ma l’esecuzione è gated e richiede conferma umana o passa per un flusso deterministico controllato.

[IMG: ramo AI planner → proposta azioni → validazione → esecuzione o fallback]

Osservabilità e messa in produzione: metriche, alert e sicurezza

Metriche e osservabilità:

  • monitora errori (403/429/5xx), tempi medi/p95, dimensione asset, percentuali di retry
  • endpoint /metrics e /healthz del tuo ambiente n8n per health check
  • dashboard con alert su incremento errori e tempi di rendering

Sicurezza e compliance:

  • non memorizzare credenziali nei nodi; usa variabili d’ambiente per la API key
  • provider con requisiti di sicurezza adeguati (es. SOC 2)
  • rispetto robots.txt e termini d’uso; informa i team legali sui casi d’uso

Checklist di produzione:

  • test con URL di staging e pagine “consentite”
  • codebook selettori stabile (data‑testid preferiti)
  • retry/backoff per 429/5xx; riduzione concorrenza
  • sessioni per login; rotazione proxy se necessario
  • logging e report automatici (screenshot/PDF e KPI)

[IMG: checklist “Ready for prod” con box spuntati]

Quick Takeaways

  • Usa n8n-nodes-base.httpRequest con Authorization: Bearer per integrare Browserless e chiamare /screenshot, /pdf, /scrape, /performance.
  • Sfrutta sessioni persistenti (userDataDir) per ridurre login e latenza; sincronizzati con waitFor e selettori robusti.
  • Applica stealth, proxy e fingerprinting etici; gestisci retry, timeout e rate limiting per affidabilità.
  • Genera asset (PNG/PDF) e metriche di performance per audit SEO su HTML renderizzato.
  • Scala con batching, rate limit per dominio e caching; monitora costi, tempi e retry.
  • Per agenti LLM di navigazione, imponi tool gating, validazione deterministica e fallback.

Conclusione

Portare un browser reale dentro i tuoi workflow sblocca casi impossibili con semplici GET: login, SPA, asset grafici, audit SEO e test end‑to‑end. Con l’automazione headless del browser con n8n orchestrata via n8n-nodes-base.httpRequest, connetti in modo sicuro Browserless, definisci richieste pulite (header Authorization e JSON), gestisci sessioni e selettori solidi e introduci strategie anti‑bot corrette. Quando il volume cresce, governa concorrenza, rate limit e caching per tenere sotto controllo costi e latenza, mentre metriche e alert ti avvisano di regressioni. Per i marketers che vogliono imparare ad usare n8n per migliorare la produttività, il vantaggio è immediato: screenshot e PDF schedulati, estrazioni affidabili per CRM e analisi SEO ripetibili. Inizia da un MVP (PDF/screenshot di 10 URL), stabilizza i selettori e attiva sessioni; poi estendi a scraping autenticati, performance e notifiche automatiche. È la base per pipeline robuste che riducono lavoro manuale e aumentano la qualità dei tuoi dati.

FAQ

  • Come collego Browserless a n8n in pratica?
  • Usa n8n-nodes-base.httpRequest con url dell’endpoint Browserless (es. /screenshot), method: POST, jsonParameters: true, bodyParametersJson per i campi richiesti e header Authorization: Bearer .
  • Posso gestire login e pagine protette?
  • Sì, crea sessioni persistenti (userDataDir) e usa un flusso login → navigazione → waitFor → selettori. Riutilizza la sessione per chiamate successive.
  • Come evito blocchi anti‑bot?
  • Abilita modalità stealth, ruota proxy con moderazione, imposta user agent realistici e sincronizzati con waitFor. Rispetta robots.txt e i ToS.
  • Posso generare PDF e screenshot schedulati?
  • Certo: imposta Cron in n8n e chiama /pdf e /screenshot; salva risultati e inviali via email/Slack. Aggiungi metriche /performance per audit SEO.
  • Come controllo costi e performance?
  • Limita fullPage/viewport e parallelismo, usa caching di pagine stabili, monitora tempi medi e retry. Serializza per dominio e applica rate limiting.

Hai già un caso d’uso concreto per cui vuoi attivare il browser headless? Raccontalo nei commenti e condividi questo articolo con il tuo team: quale pagina o flusso automatizzeresti per primo per ottenere un impatto misurabile in una settimana?

Articoli correlati

Vuoi automazioni AI su misura per la tua azienda?
Scopri la consulenza →

Partiamo da un processo che oggi vi costa ore

Su WhatsApp risponde una persona, di solito in giornata. Se preferisci scrivere con calma, c’è il modulo qui sotto.

Scrivici su WhatsApp

Raccontaci cosa vuoi automatizzare

Ti rispondiamo noi, di solito in giornata.

Raccontaci cosa vi fa perdere tempo

Due righe bastano. Vi diciamo se si automatizza, come, e quanto costa. Se non conviene, lo diciamo.