Latenode

Análisis y procesamiento de respuestas de red en Puppeteer: supervisión y modificación

Aprenda a supervisar y modificar eficazmente solicitudes y respuestas de red con Puppeteer para mejorar sus flujos de automatización y pruebas.

9 min de lectura
Panel de Puppeteer mostrando solicitudes y respuestas de red

¿Quiere dominar Puppeteer para la supervisión de redes y la manipulación de respuestas? Esta guía cubre todo lo que necesita saber, desde interceptar solicitudes hasta modificar respuestas de API y realizar pruebas en distintas condiciones de red. A continuación, un vistazo rápido a lo que aprenderá:

  • Supervisar y modificar solicitudes de red: Ajuste encabezados, cargas útiles y respuestas simuladas para realizar pruebas.
  • Analizar respuestas del servidor: Extraiga datos JSON, HTML o binarios para probar API y obtener información sobre el rendimiento.
  • Simular condiciones de red: Realice pruebas con conexiones 3G, 4G o lentas para optimizar el rendimiento.
  • Ejemplos prácticos de código: Configuración y uso paso a paso para casos reales.
  • Consejos legales y de eficiencia: Mantenga el cumplimiento normativo y mejore el rendimiento de Puppeteer mediante caché, filtrado de solicitudes y limitación de velocidad.

Empiece a utilizar Puppeteer para mejorar sus flujos de automatización y agilizar los procesos de pruebas.

Cómo capturar respuestas/solicitudes HTTP con Puppeteer ...

Configuración inicial

A continuación se explica cómo configurar Puppeteer para supervisar respuestas de red paso a paso.

Configuración inicial

Comience con estos pasos:

  • Cree un nuevo directorio para su proyecto de Node.js.
  • Ejecute npm init para inicializar el proyecto.
  • Instale Puppeteer mediante el comando:
npm install puppeteer

A continuación, cree un archivo de script principal y añada el código de configuración básico:

const puppeteer = require('puppeteer');

async function startMonitoring() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    // Continue configuration here
}

Configuración de la interceptación de red

Para supervisar y modificar respuestas de red, debe habilitar la interceptación de solicitudes y configurar detectores de eventos.

// Enable request interception
await page.setRequestInterception(true);

// Set up request listener
page.on('request', request => {
    // Always call continue() to prevent requests from stalling
    request.continue();
});

// Set up response listener
page.on('response', async response => {
    const url = response.url();
    if (response.headers()['content-type'].includes('application/json')) {
        const responseData = await response.json();
        console.log(`Response from ${url}:`, responseData);
    }
});

Como se indica en la documentación oficial de Puppeteer:

"Una vez habilitada la interceptación de solicitudes, cada solicitud se bloqueará a menos que se continúe, responda o cancele" [2].

Un ejemplo de la documentación de 2024 de Agenty muestra cómo interceptar y analizar eficazmente respuestas de API de comercio electrónico [1]. Su método incluye:

await page.setRequestInterception(true);
page.on("request", (req) => {
    if (req.url().includes('/api/prices')) {
        const modifiedData = {
            // Modified request data
            zipCode: '10001'
        };
        req.continue({ postData: JSON.stringify(modifiedData) });
    } else {
        req.continue();
    }
});

Esta configuración le permite:

  • Supervisar todas las solicitudes y respuestas de red.
  • Modificar encabezados y cargas útiles de las solicitudes.
  • Analizar respuestas JSON de las API.
  • Filtrar y rastrear patrones de URL específicos.
  • Gestionar distintos tipos de respuesta.

Consejo: Incluya siempre la gestión de errores, por ejemplo, encapsulando el análisis de respuestas en bloques try-catch, especialmente al trabajar con datos JSON o acceder a propiedades de respuesta.

Esta configuración sienta las bases para técnicas más avanzadas de supervisión de red en las siguientes secciones.

Supervisión de respuestas de red

Puppeteer le permite supervisar las respuestas del servidor mediante detectores de eventos que rastrean la actividad de API y XHR. Esta sección explica cómo supervisar las respuestas de forma eficaz, permitiendo un análisis detallado y posteriores ajustes.

