CAPSOLVER
Blog
Web Scraping com Puppeteer: Detectando Mudanças no Site e Tirando Capturas de Tela

Raspagem da Web com Puppeteer: Detectando Mudanças no Site e Tirando Capturas de Tela

Logo of CapSolver

Adélia Cruz

Neural Network Developer

07-Oct-2024

A coleta de dados da web se tornou uma ferramenta essencial para automatizar a coleta de dados e monitorar sites em busca de alterações. Nesta postagem do blog, exploraremos como usar o Puppeteer, uma biblioteca Node.js, para coleta de dados da web, detectar alterações em um site e tirar capturas de tela dessas alterações.

O que é Puppeteer?

Puppeteer é uma biblioteca Node.js que fornece uma API de alto nível para controlar o Chrome ou Chromium sem cabeça por meio do protocolo DevTools. Ele pode ser usado para coleta de dados da web, testes automatizados ou até mesmo gerar capturas de tela e PDFs de páginas da web.

Pré-requisitos

Antes de começar, certifique-se de ter o seguinte instalado:

Você pode instalar o Puppeteer executando o seguinte comando no seu terminal:

bash Copy
npm install puppeteer

Coleta de dados da web básica com Puppeteer

Para começar, vamos criar um coletor de dados da web básico que navega até um site e extrai o conteúdo de texto.

javascript Copy
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Navegue até o site
    await page.goto('https://example.com');

    // Extraia o conteúdo de texto
    const content = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    console.log('Conteúdo da página:', content);

    await browser.close();
})();

Este script abre um navegador sem cabeça, navega até example.com e extrai o texto do elemento <h1>. Você pode substituir o URL pelo site que deseja coletar dados e ajustar o seletor para corresponder ao elemento que lhe interessa.

Tirando capturas de tela com Puppeteer

O Puppeteer permite que você tire capturas de tela de páginas da web facilmente. Você pode capturar capturas de tela de página inteira ou áreas específicas da página.

Aqui está como tirar uma captura de tela de página inteira:

javascript Copy
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Navegue até o site
    await page.goto('https://example.com');

    // Tire uma captura de tela de página inteira
    await page.screenshot({ path: 'screenshot.png', fullPage: true });

    await browser.close();
})();

Este script salva uma captura de tela de toda a página como screenshot.png. Você pode modificar o path para especificar um nome de arquivo ou local diferente.

Detectando alterações no site

Monitorar um site em busca de alterações é um recurso útil na coleta de dados da web. Você pode fazer isso verificando repetidamente o conteúdo do site e comparando-o com uma versão salva anteriormente.

Aqui está um exemplo de como detectar alterações de texto e tirar uma captura de tela se o conteúdo mudar:

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Navegue até o site
    await page.goto('https://example.com');

    // Extraia o conteúdo de texto
    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    // Verifique se o conteúdo anterior existe
    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    // Compare o conteúdo atual com o conteúdo anterior
    if (currentContent !== previousContent) {
        console.log('O conteúdo mudou!');

        // Salve o novo conteúdo
        fs.writeFileSync(previousContentPath, currentContent);

        // Tire uma captura de tela da alteração
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('Captura de tela salva!');
    } else {
        console.log('Nenhuma alteração detectada.');
    }

    await browser.close();
})();

Neste exemplo:

  • O script extrai o conteúdo do elemento <h1>.
  • Ele compara o conteúdo atual com uma versão salva anteriormente (previous-content.txt).
  • Se uma alteração for detectada, ele tira uma captura de tela e a salva com um carimbo de data/hora no nome do arquivo, garantindo que cada captura de tela seja única.
  • O novo conteúdo é salvo em previous-content.txt para comparações futuras.

Agendando o coletor de dados para executar regularmente

Você pode usar o Node.js para agendar este script para executar em intervalos usando o pacote node-cron.

Primeiro, instale node-cron:

bash Copy
npm install node-cron

Agora, modifique seu script para executar em um intervalo definido (por exemplo, a cada 5 minutos):

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');
const cron = require('node-cron');

cron.schedule('*/5 * * * *', async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto('https://example.com');

    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    if (currentContent !== previousContent) {
        console.log('O conteúdo mudou!');
        fs.writeFileSync(previousContentPath, currentContent);
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('Captura de tela salva!');
    } else {
        console.log('Nenhuma alteração detectada.');
    }

    await browser.close();
});

Este script será executado a cada 5 minutos (*/5 * * * *) e verificará se há alterações no site. Se ele detectar uma alteração, tirará uma captura de tela e registrará a atualização.

Código bônus

Pegue seu Código Bônus para as melhores soluções de captcha em CapSolver: scrape. Após resgatá-lo, você receberá um bônus extra de 5% após cada recarga, ilimitadamente.

Conclusão

Puppeteer é uma ferramenta poderosa para coleta de dados da web e automatização de tarefas de navegador. Neste post, demonstramos como usar o Puppeteer para coleta de dados da web básica, detectar alterações no site e capturar capturas de tela dessas alterações. Com essas técnicas, você pode monitorar sites e acompanhar atualizações automaticamente. Certifique-se de verificar as políticas de coleta de dados da web para evitar violar os termos de serviço.

Copy

Declaração de Conformidade: As informações fornecidas neste blog são apenas para fins informativos. A CapSolver está comprometida em cumprir todas as leis e regulamentos aplicáveis. O uso da rede CapSolver para atividades ilegais, fraudulentas ou abusivas é estritamente proibido e será investigado. Nossas soluções de resolução de captcha melhoram a experiência do usuário enquanto garantem 100% de conformidade ao ajudar a resolver dificuldades de captcha durante a coleta de dados públicos. Incentivamos o uso responsável de nossos serviços. Para mais informações, visite nossos Termos de Serviço e Política de Privacidade.

Mais