Latenode

Capturas de tela com Puppeteer: página inteira, elementos e otimização de tamanho

Aprenda a capturar com eficiência telas de páginas inteiras e elementos específicos usando Puppeteer, com dicas de otimização e automação.

9 min de leitura
Captura de tela de página usando automação com Puppeteer

Puppeteer é uma biblioteca Node.js que simplifica a automação de navegadores, tornando tarefas como capturar screenshots rápidas e eficientes. Seja para capturas de página inteira, snapshots de elementos específicos ou imagens otimizadas, o Puppeteer oferece opções flexíveis com o mínimo de código. Veja o que você pode fazer com o Puppeteer:

  • Screenshots de página inteira: capture páginas completas, incluindo conteúdo que exige rolagem.
  • Capturas de elementos específicos: foque em componentes precisos usando seletores CSS.
  • Otimização de tamanho: controle o formato, a qualidade e o tamanho do arquivo da imagem (por exemplo, PNG, JPEG, WebP).

Exemplo rápido:

await page.screenshot({ path: 'screenshot.jpg', fullPage: true });

Por que usar o Puppeteer?

  • Automatize testes visuais e relatórios de bugs.
  • Economize tempo com interações eficientes no navegador.
  • Personalize screenshots para melhorar o desempenho e a clareza.

Seja você um desenvolvedor testando sites ou documentando erros, o Puppeteer simplifica o processo com ferramentas poderosas e comandos simples.

sbb-itb-23997f1

Capture screenshots de páginas web com o navegador headless baseado em Puppeteer na Latenode!

A Latenode oferece integração direta com a biblioteca Puppeteer, sem precisar instalar nada no seu sistema. Basta escolher um nó na biblioteca de nós de integração, adicioná-lo ao seu fluxo de automação, incluir um script para captura de screenshots e conectá-lo a outros nós. Veja alguns exemplos. Confira e escolha o que atende às suas necessidades!

Exemplo 1: Análise de sites baseada em screenshots

Esta ferramenta de automação foi desenvolvida para analisar e resumir conteúdo web por meio da captura e do processamento de screenshots de sites especificados. Ao usar um navegador headless e integrá-lo à IA, ela permite extrair insights importantes das páginas web. É ótima para monitorar mudanças em sites, analisar concorrentes ou coletar dados visuais para relatórios.

Clone este modelo, personalize-o para suas necessidades e automatize o monitoramento de sites!

Exemplo 2: Coleta de dados de ecommerce (scraper do Ebay)

Este fluxo automatizado foi desenvolvido para coletar e processar resultados de pesquisas na web. Use um navegador headless e código JavaScript assistido por IA para coletar informações de mecanismos de busca, capturar screenshots como referência e salvar os dados para análises posteriores. Esta ferramenta é ideal para pesquisa de mercado ou qualquer tarefa que exija coleta automatizada de dados na web.

Clone este modelo pronto para extrair dados de qualquer produto do Ebay!

Exemplo 3: Scraper para pesquisa de mercado

Esta ferramenta analisa avaliações online de uma empresa especificada e fornece insights acionáveis por meio de análises orientadas por IA. O navegador headless é usado para navegar, capturar screenshots e coletar avaliações, enquanto a IA DeepSeek auxilia na análise detalhada. É ótima para monitorar a reputação da marca, melhorar o atendimento ao cliente e tomar decisões baseadas em dados.

Clone este modelo para coletar avaliações, analisá-las e obter insights detalhados sobre qualquer marca!

Primeiros passos com o Puppeteer

Siga estas etapas para configurar o Puppeteer e começar a capturar conteúdo web. Uma configuração adequada garante um desempenho fluido para diversas necessidades de screenshots, sejam elas de página inteira, de elementos específicos ou otimizadas em tamanho.

Inicie o navegador e a página

Depois de adicionar o nó de navegador headless, crie uma nova instância do navegador com o código a seguir:

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({
        headless: true,
        defaultViewport: { width: 1280, height: 720 }
    });
    const page = await browser.newPage();
    await page.goto('https://example.com');
})();

Isso configura seu ambiente e permite capturar screenshots com precisão.

Defina os parâmetros da página

Para ajustar seus screenshots, configure as opções da viewport. Veja os principais parâmetros:

ParâmetroValor padrãoConfiguração recomendadaFinalidade
Largura800px1280pxCorresponde a uma resolução comum para desktop
Altura600px720pxOferece uma proporção padrão de 16:9
Fator de escala11Mantém o tamanho original
Modo mobilefalsefalseGarante a renderização para desktop

Use o código a seguir para configurar esses parâmetros:

await page.setViewport({
    width: 1280,
    height: 720,
    deviceScaleFactor: 1,
    isMobile: false
});

await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36');

"No Puppeteer, a manipulação da viewport é especialmente importante para tarefas como web scraping, testes de aplicações web em diferentes dispositivos e geração de screenshots ou PDFs de páginas web." — Webshare [2]

Para conteúdo dinâmico, defina um tempo limite para considerar atrasos de carregamento:

page.setDefaultTimeout(30000); // 30 seconds timeout

Com essas configurações, você está pronto para capturar screenshots de alta qualidade adaptados às suas necessidades.

Screenshots de página inteira

Aprenda a capturar screenshots de página inteira com o Puppeteer usando configurações específicas, métodos de rolagem e técnicas de solução de problemas.

Ative o modo de página inteira

Para capturar uma página web completa, incluindo o conteúdo fora da área visível, use a opção fullPage do Puppeteer:

await page.screenshot({
    path: 'complete-page.png',
    fullPage: true
});

Antes de capturar, verifique se a página foi totalmente carregada e se o conteúdo dinâmico terminou de ser renderizado:

await page.waitForNetworkIdle();
await page.waitForTimeout(2000);

Se ainda faltar conteúdo dinâmico no screenshot, considere usar as técnicas de rolagem explicadas abaixo.

Lide com páginas que exigem rolagem

Para páginas que exigem rolagem para carregar todo o conteúdo, você pode automatizar o processo:

async function captureFullPage(page) {
    // Scroll through the page and wait for content to load
    await page.evaluate(async () => {
        return await new Promise((resolve) => {
            const timer = setInterval(() => {
                window.scrollBy(0, window.innerHeight);
                if (document.scrollingElement.scrollTop + window.innerHeight >= document.scrollingElement.scrollHeight) {
                    clearInterval(timer);
                    resolve();
                }
            }, 100);
        });
    });

    // Scroll back to the top, then take the screenshot
    await page.evaluate(() => window.scrollTo(0, 0));
    return await page.screenshot({ fullPage: true });
}

"Capturar screenshots por seções é a melhor solução que temos atualmente para obter screenshots da página completa." [4]

Esse método garante que todas as seções da página sejam carregadas e incluídas na captura.

Corrija problemas comuns

Veja alguns problemas que você pode enfrentar e suas soluções:

ProblemaSoluçãoImplementação
Unidades da viewportDefina uma altura fixa para a viewportawait page.setViewport({ height: 900 });
Carregamento lentoUse rolagem progressivaUse a função captureFullPage
Layouts complexosCapture por seçõesTire vários screenshots e una-os

Para páginas com rolagem infinita ou muito conteúdo dinâmico, adicione um limite de rolagem para evitar loops intermináveis:

const maxScrolls = 10;
let scrollCount = 0;

while (scrollCount < maxScrolls) {
    const previousHeight = await page.evaluate('document.body.scrollHeight');
    await page.evaluate('window.scrollTo(0, document.body.scrollHeight)');
    await page.waitForTimeout(1000);

    const newHeight = await page.evaluate('document.body.scrollHeight');
    if (newHeight === previousHeight) break;

    scrollCount++;
}

"Atualmente, o Puppeteer é a melhor ferramenta do ecossistema para executar um navegador headless... No entanto, o Puppeteer não tem um desempenho perfeito na captura de screenshots." [5]

Para layouts especialmente complexos, nos quais a opção fullPage não funciona como esperado, defina as dimensões manualmente e use-as como parâmetros de recorte:

const dimensions = await page.evaluate(() => {
    return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.scrollHeight
    };
});

await page.screenshot({
    path: 'precise-capture.png',
    clip: {
        x: 0,
        y: 0,
        width: dimensions.width,
        height: dimensions.height
    }
});

Com essas técnicas, você conseguirá lidar com screenshots de página inteira de forma eficiente. A seguir: como capturar elementos específicos e ajustar as configurações de tamanho e qualidade.

Screenshots de elementos

O Puppeteer facilita o foco em elementos específicos, complementando sua capacidade de capturar screenshots de página inteira.