Seguimiento de solicitudes API y XHR

Puede configurar detectores de eventos para realizar un seguimiento de las respuestas API y XHR de la siguiente manera:

// Wait for a specific XHR response
const response = await page.waitForResponse(
    response => response.url().includes('/api/data') && 
                response.request().method() !== 'OPTIONS'
);

// Monitor all responses
page.on('response', async response => {
    const url = response.url();
    const method = response.request().method();
    const status = response.status();

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

Una vez que haya rastreado las respuestas, puede organizar y procesar los datos para utilizarlos posteriormente.

Gestión de datos de respuesta

Clasifique y gestione las respuestas según su tipo de contenido mediante este enfoque:

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

    try {
        if (contentType.includes('application/json')) {
            const jsonData = await response.json();
            // Process JSON data
        } else if (contentType.includes('text/html')) {
            const htmlContent = await response.text();
            // Process HTML content
        }
    } catch (error) {
        console.error('Error processing response:', error);
    }
});

Métodos de extracción de datos

Utilice los siguientes métodos para extraer datos de las respuestas:

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

const data = await searchResponse.json();
const results = data.results;
Tipo de respuestaMétodo de extracciónCaso de uso ideal
JSONresponse.json()Respuestas de API, datos estructurados
Textoresponse.text()Contenido HTML, texto sin formato
Binarioresponse.buffer()Archivos, imágenes, descargas

Para garantizar un rendimiento fluido:

  • Céntrese en patrones de URL y métodos de solicitud específicos.
  • Gestione los errores correctamente.
  • Utilice bloques try-catch para el análisis.
  • Almacene en caché los datos de respuesta cuando corresponda.

El estudio de Agenty [1] demuestra cómo una supervisión cuidadosa de las respuestas puede mejorar significativamente los flujos de automatización.

sbb-itb-23997f1

Métodos de modificación de respuestas

Supervisar las respuestas es solo una parte de la ecuación; modificarlas es esencial para probar casos límite y garantizar que su aplicación funcione correctamente en distintas condiciones. Puppeteer facilita el ajuste de respuestas de red, ayudándole a simular y probar situaciones específicas.

Modificación de encabezados

Ajustar los encabezados HTTP le permite probar mecanismos de autenticación y el comportamiento del servidor. Así puede modificar encabezados con 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 varios encabezados, puede usar setExtraHTTPHeaders como un enfoque más limpio:

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'
});

Estos ajustes le permiten simular distintos contextos de solicitud, como probar contenido localizado o verificar la autenticación basada en tokens.

Pruebas de condiciones de red

Es fundamental probar cómo se comporta su aplicación en distintas condiciones de red. Puppeteer le permite emular diferentes contextos de conectividad, como 3G o conexiones lentas:

Condición de redVelocidad de descargaVelocidad de cargaLatencia
3G750 KB/s250 KB/s100ms
4G4 MB/s3 MB/s20ms
Conexión lenta100 KB/s50 KB/s500ms

Este es un ejemplo de cómo simular una red 3G:

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

Este método le ayuda a identificar cuellos de botella de rendimiento y garantiza que su aplicación sea utilizable en una amplia gama de entornos de red.

Pruebas de respuestas de API

También puede interceptar solicitudes de API y devolver respuestas simuladas. Esto es particularmente útil para probar situaciones específicas sin depender de servidores activos:

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 una mayor fiabilidad, encapsule su lógica de interceptación en un bloque 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('Interception error:', error);
}

Este enfoque garantiza que sus pruebas se ejecuten correctamente, incluso si se producen errores inesperados durante la interceptación de solicitudes.

Herramientas avanzadas de análisis

Puppeteer ofrece una variedad de herramientas para inspeccionar el tráfico en detalle y mejorar el rendimiento.

Guía de Chrome DevTools Protocol

Chrome DevTools Protocol (CDP) permite realizar una supervisión y depuración avanzadas. Este es un ejemplo de cómo utilizarlo:

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

// Set up network interception
await client.send('Network.setRequestInterception', {
    patterns: [{ urlPattern: '*' }]
});

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

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

