Latenode

Análise e processamento de respostas de rede no Puppeteer: monitoramento e modificação

Aprenda a monitorar e modificar com eficiência solicitações e respostas de rede usando o Puppeteer para aprimorar fluxos de automação e testes.

9 min de leitura
Ilustração de monitoramento e modificação de respostas de rede no Puppeteer

Quer dominar o Puppeteer para monitoramento de rede e manipulação de respostas? Este guia aborda tudo o que você precisa saber — desde a interceptação de solicitações até a modificação de respostas de API e testes em diferentes condições de rede. Confira rapidamente o que você vai aprender:

  • Monitore e modifique solicitações de rede: ajuste cabeçalhos, payloads e respostas simuladas para testes.
  • Analise respostas do servidor: extraia dados JSON, HTML ou binários para testes de API e insights de desempenho.
  • Simule condições de rede: teste em 3G, 4G ou conexões lentas para otimizar o desempenho.
  • Exemplos práticos de código: configuração e uso passo a passo para situações reais.
  • Dicas legais e de eficiência: mantenha a conformidade e melhore o desempenho do Puppeteer com cache, filtragem de solicitações e limitação de taxa.

Comece a usar o Puppeteer para aprimorar seus fluxos de automação e simplificar os processos de teste.

Como capturar respostas/solicitações HTTP usando o Puppeteer ...

Configuração e preparação

Veja como configurar o Puppeteer para monitorar respostas de rede passo a passo.

Configuração inicial

Comece com estas etapas:

  • Crie um novo diretório para seu projeto em Node.js.
  • Execute npm init para inicializar o projeto.
  • Instale o Puppeteer usando o comando:
npm install puppeteer

Em seguida, crie um arquivo de script principal e adicione o código básico de configuração:

const puppeteer = require('puppeteer');

async function startMonitoring() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    // Continue a configuração aqui
}

Configuração da interceptação de rede

Para monitorar e modificar respostas de rede, você precisa ativar a interceptação de solicitações e configurar os ouvintes de eventos.

// Ative a interceptação de solicitações
await page.setRequestInterception(true);

// Configure o ouvinte de solicitações
page.on('request', request => {
    // Sempre chame continue() para evitar que as solicitações fiquem paradas
    request.continue();
});

// Configure o ouvinte de respostas
page.on('response', async response => {
    const url = response.url();
    if (response.headers()['content-type'].includes('application/json')) {
        const responseData = await response.json();
        console.log(`Resposta de ${url}:`, responseData);
    }
});

Conforme observado na documentação oficial do Puppeteer:

"Quando a interceptação de solicitações está ativada, todas as solicitações ficam paradas, a menos que sejam continuadas, respondidas ou canceladas" [2].

Um exemplo da documentação de 2024 da Agenty mostra como interceptar e analisar respostas de APIs de e-commerce de forma eficaz [1]. O método inclui:

await page.setRequestInterception(true);
page.on("request", (req) => {
    if (req.url().includes('/api/prices')) {
        const modifiedData = {
            // Dados da solicitação modificados
            zipCode: '10001'
        };
        req.continue({ postData: JSON.stringify(modifiedData) });
    } else {
        req.continue();
    }
});

Essa configuração permite:

  • Monitorar todas as solicitações e respostas de rede.
  • Modificar cabeçalhos e payloads das solicitações.
  • Analisar respostas JSON de APIs.
  • Filtrar e acompanhar padrões específicos de URL.
  • Lidar com vários tipos de resposta.

Dica: sempre inclua tratamento de erros, como envolver a análise de respostas em blocos try-catch, especialmente ao trabalhar com dados JSON ou acessar propriedades de resposta.

Essa configuração prepara o terreno para técnicas mais avançadas de monitoramento de rede nas próximas seções.

Monitoramento de respostas de rede

O Puppeteer permite monitorar respostas do servidor usando ouvintes de eventos para acompanhar atividades de API e XHR. Esta seção explica como monitorar respostas de forma eficaz, permitindo análises detalhadas e ajustes posteriores.

Acompanhamento de solicitações de API e XHR

Você pode configurar ouvintes de eventos para acompanhar respostas de API e XHR da seguinte forma:

// Aguarde uma resposta XHR específica
const response = await page.waitForResponse(
    response => response.url().includes('/api/data') && 
                response.request().method() !== 'OPTIONS'
);