Encontre elementos com CSS

Para selecionar elementos com precisão, use seletores CSS como IDs, classes ou combinações:

// Target by ID (most reliable)
const submitButton = await page.$('#submit-button');

// Use specific class combinations
const productCard = await page.$('.product-card.featured');

// Locate elements within a container
const menuItem = await page.$('.navigation-menu .dropdown-item.active');

Capture screenshots de elementos

Após identificar um elemento, use as ferramentas de screenshot do Puppeteer para capturá-lo:

const element = await page.$('div.product-data');
await element.screenshot({
    path: 'element-screenshot.png',
    type: 'png'
});

Para uma seleção mais avançada, experimente o método page.locator():

const locator = page.locator('div.product-data');
await locator.screenshot({
    path: 'element-locator.png',
    quality: 90
});

"Screenshots de elementos são uma questão de precisão e eficiência. Menos excesso, mais foco." — Laura e Heidi, SCRNIFY

Essa abordagem funciona bem para testes e relatórios automatizados, complementando as capturas de página inteira. Apenas verifique se o elemento foi totalmente carregado antes de capturar o screenshot.

Lide com o carregamento de conteúdo

Elementos dinâmicos geralmente exigem etapas adicionais para garantir que estejam prontos para interação:

// Wait for the element to become visible
const element = await page.waitForSelector('.dynamic-element', {
    visible: true,
    timeout: 5000
});

// Wait for API data to load
await page.waitForResponse(
    response => response.url().includes('/api/data')
);

// Capture the screenshot
await element.screenshot({ path: 'dynamic-element.png' });

Para elementos com condições específicas, crie funções de espera personalizadas:

await page.waitForFunction(() => {
    const element = document.querySelector('.chart-container');
    return element && element.getBoundingClientRect().height > 0;
});

Veja um exemplo real usando os gráficos de criptomoedas do TradingView:

await page.goto("https://www.tradingview.com/markets/cryptocurrencies/");
const chartElement = await page.waitForSelector(".tv-lightweight-charts", {
    visible: true
});
await chartElement.screenshot({ path: 'crypto-graph.png' });

"A espera por um elemento específico é essencial para o processo de automação, pois evita interações prematuras." — ScrapeOps

Ao trabalhar com conteúdo dinâmico, combine diferentes estratégias de espera para obter os melhores resultados:

SituaçãoEstratégia de esperaImplementação
Elementos estáticosSeletor básicopage.$()
Dependente de APIEspera por respostawaitForResponse()
Gráficos renderizadosFunção personalizadawaitForFunction()
Interface visívelVerificação de visibilidadewaitForSelector() com visible: true

Tamanho e qualidade da imagem

Melhorar o tamanho e a qualidade dos screenshots pode aumentar tanto o desempenho quanto a eficiência de armazenamento. Veja como fazer isso de forma eficaz.

Escolha o formato de imagem certo

O formato escolhido para seus screenshots afeta tanto a qualidade quanto o tamanho do arquivo. Veja uma comparação rápida:

FormatoMelhor caso de usoVantagensDesvantagens
WebPAplicações web modernasArquivos menores (25–34% menores), oferece suporte a transparênciaSuporte limitado em navegadores mais antigos
JPEGFotos, screenshots detalhadosArquivos menores, amplo suporteNão oferece transparência
PNGElementos de interface, logosQualidade sem perdas, oferece suporte a transparênciaArquivos maiores

Por exemplo, você pode usar o código a seguir para salvar screenshots nos formatos WebP ou JPEG:

// WebP format
await page.screenshot({
    path: 'screenshot.webp',
    type: 'webp',
    quality: 80
});

// JPEG format
await page.screenshot({
    path: 'screenshot.jpg',
    type: 'jpeg',
    quality: 75
});

Ajuste as configurações de qualidade

As configurações de qualidade ajudam a equilibrar clareza e tamanho do arquivo. Use qualidade mais alta para elementos detalhados da interface e qualidade mais baixa para capturas gerais:

// High quality for UI elements
await page.screenshot({
    path: 'ui-element.jpg',
    quality: 90,
    type: 'jpeg'
});

// Medium quality for general captures
await page.screenshot({
    path: 'full-page.jpg',
    quality: 75,
    type: 'jpeg'
});

"O WebP oferece tamanhos de arquivo 25–35% menores do que o JPEG com o mesmo nível de qualidade." — Google Developers [6]