También puede recopilar métricas de rendimiento mediante CDP:

// Get runtime metrics
const metrics = await page.metrics();
console.log('JavaScript memory:', metrics.JSHeapUsedSize);

// Start performance tracing
await page.tracing.start();
await page.goto('https://example.com');
await page.tracing.stop();

Estas herramientas le ayudan a supervisar la actividad de red y analizar cuellos de botella de rendimiento de forma eficaz.

Análisis de archivos HAR

Los archivos HAR (HTTP Archive) proporcionan un registro completo de la actividad de red, lo que los hace ideales para el análisis del rendimiento. Este es un ejemplo práctico de cómo crear un archivo 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);
});

Al analizar archivos HAR, preste atención a estas métricas:

MétricaDescripciónRango habitual
Tiempo hasta el primer byteTiempo hasta recibir la primera respuesta100-500ms
Tiempo de descargaTiempo para transferir recursos200ms-2s
Búsqueda de DNSTiempo para resolver el dominio0-100ms
Negociación SSLTiempo para el intercambio de seguridad50-150ms

Estas métricas ayudan a identificar problemas de rendimiento y a mejorar la capacidad de respuesta de su aplicación.

Integración con Latenode

Latenode mejora las capacidades de supervisión de Puppeteer al añadir comprobaciones de estado automatizadas y diagnósticos visuales. Por ejemplo, TimePaste utiliza un nodo personalizado para supervisar aplicaciones web:

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

    // Enable real-time status monitoring
    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 
        });
    }
};

"Automatice la supervisión de sitios web y API con el nodo personalizado de TimePaste. Ahorre tiempo y mejore la fiabilidad al recibir actualizaciones en tiempo real y capturas de pantalla de los problemas. Los nodos personalizados ofrecen automatización avanzada sin necesidad de amplios conocimientos técnicos, lo que le permite reproducir funcionalidades SaaS de forma eficiente." [3]

Con Latenode, puede:

  • Configurar comprobaciones de estado automatizadas.
  • Capturar capturas de pantalla de problemas como evidencia visual.
  • Habilitar notificaciones en tiempo real.

Estas funciones agilizan la supervisión y garantizan que los problemas se aborden con rapidez.

Resolución de problemas y directrices

Resolución de problemas

La supervisión de red en Puppeteer puede encontrarse con algunos problemas habituales, como respuestas de red ausentes. Esto suele ocurrir cuando la interceptación de solicitudes no se gestiona correctamente.

Para evitarlo, llame siempre a request.continue() durante la interceptación de solicitudes, incluso si solo está supervisando las respuestas:

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

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

Otro consejo: deshabilite la caché para asegurarse de que se capturen todas las respuestas:

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

Estos pasos contribuyen a una supervisión de red más fluida y le preparan para los consejos de rendimiento que se presentan a continuación.

Consejos de velocidad y eficiencia

Mejore el rendimiento de Puppeteer con estas técnicas de optimización:

TécnicaCómo implementarlaImpacto en el rendimiento
Configuración mínima de ChromeUtilice interruptores de Chrome para deshabilitar funciones innecesariasReduce el tiempo de inicio en un 20–30%
Caché de recursosUtilice userDataDir para reutilizar activosAcelera la carga de páginas en un 40%
Filtrado de solicitudesBloquee anuncios, rastreadores y otros recursos innecesariosReduce la carga de red en un 25–35%
Optimización de capturas de pantallaGuarde las capturas en formato JPG con almacenamiento BufferReduce el tamaño de los archivos en un 50–60%

Por ejemplo, puede filtrar recursos no esenciales, como imágenes y fuentes, para reducir la carga de red:

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

Estos ajustes pueden hacer que Puppeteer sea más rápido y eficiente.

Directrices legales

Las mejoras técnicas son importantes, pero mantenerse dentro de los límites legales y éticos es igual de fundamental. Estas son algunas prácticas clave que debe seguir:

  • Obtenga consentimiento explícito antes de recopilar datos personales.
  • Revise las políticas de automatización de los sitios web con los que interactúa.
  • Utilice limitación de velocidad para evitar sobrecargar los servidores.

