n8n+DiffHook

n8n + Puppeteer — scraping Chrome headless sem o fardo operacional

O DiffHook dirige o Puppeteer por você, espera o DOM se estabilizar, diferencia o resultado contra o snapshot anterior e entrega as mudanças ao n8n por webhook assinado. Sem binário do Chromium, sem imagem Docker, sem reinício-em-OOM.

Hospedar Puppeteer dentro de um deploy do n8n é uma armadilha clássica: o binário do Chromium incha o tamanho da imagem, os workers vazam memória após algumas centenas de runs e qualquer mudança de página quebra o script de seletores às 3 da manhã. O DiffHook puxa o navegador para uma frota gerenciada. Você descreve uma vez o que monitorar, e o n8n só vê o diff pós-render — nunca os crashes do navegador, nunca a latência de cold start, nunca o drift de versão dos stealth plugins.

n8n

O hub completo de n8n + DiffHook

Todas as receitas, templates e planos de n8n em um só lugar.

Fluxo

Conecte diffs renderizados por Puppeteer ao n8n em 5 passos

O navegador roda do nosso lado. O n8n só enxerga mudanças — sem cold start, sem processos Chromium zumbis.

01

Exponha um webhook do n8n

Adicione um nó disparador Webhook a um fluxo n8n novo ou existente e anote a URL de produção. Esse é o destino onde o DiffHook vai fazer POST quando o DOM renderizado mudar.

02

Escolha html_rendered e o motor Puppeteer

Defina type como html_rendered e render.engine como puppeteer. Adicione wait_for_selector ou wait_until: networkidle para que o DiffHook só tire o snapshot depois que a página terminar de carregar JS e dados.

03

Aponte para o elemento certo com um seletor

O DiffHook roda o seletor CSS contra o DOM renderizado. Um seletor apertado (um card de produto específico, uma linha de preço, um banner de status) mantém o diff focado e faz o n8n só disparar no sinal que importa.

04

Crie o monitor

POST em /v1/monitors com URL, configuração de render, seletor, intervalo e uma entrega webhook para sua URL do n8n. O DiffHook agenda as runs do Puppeteer — você não fica dono de nada em forma de navegador.

05

Reaja à mudança no n8n

Quando a saída do seletor renderizado muda, o nó Webhook do n8n dispara com um corpo JSON assinado: previous_value, current_value, url, detected_at. Verifique o HMAC e roteie o diff para os passos a jusante.

Exemplo de API

Monitor renderizado por Puppeteer num POST

render.engine escolhe o navegador. Puppeteer é um bom default para sites que testam especificamente fingerprints da família 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"
    }
  ]
}

Fluxo importável

Comece com um fluxo n8n pronto

O template verifica o HMAC, parseia o HTML renderizado pelo Puppeteer com HTML Extract e envia linhas estruturadas para um banco Notion. Troque o nó de destino como quiser.

Perguntas frequentes

n8n Puppeteer — perguntas comuns

Puppeteer vs Playwright — qual motor escolher?
São intercambiáveis em ~95% dos sites. Escolha Puppeteer quando o alvo testa explicitamente features do Chrome (chamadas ao Chrome DevTools Protocol, APIs de navegador específicas) ou quando encontrar uma página que se comporta diferente sob os dois. Escolha Playwright quando precisar de controle mais fino sobre waits ou quando o site funciona melhor com o perfil default do Playwright. Trocar entre eles é alterar uma linha na config do monitor.
Preciso rodar meu próprio Chromium em algum lugar?
Não. O DiffHook hospeda a frota Chromium, mantém atualizada e recicla os workers entre runs. Você só manda o POST. É por isso que esse padrão bate o «n8n + nó Puppeteer»: sem binário para instalar, sem imagem para manter, sem alerta de worker crashed para triar.
Como o DiffHook lida com páginas que carregam conteúdo no scroll?
Duas opções. Você pode ligar scroll_to_bottom: true para o Puppeteer rolar automaticamente antes do snapshot, ou fornecer um wait_for_selector que só aparece quando o conteúdo lazy-loaded é montado. Ambos funcionam para listas de produtos em scroll infinito, changelogs carregados preguiçosamente e widgets baseados em intersection-observer.
Posso passar cookies de auth para o Puppeteer?
Sim. Cada monitor tem um array cookies e um mapa request_headers, ambos guardados criptografados. Útil quando você quer observar a visão autenticada de uma app — um painel atrás do login, uma página SaaS por tenant. Rotacione ou revogue as credenciais pelo painel a qualquer momento.
Qual é a cadência mínima em monitores renderizados?
Os mesmos mínimos dos monitores estáticos — 60 segundos nos planos pagos, horária no grátis. O navegador torna cada checagem mais cara em uso do plano, mas o painel sempre mostra o custo efetivo por monitor, sem sustos.

Fluxos relacionados

Também ótimos com o DiffHook

Pare de enviar Chromium junto com sua imagem n8n

Frota Puppeteer gerenciada, webhooks assinados com HMAC, checagens a cada 60 segundos, plano gratuito. Em produção em minutos.