// Monitore todas as respostas
page.on('response', async response => {
    const url = response.url();
    const method = response.request().method();
    const status = response.status();

    console.log(`${method} ${url}: ${status}`);
});

Depois de acompanhar as respostas, você pode organizar e processar os dados para uso posterior.

Gerenciamento de dados de resposta

Classifique e trate respostas com base no tipo de conteúdo usando esta abordagem:

page.on('response', async response => {
    const contentType = response.headers()['content-type'];

    try {
        if (contentType.includes('application/json')) {
            const jsonData = await response.json();
            // Processe os dados JSON
        } else if (contentType.includes('text/html')) {
            const htmlContent = await response.text();
            // Processe o conteúdo HTML
        }
    } catch (error) {
        console.error('Erro ao processar a resposta:', error);
    }
});

Métodos de extração de dados

Use os métodos a seguir para extrair dados das respostas:

const searchResponse = await page.waitForResponse(
    response => response.url().includes('sample-search.php')
);

const data = await searchResponse.json();
const results = data.results;
Tipo de respostaMétodo de extraçãoMelhor caso de uso
JSONresponse.json()Respostas de API, dados estruturados
Textoresponse.text()Conteúdo HTML, texto simples
Binárioresponse.buffer()Arquivos, imagens, downloads

Para garantir um desempenho fluido:

  • Foque em padrões específicos de URL e métodos de solicitação
  • Trate erros de forma adequada
  • Use blocos try-catch para análise
  • Armazene dados de resposta em cache quando aplicável

O estudo da Agenty [1] demonstra como um monitoramento cuidadoso de respostas pode melhorar significativamente os fluxos de automação.

sbb-itb-23997f1

Métodos de modificação de respostas

Monitorar respostas é apenas parte da equação; modificá-las é essencial para testar casos extremos e garantir que sua aplicação tenha bom desempenho em várias condições. O Puppeteer facilita o ajuste das respostas de rede, ajudando você a simular e testar situações específicas.

Modificação de cabeçalhos

Ajustar cabeçalhos HTTP permite testar mecanismos de autenticação e o comportamento do servidor. Veja como modificar cabeçalhos usando o Puppeteer:

await page.setRequestInterception(true);
page.on('request', (request) => {
    const headers = request.headers();
    headers['Authorization'] = 'Bearer YOUR_TOKEN';
    headers['Accept-Language'] = 'en-US';
    request.continue({ headers });
});

Para vários cabeçalhos, você pode usar setExtraHTTPHeaders para uma abordagem mais limpa:

await page.setExtraHTTPHeaders({
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml',
    'accept-language': 'en-US,en;q=0.9'
});

Esses ajustes permitem simular diferentes situações de solicitação, como testar conteúdo localizado ou verificar autenticação baseada em token.

Testes de condições de rede

Testar como sua aplicação se comporta em várias condições de rede é fundamental. O Puppeteer permite emular diferentes situações de conectividade, como 3G ou conexões lentas:

Condição de redeVelocidade de downloadVelocidade de uploadLatência
3G750 KB/s250 KB/s100ms
4G4 MB/s3 MB/s20ms
Conexão lenta100 KB/s50 KB/s500ms

Veja um exemplo de como simular uma rede 3G:

await page.emulateNetworkConditions({
    download: 768000,
    upload: 256000,
    latency: 100
});

Esse método ajuda a identificar gargalos de desempenho e garante que seu aplicativo seja utilizável em diversos ambientes de rede.

Testes de resposta de API

Você também pode interceptar solicitações de API e retornar respostas simuladas. Isso é especialmente útil para testar situações específicas sem depender de servidores ativos:

await page.route('https://api.example.com/data', route => {
    route.fulfill({
        status: 200,
        contentType: 'application/json',
        body: JSON.stringify({
            success: true,
            data: {
                id: 123,
                status: 'completed'
            }
        })
    });
});

Para aumentar a confiabilidade, envolva sua lógica de interceptação em um bloco try/catch:

try {
    page.on('request', async request => {
        if (request.url().includes('/api/')) {
            const mockResponse = {
                status: 200,
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ test: true })
            };
            await request.respond(mockResponse);
        } else {
            await request.continue();
        }
    });
} catch (error) {
    console.error('Erro de interceptação:', error);
}

Essa abordagem garante que seus testes sejam executados sem problemas, mesmo se ocorrerem erros inesperados durante a interceptação de solicitações.