Este es un ejemplo de limitación de velocidad responsable:

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

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

Para el cumplimiento normativo a nivel empresarial, tenga en cuenta estas medidas:

  1. Protocolos de gestión de datos: Limite la recopilación de datos, establezca políticas de retención y documente las actividades de procesamiento.
  2. Controles de acceso: Utilice autenticación y autorización para proteger datos sensibles.
  3. Registros de auditoría: Mantenga registros detallados con marcas de tiempo y los cambios realizados.

Equilibrar las optimizaciones de rendimiento con el cumplimiento legal garantiza que sus iniciativas de automatización sean eficaces y responsables.

Conclusión

Resumen

Puppeteer proporciona a los desarrolladores herramientas para supervisar y modificar el tráfico web de forma eficaz. Al interceptar solicitudes y analizar respuestas, los desarrolladores pueden ajustar la carga de páginas, simular distintas condiciones de red y gestionar contenido dinámico. Este nivel de control sobre las solicitudes HTTP permite crear flujos de automatización precisos.

Ahora, exploremos cómo puede utilizar Latenode para simplificar la supervisión de red.

Primeros pasos con Latenode

Latenode se basa en las capacidades de Puppeteer para automatizar el análisis de red. Sus funciones de nodo personalizado hacen que la supervisión sea más eficiente y fácil de usar [3].

"Automatice la supervisión de sitios web y API con el nodo personalizado de TimePaste. Ahorre tiempo y mejore la fiabilidad al recibir actualizaciones en tiempo real y capturas de pantalla de los problemas. Los nodos personalizados ofrecen automatización avanzada sin necesidad de amplios conocimientos técnicos, lo que le permite reproducir funcionalidades SaaS de forma eficiente." [3]

Así puede implementar el análisis de respuestas de red con Latenode:

  • Configure el nodo personalizado TimePaste.
  • Configure las comprobaciones de estado correcto.
  • Habilite la captura de pantalla.
  • Añada supervisión de patrones de texto.
  • Ajuste los retrasos de carga de página.

El constructor visual de flujos de Latenode y la generación de código asistida por IA, combinados con las herramientas de red de Puppeteer, crean un potente sistema de supervisión. Esta integración ofrece información en tiempo real sobre las aplicaciones web y mejora sus flujos de automatización.

References

FAQ

Frequently Asked Questions

La interceptación de solicitudes permite supervisar, modificar, cancelar o simular solicitudes HTTP antes de que lleguen a la red. Actívela con page.setRequestInterception(true) y, a continuación, gestione cada solicitud en un listener de page.on('request'). Cada solicitud interceptada debe continuarse, responderse o cancelarse; de lo contrario, quedará bloqueada.

¿Te resultó útil? Compártelo →

Escrito por

Vasiliy Datsenko

Jefe de Soporte al Cliente

Vasiliy Datsenko es Jefe de Soporte al Cliente en Latenode y un escritor de automatización centrado en productos. Su trabajo conecta las conversaciones con los clientes, la investigación sobre automatización de flujos de trabajo, los casos de uso de IA y la educación práctica sobre productos para equipos que intentan automatizar procesos comerciales reales.

Perfil del autor →

Verificado por

Oleg Zankov

CEO Latenode, No-code Expert

Con una ética arraigada en la innovación, la resolución de problemas y la experiencia de usuario, me enfoco en capacitar a los equipos para crear integraciones personalizadas y automatizar flujos de trabajo con facilidad y eficiencia. Trayendo una gran experiencia en desarrollo empresarial, emprendimiento tecnológico y desarrollo de software, reconocí la necesidad de una solución de integración más accesible, escalable y adaptable. Así nació Latenode.com. Con nuestra plataforma, las empresas pueden aprovechar el poder de la tecnología sin necesidad de conocimientos extensos de codificación. Apasionado por fomentar un futuro donde la tecnología nos sirva, y no al revés, mi misión es simplificar procesos complejos. Creo en democratizar la tecnología y equipar a los equipos con las herramientas para innovar, crecer y tener éxito en un mundo cada vez más digital.

Perfil del autor →

Seguir leyendo