API de Screenshot: Capture Qualquer Site Programaticamente — TongoRender Blog
Voltar ao Blog
tutorialsscreenshotautomationmonitoring

API de Screenshot: Capture Qualquer Site Programaticamente

Aprenda a capturar screenshots de página inteira de qualquer site usando uma API. Explore casos de uso como monitoramento, testes, arquivamento e prova social com exemplos práticos.

TongoRender Team15 de março de 20269 min

Capturar screenshots de sites programaticamente é uma necessidade surpreendentemente comum. Desenvolvedores usam APIs de screenshot para testes de regressão visual, dashboards de monitoramento de uptime, geração de thumbnails para pré-visualizações de links, arquivamento de páginas web para conformidade e criação de galerias de prova social. Neste guia, exploraremos os principais casos de uso e mostraremos como capturar screenshots pixel-perfect com a API de Screenshot do TongoRender.

Por Que Usar uma API de Screenshot?

Você poderia rodar um navegador headless localmente com Puppeteer ou Playwright, mas uma API dedicada oferece vantagens significativas:

  • Sem infraestrutura para gerenciar — Sem instalações de Chromium, sem gerenciamento de memória, sem limpeza de processos zumbi.
  • Renderização consistente — A API usa versões padronizadas de navegador e conjuntos de fontes, então os screenshots ficam iguais sempre.
  • Disponibilidade global — Renderização na borda significa baixa latência independente de onde seu servidor está.
  • Recursos integrados — Controle de viewport, emulação de dispositivo, seleção de elemento, captura de página inteira e opções de formato (PNG, JPEG, WebP) já vêm prontos.

Caso de Uso 1: Testes de Regressão Visual

Antes de fazer deploy de uma nova versão, capture screenshots de páginas-chave e compare com imagens de referência para detectar mudanças visuais não intencionais:

async function captureScreenshot(url, viewport = { width: 1280, height: 720 }) {
  const response = await fetch('https://api.tongorender.io/v1/screenshot', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.TONGORENDER_API_KEY,
    },
    body: JSON.stringify({ url, viewport, fullPage: false, format: 'png' }),
  });

  if (!response.ok) throw new Error(`Screenshot falhou: ${response.statusText}`);
  return Buffer.from(await response.arrayBuffer());
}

async function visualRegressionTest(pageName, url) {
  const current = await captureScreenshot(url);
  const baselinePath = `baselines/${pageName}.png`;

  if (!fs.existsSync(baselinePath)) {
    fs.writeFileSync(baselinePath, current);
    console.log(`Baseline criada para ${pageName}`);
    return;
  }

  const baseline = fs.readFileSync(baselinePath);
  const diff = await compare(baseline, current);

  if (diff.misMatchPercentage > 0.1) {
    throw new Error(`Regressão visual detectada em ${pageName}: ${diff.misMatchPercentage}% de diferença`);
  }
}

Caso de Uso 2: Dashboard de Monitoramento

Combine captura de screenshots com verificações de uptime para construir um dashboard visual de monitoramento:

async function monitorSite(url) {
  const start = Date.now();
  const screenshot = await captureScreenshot(url, { width: 1440, height: 900 });
  const loadTime = Date.now() - start;

  await uploadToS3(screenshot, `monitoring/${Date.now()}.png`);
  return { url, timestamp: new Date().toISOString(), loadTimeMs: loadTime };
}

Caso de Uso 3: Thumbnails de Pré-visualização de Links

Quando usuários compartilham links na sua plataforma, gere thumbnails de pré-visualização automaticamente:

async function generateThumbnail(url) {
  const response = await fetch('https://api.tongorender.io/v1/screenshot', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.TONGORENDER_API_KEY,
    },
    body: JSON.stringify({
      url,
      viewport: { width: 1200, height: 630 },
      fullPage: false,
      format: 'jpeg',
      quality: 80,
    }),
  });
  return Buffer.from(await response.arrayBuffer());
}

Caso de Uso 4: Arquivamento Web para Conformidade

Setores financeiro, de saúde e jurídico frequentemente exigem o arquivamento de conteúdo web para conformidade regulatória. Uma API de screenshot permite capturar snapshots com timestamp:

async function archivePage(url, caseId) {
  const screenshot = await captureScreenshot(url);
  const metadata = {
    url,
    caseId,
    capturedAt: new Date().toISOString(),
    hash: crypto.createHash('sha256').update(screenshot).digest('hex'),
  };
  await storage.save(`archives/${caseId}/${Date.now()}.png`, screenshot);
  await db.insert('archive_records', metadata);
  return metadata;
}

Opções Avançadas

O endpoint de screenshot do TongoRender suporta várias opções avançadas:

  • Emulação de dispositivo — Capture como iPhone, iPad ou qualquer dispositivo personalizado.
  • Captura de elemento — Use um seletor CSS para capturar um elemento específico em vez da página inteira.
  • Estratégias de espera — Aguarde rede ociosa, um elemento específico ou uma expressão JavaScript antes de capturar.
  • Modo escuro — Emule prefers-color-scheme: dark para screenshots em modo escuro.

Seja para testes, monitoramento, arquivamento ou geração de conteúdo, uma API dedicada remove a complexidade do gerenciamento de navegadores e permite que você foque na construção de funcionalidades.

Experimente a API de Screenshot do TongoRender — 100 capturas gratuitas por mês, sem necessidade de cartão de crédito.

Compartilhe este artigoCompartilhar no Twitter