Ferramentas avançadas de análise

O Puppeteer oferece diversas ferramentas para inspeção detalhada de tráfego e melhoria de desempenho.

Guia do Chrome DevTools Protocol

O Chrome DevTools Protocol (CDP) permite monitoramento e depuração avançados. Veja um exemplo de como usá-lo:

const client = await page.target().createCDPSession();
await client.send('Network.enable');

// Configure a interceptação de rede
await client.send('Network.setRequestInterception', {
    patterns: [{ urlPattern: '*' }]
});

client.on('Network.requestIntercepted', async ({ interceptionId, request }) => {
    const response = await client.send('Network.getResponseBodyForInterception', {
        interceptionId
    });

    console.log(`Tamanho da resposta: ${response.body.length} bytes`);
    await client.send('Network.continueInterceptedRequest', {
        interceptionId
    });
});

Você também pode coletar métricas de desempenho usando o CDP:

// Obtenha métricas de execução
const metrics = await page.metrics();
console.log('Memória JavaScript:', metrics.JSHeapUsedSize);

// Inicie o rastreamento de desempenho
await page.tracing.start();
await page.goto('https://example.com');
await page.tracing.stop();

Essas ferramentas ajudam você a monitorar a atividade de rede e analisar gargalos de desempenho de forma eficaz.

Análise de arquivos HAR

Arquivos HAR (HTTP Archive) fornecem um registro completo da atividade de rede, tornando-os excelentes para análise de desempenho. Veja um exemplo prático de criação de um arquivo HAR:

const har = {
    log: {
        version: '1.2',
        entries: []
    }
};

page.on('response', async response => {
    const entry = {
        startedDateTime: new Date().toISOString(),
        request: {
            method: response.request().method(),
            url: response.url(),
            headers: response.request().headers()
        },
        response: {
            status: response.status(),
            headers: response.headers()
        }
    };
    har.log.entries.push(entry);
});

Ao analisar arquivos HAR, acompanhe estas métricas:

MétricaDescriçãoFaixa típica
Tempo até o primeiro byteTempo para a primeira resposta100-500ms
Tempo de downloadTempo para transferir recursos200ms-2s
Consulta DNSTempo para resolução de domínio0-100ms
Negociação SSLTempo para estabelecimento da conexão segura50-150ms

Essas métricas ajudam a identificar problemas de desempenho e melhorar a capacidade de resposta da sua aplicação.

Integração com Latenode

A Latenode aprimora os recursos de monitoramento do Puppeteer ao adicionar verificações automatizadas de integridade e diagnósticos visuais. Por exemplo, o TimePaste usa um nó personalizado para monitorar aplicações web:

const monitor = async (page) => {
    await page.setViewport({ width: 1920, height: 1080 });

    // Ative o monitoramento de status em tempo real
    const status = await page.evaluate(() => {
        return document.querySelector('.status-indicator').textContent;
    });

    if (status !== 'All checks passing') {
        await page.screenshot({ 
            path: `error-${Date.now()}.png`,
            fullPage: true 
        });
    }
};

"Automatize o monitoramento de sites e APIs com o nó personalizado do TimePaste. Economize tempo e aumente a confiabilidade ao receber atualizações em tempo real e capturas de tela de problemas. Os nós personalizados oferecem automação avançada sem exigir amplo conhecimento técnico, permitindo replicar funcionalidades de SaaS com eficiência." [3]

Com a Latenode, você pode:

  • Configurar verificações automatizadas de integridade
  • Capturar screenshots de problemas como evidência visual
  • Ativar notificações em tempo real

Esses recursos simplificam o monitoramento e garantem que os problemas sejam resolvidos prontamente.

Solução de problemas e diretrizes

Resolução de problemas

O monitoramento de rede no Puppeteer pode apresentar alguns problemas comuns, como respostas de rede ausentes. Isso geralmente acontece quando a interceptação de solicitações não é tratada corretamente.

Para evitar isso, sempre chame request.continue() durante a interceptação de solicitações — mesmo se estiver apenas monitorando respostas:

await page.setRequestInterception(true);
page.on('request', request => {
    request.continue();
});

page.on('response', async response => {
    console.log(`Resposta recebida: ${response.url()}`);
});

Outra dica: desative o cache para garantir que todas as respostas sejam capturadas:

await page.setCacheEnabled(false);
await page.setDefaultNavigationTimeout(30000);

Essas etapas ajudam a garantir um monitoramento de rede mais fluido e preparam você para as dicas de desempenho a seguir.

Dicas de velocidade e eficiência

Melhore o desempenho do Puppeteer com estas técnicas de otimização:

TécnicaComo implementarImpacto no desempenho
Configurações mínimas do ChromeUse opções do Chrome para desativar recursos desnecessáriosReduz o tempo de inicialização em 20–30%
Cache de recursosUse userDataDir para reutilizar ativosAcelera o carregamento de páginas em 40%
Filtragem de solicitaçõesBloqueie anúncios, rastreadores e outros recursos desnecessáriosReduz a carga de rede em 25–35%
Otimização de screenshotsSalve screenshots em formato JPG com armazenamento em BufferReduz o tamanho dos arquivos em 50–60%

Por exemplo, você pode filtrar recursos não essenciais, como imagens e fontes, para reduzir a carga de rede:

const blockedResources = ['image', 'stylesheet', 'font'];
await page.setRequestInterception(true);
page.on('request', request => {
    if (blockedResources.includes(request.resourceType())) {
        request.abort();
    } else {
        request.continue();
    }
});

Esses ajustes podem tornar o Puppeteer mais rápido e eficiente.

Diretrizes legais

Melhorias técnicas são importantes, mas manter-se dentro de limites legais e éticos é igualmente essencial. Veja algumas práticas importantes a seguir:

  • Obtenha consentimento explícito antes de coletar dados pessoais.
  • Verifique as políticas de automação dos sites com os quais você interage.
  • Use limitação de taxa para evitar sobrecarregar servidores.

Veja um exemplo de limitação de taxa responsável:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

async function responsibleMonitoring(page, url) {
    await delay(2000);
    await page.goto(url, { waitUntil: 'networkidle0' });
}

Para conformidade em nível empresarial, considere estas medidas:

  1. Protocolos de tratamento de dados: limite a coleta de dados, defina políticas de retenção e documente as atividades de processamento.
  2. Controles de acesso: use autenticação e autorização para proteger dados sensíveis.
  3. Registros de auditoria: mantenha logs detalhados com timestamps e quaisquer alterações realizadas.

Equilibrar otimizações de desempenho com conformidade legal garante que seus esforços de automação sejam eficazes e responsáveis.

Conclusão

Resumo

O Puppeteer fornece aos desenvolvedores ferramentas para monitorar e modificar o tráfego web de forma eficaz. Ao interceptar solicitações e analisar respostas, os desenvolvedores podem ajustar o carregamento de páginas, simular diferentes condições de rede e gerenciar conteúdo dinâmico. Esse nível de controle sobre solicitações HTTP permite fluxos de automação precisos.

Agora, vamos explorar como você pode usar a Latenode para simplificar o monitoramento de rede.

Começando com a Latenode

A Latenode amplia os recursos do Puppeteer para automatizar a análise de rede. Seus recursos de nós personalizados tornam o monitoramento mais eficiente e fácil de usar [3].

"Automatize o monitoramento de sites e APIs com o nó personalizado do TimePaste. Economize tempo e aumente a confiabilidade ao receber atualizações em tempo real e capturas de tela de problemas. Os nós personalizados oferecem automação avançada sem exigir amplo conhecimento técnico, permitindo replicar funcionalidades de SaaS com eficiência." [3]

Veja como implementar a análise de respostas de rede com a Latenode:

  • Configure o nó personalizado do TimePaste
  • Configure verificações de status de sucesso
  • Ative a captura de screenshots
  • Adicione monitoramento de padrões de texto
  • Ajuste os atrasos de carregamento de página

O criador visual de fluxos e a geração de código assistida por IA da Latenode, combinados com as ferramentas de rede do Puppeteer, criam um sistema de monitoramento poderoso. Essa integração oferece insights em tempo real sobre aplicações web, aprimorando seus fluxos de automação.

References

FAQ

Frequently Asked Questions

A interceptação de solicitações permite monitorar, modificar, interromper ou simular solicitações HTTP antes que elas cheguem à rede. Ative-a com page.setRequestInterception(true) e processe cada solicitação em um listener page.on('request'). Toda solicitação interceptada deve ser continuada, respondida ou interrompida — caso contrário, ela ficará bloqueada.

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