Reduza o tamanho do arquivo

Para minimizar ainda mais o tamanho do arquivo sem perder clareza, você pode recortar screenshots ou otimizá-los para entrega na web:

// Clip to specific dimensions
await page.screenshot({
    path: 'clipped.jpg',
    clip: {
        x: 0,
        y: 0,
        width: 1280,
        height: 720
    }
});

// Optimize for web delivery
await page.screenshot({
    path: 'optimized.webp',
    type: 'webp',
    quality: 75,
    omitBackground: true
});

Por exemplo, o GitLab relatou uma redução de 80% no tamanho de arquivos PNG por meio de fluxos de otimização [8].

"A versão JPG é muito menor. Do lado do Puppeteer, há uma diferença insignificante na velocidade para gerar um JPG em comparação a um PNG." — Jon Yongfook, fundador do Bannerbear [7]

Recomendações com base no conteúdo

Diferentes tipos de conteúdo exigem formatos e configurações diferentes. Veja um guia rápido:

Tipo de screenshotMelhor formatoConfiguração de qualidadeRedução no tamanho do arquivo
Página inteiraWebP75–80%25–34% menor do que JPEG
Elementos de interfacePNGSem perdasPriorize a qualidade
Conteúdo com muitas fotosJPEG70–80%70–90% menor do que sem compressão

Resumo

O Puppeteer simplifica a automação e os testes web com seus recursos de screenshot. Ele permite capturar páginas inteiras ou elementos específicos, além de oferecer controle sobre a qualidade e o formato da imagem. Além disso, opções de codificação mais rápidas podem ajudar a economizar tempo de processamento [10].

Para obter os melhores resultados, defina as dimensões da viewport de acordo com a resolução necessária e use o método waitForSelector() para garantir que todo o conteúdo seja carregado completamente. Se você usar o formato JPEG, ajuste as configurações de qualidade para equilibrar o tamanho do arquivo e a clareza.

Primeiros passos

Veja como começar a usar o Puppeteer para screenshots:

  • Configure uma integração direta baseada em Puppeteer com o navegador headless na Latenode.
  • Escolha seu tipo de captura — de página inteira ou de elementos específicos — com base nos seus requisitos.
  • Ajuste a saída de imagem configurando o formato e a qualidade.

"O Puppeteer é uma ferramenta poderosa para web scraping e automação de testes, oferecendo alto grau de flexibilidade e controle sobre o processo de captura de screenshots" [3].

Para uma integração ainda mais fluida, considere usar plataformas como a Latenode. Seu criador visual de fluxos permite configurar automações avançadas de screenshots sem exigir habilidades extensas de programação.

References

FAQ

Frequently Asked Questions

Use page.screenshot({ path: 'complete-page.png', fullPage: true }) depois que a página carregar. Para conteúdo dinâmico, aguarde com page.waitForNetworkIdle() ou role a página programaticamente antes de capturar, para que as seções carregadas sob demanda sejam exibidas.

Isso foi útil? Compartilhe →

Escrito por

Vasiliy Datsenko

Head of Customer Support

Vasiliy Datsenko é Head of Customer Support na Latenode e um escritor de automação focado em produto. Seu trabalho conecta conversas com clientes, pesquisa de automação de fluxos de trabalho, casos de uso de IA e educação prática sobre produtos para equipes que tentam automatizar processos de negócios reais.

Perfil do autor →

Verificado por

Oleg Zankov

CEO da Latenode, Especialista em No-code

Com uma filosofia enraizada em inovação, resolução de problemas e experiência do usuário, estou focado em capacitar equipes a criar integrações personalizadas e automatizar fluxos de trabalho com facilidade e eficiência. Trazendo uma vasta experiência em desenvolvimento de negócios, empreendedorismo tecnológico e desenvolvimento de software, reconheci a necessidade de uma solução de integração mais acessível, escalável e adaptável. Assim, nasceu a Latenode.com. Com nossa plataforma, as empresas podem aproveitar o poder da tecnologia sem a necessidade de conhecimentos extensos em programação. Apaixonado por promover um futuro onde a tecnologia nos serve, e não o contrário, minha missão é tornar processos complexos simples. Acredito em democratizar a tecnologia e equipar as equipes com as ferramentas para inovar, crescer e ter sucesso em um mundo cada vez mais digital.

Perfil do autor →

Continue lendo