Latenode

Gestión de cookies en Puppeteer: conservación de sesiones, emulación de autenticación y limitaciones

Domine la gestión de cookies en Puppeteer para mantener sesiones y autenticación, teniendo en cuenta sus limitaciones y mejores prácticas.

9 min de lectura
Ilustración de gestión de cookies y sesiones autenticadas en Puppeteer

¿Quiere optimizar la gestión de sesiones y las pruebas de autenticación con Puppeteer? Esto es lo que necesita saber para gestionar las cookies de forma eficaz:

  • Por qué importan las cookies: Almacenan datos de sesión, preferencias y detalles de inicio de sesión.
  • Qué puede hacer: Guardar sesiones, probar la autenticación, gestionar estados e incluso imitar el comportamiento de usuarios reales.
  • Cómo gestionarlas: Puppeteer permite establecer, obtener y eliminar cookies mediante programación.
  • Desafíos que debe tener en cuenta: Riesgos de seguridad, limitaciones del navegador y gestión del ciclo de vida de las cookies.

Funciones clave:

  • Persistencia de sesión: Guarde y recargue cookies para mantener los estados de inicio de sesión.
  • Automatización de la autenticación: Use cookies para evitar pasos repetitivos de inicio de sesión.
  • Casos de uso prácticos: Automatice carritos de compra, pruebe roles de usuario y mucho más.

Consejo rápido: Guarde las cookies en formato JSON, use contextos de navegador independientes y supervise las fechas de expiración para evitar problemas.

Aprenda a establecer, recuperar y proteger cookies en Puppeteer mientras aborda sus limitaciones.

Conceptos básicos de las cookies en Puppeteer

Fundamentos de las cookies

Las cookies se utilizan para almacenar información de estado durante las interacciones. En Puppeteer, funcionan como las cookies web habituales, pero se gestionan mediante programación usando métodos específicos tanto a nivel de página como de contexto del navegador.

Cuando un sitio web establece una cookie, esta se incluye automáticamente en los encabezados de solicitudes futuras a ese sitio, lo que garantiza la continuidad de la sesión. Puppeteer ofrece tres métodos principales para gestionar cookies:

MétodoFinalidadAlcance
page.cookies()Recupera cookies de la página actualEspecífico de la página
page.setCookie()Establece cookies antes de navegar por la páginaEspecífico de la página
context.addCookies()Establece cookies para varias páginasContexto del navegador

Al comprender estos métodos, podrá gestionar cookies de forma eficaz, ya sea para establecerlas, recuperarlas o eliminarlas.

Propiedades de las cookies

Las cookies incluyen varios atributos que definen su comportamiento y configuración de seguridad:

PropiedadDescripciónEjemplo de uso
NombreIdentificador de la cookiesessionId
ValorDatos almacenados en la cookieuser123token
DominioDominio en el que la cookie es válida.example.com
RutaRuta de URL para la cookie/dashboard
ExpiraciónFecha y hora de expiración03/30/2025 12:00 PM EST
SecureLimita el uso a conexiones HTTPStrue o false
HttpOnlyRestringe el acceso únicamente al lado del servidortrue o false
SameSiteControla el comportamiento entre sitiosStrict, Lax o None

Las cookies en Puppeteer pueden persistir hasta su expiración o durar únicamente durante la sesión actual del navegador. Además, las cookies establecidas en un contexto de navegador no se comparten con otro, lo que garantiza el aislamiento entre tareas.

Como prácticas recomendadas:

  • Guarde las cookies en formato JSON para reutilizarlas fácilmente.
  • Actualice las cookies con regularidad para evitar problemas de expiración.
  • Use contextos de navegador independientes para diferentes tareas de automatización.
  • Controle el tamaño de las cookies para evitar límites de almacenamiento.

A continuación, aprenda a gestionar estas cookies mediante programación en Puppeteer.

Tutorial de Puppeteer para Node.js n.º 9: guardar y reutilizar cookies

Gestión de cookies en Puppeteer

Aprenda a gestionar cookies en Puppeteer con estos métodos prácticos. Estas técnicas son fundamentales para administrar datos de sesión y autenticación, aspectos que se explorarán más adelante en tareas relacionadas.

Establecimiento de cookies

Use page.setCookie() para definir una o varias cookies. Esto ayuda a mantener eficazmente el estado de la sesión. A continuación, se muestra cómo hacerlo:

// Setting a single cookie
await page.setCookie({
  name: 'sessionToken',
  value: 'abc123xyz',
  domain: '.example.com',
  path: '/',
  expires: Math.floor(Date.now() / 1000) + 3600, // 1 hour from now
  httpOnly: true,
  secure: true,
  sameSite: 'Strict'
});

// Setting multiple cookies
await page.setCookie([
  {
    name: 'userPrefs',
    value: 'darkMode',
    domain: '.example.com'
  },
  {
    name: 'language',
    value: 'en-US',
    domain: '.example.com'
  }
]);

Parámetros clave de las cookies que debe tener en cuenta:

ParámetroObligatorioDescripción
nameEl identificador de la cookie
valueDatos almacenados en la cookie
domainEl dominio al que se aplica
pathNoLa ruta de URL a la que se aplica
expiresNoMarca de tiempo de expiración
httpOnlyNoRestringe el uso al servidor
secureNoRequiere HTTPS

Obtención de cookies

Recupere cookies con el método page.cookies(). Puede obtener todas las cookies o centrarse en un dominio específico:

// Get all cookies
const allCookies = await page.cookies();

// Get cookies for a specific domain
const domainCookies = await page.cookies('https://example.com');

Para extraer el valor de una cookie específica, use una función auxiliar como esta:

async function getCookieValue(page, cookieName) {
  const cookies = await page.cookies();
  const targetCookie = cookies.find(cookie => cookie.name === cookieName);
  return targetCookie ? targetCookie.value : null;
}

Eliminación de cookies

Puede eliminar cookies de forma individual o masiva:

// Remove a specific cookie
await page.deleteCookie({
  name: 'sessionToken',
  domain: '.example.com'
});

// Clear all cookies
await page.deleteCookie(...await page.cookies());

Para el mantenimiento continuo, considere automatizar la eliminación de cookies expiradas:

async function cleanupExpiredCookies(page) {
  const cookies = await page.cookies();
  const now = Date.now() / 1000;

  for (const cookie of cookies) {
    if (cookie.expires && cookie.expires < now) {
      await page.deleteCookie({
        name: cookie.name,
        domain: cookie.domain
      });
    }
  }
}

Use siempre await con las operaciones de cookies para garantizar una ejecución adecuada y evitar condiciones de carrera.

sbb-itb-23997f1

Gestión de sesiones

Almacenamiento y recuperación de cookies

Para mantener sesiones persistentes, puede guardar las cookies en un archivo JSON y recargarlas cuando sea necesario. Esta es una forma práctica de hacerlo:

const fs = require('fs');

async function saveCookies(page, filePath) {
  const cookies = await page.cookies();
  fs.writeFileSync(filePath, JSON.stringify(cookies, null, 2));
}

async function loadCookies(page, filePath) {
  const cookieData = fs.readFileSync(filePath);
  const cookies = JSON.parse(cookieData);
  await page.setCookie(...cookies);
}

Consideraciones clave:

  • Actualice las cookies después de acciones críticas.
  • Valide el archivo antes de cargar las cookies.
  • Almacene el archivo en una ubicación segura.
  • Compruebe periódicamente la integridad del archivo.

Gestión del estado de sesión

Al llevar la gestión de cookies un paso más allá, una gestión activa de las sesiones garantiza que la autenticación de usuarios siga siendo válida. A continuación, se muestra cómo gestionar sesiones de forma eficaz:

async function manageSession(page, cookiePath) {
  let sessionValid = false;

  try {
    if (fs.existsSync(cookiePath)) {
      await loadCookies(page, cookiePath);
      sessionValid = await validateSession(page);
    }

    if (!sessionValid) {
      await performAuthentication(page);
      await saveCookies(page, cookiePath);
    }
  } catch (error) {
    console.error('Session management error:', error);
  }
}

async function validateSession(page) {
  const cookies = await page.cookies();
  return cookies.some(cookie => 
    cookie.name === 'sessionToken' && 
    cookie.expires > (Date.now() / 1000)
  );
}

Prácticas recomendadas para la gestión de sesiones:

  • Realice un seguimiento de las horas de expiración de las cookies.
  • Gestione de forma adecuada las interrupciones inesperadas de sesión.
  • Almacene las cookies de forma segura para impedir el acceso no autorizado.
  • Use contextos de navegador independientes para diferentes tareas.

Para sesiones de larga duración, considere dividirlas en segmentos más pequeños con conjuntos de cookies distintos para mejorar la fiabilidad y reducir posibles problemas.

Autenticación con cookies

Las cookies pueden simplificar y proteger el proceso de autenticación cuando se combinan con técnicas de gestión de sesiones.

Automatización del inicio de sesión

Ahorre tiempo usando cookies para almacenar y reutilizar tokens de autenticación, lo que elimina la necesidad de completar repetidamente formularios de inicio de sesión. A continuación, se muestra un ejemplo:

async function handleLogin(page, cookiePath) {
  const authenticationStatus = await validateAuthStatus(page);

  if (!authenticationStatus.isValid) {
    await performLogin(page);
    await saveCookiesToFile(page, cookiePath);
  }
}

async function validateAuthStatus(page) {
  const cookies = await page.cookies();
  return {
    isValid: cookies.some(cookie => 
      cookie.name === 'authToken' && 
      cookie.expires > (Date.now() / 1000)
    )
  };
}

Una vez establecida la autenticación básica, puede incorporar autenticación multifactor para aumentar la seguridad.

Autenticación multifactor

La gestión de la autenticación multifactor (MFA) con cookies implica realizar un seguimiento de los estados de verificación. A continuación, se muestra cómo gestionarla:

async function handleMFAAuthentication(page) {
  try {
    await page.waitForSelector('#mfa-input');
    await page.type('#mfa-input', getMFAToken()); // Replace with your MFA token provider
    await page.click('#verify-button');
    await page.waitForNavigation();

    const cookies = await page.cookies();
    return cookies.some(c => c.name === 'mfa_verified');
  } catch (error) {
    console.error('MFA verification failed:', error);
    return false;
  }
}

Refuerce estos procesos siguiendo prácticas de seguridad clave.

Prácticas recomendadas de seguridad

Para garantizar una gestión segura de las cookies de autenticación, considere estas medidas:

Medida de seguridadImplementación
Expiración de cookiesSupervise el atributo expires y actualice los tokens antes de que expiren.
Aislamiento de dominiosUse contextos de navegador independientes para diferentes dominios de autenticación.
Transporte seguroEstablezca la marca Secure para restringir las cookies a la transmisión únicamente mediante HTTPS.
Control de accesoUse la marca HttpOnly para impedir que los scripts del lado del cliente accedan a las cookies.
Estrategia de copia de seguridadCree copias de seguridad de las cookies antes de realizar modificaciones.

A continuación, se muestra un ejemplo de cómo proteger cookies de autenticación mediante programación:

async function secureAuthCookies(page) {
  const cookies = await page.cookies();

  return cookies.map(cookie => ({
    ...cookie,
    secure: true,
    httpOnly: true,
    sameSite: 'Strict'
  }));
}

Para mantener estados de autenticación seguros, céntrese en estas prácticas:

  • Actualice periódicamente los tokens de autenticación.
  • Gestione adecuadamente los errores de autenticación.
  • Supervise los dominios de cookies para detectar cambios no autorizados.
  • Use cadenas de agente de usuario realistas para evitar la detección.

Limitaciones conocidas

Al usar Puppeteer para la gestión de cookies, existen algunas restricciones importantes que debe conocer. Comprenderlas puede ayudarle a planificar mejor y evitar posibles problemas.

Restricciones del navegador

Puppeteer hereda determinadas limitaciones de las medidas de seguridad del navegador, lo que puede afectar a la forma en que se gestionan las cookies. Por ejemplo, no hay eventos integrados para detectar cambios en las cookies, por lo que son necesarias comprobaciones manuales.

RestricciónImpactoSolución alternativa
Sin eventos de cambio de cookiesNo se pueden detectar automáticamente las modificaciones de cookiesConfigure comprobaciones periódicas para supervisar el estado de las cookies
Aislamiento de contextoNo se puede acceder a las cookies de un contexto de navegador desde otroCree sistemas de gestión de cookies independientes para cada contexto
Operaciones asíncronasPueden producirse condiciones de carrera durante la gestión de cookiesUse async/await con una gestión adecuada de errores
Sin copia de seguridad integradaNo existe una forma nativa de realizar copias de seguridad de las cookiesRealice copias de seguridad manuales de las cookies según sea necesario

Estas restricciones hacen esencial implementar prácticas cuidadosas de gestión de cookies.

Límites de acceso por dominio

Otro desafío consiste en gestionar cookies entre dominios o subdominios. Las configuraciones incorrectas del atributo de dominio pueden provocar problemas de autenticación. A continuación, se muestra un ejemplo de cómo validar cookies para un dominio específico:

async function validateDomainCookies(page, targetDomain) {
  const cookies = await page.cookies();
  return cookies.filter(cookie => {
    const cookieDomain = cookie.domain.startsWith('.') ? 
      cookie.domain.slice(1) : cookie.domain;
    return cookieDomain === targetDomain;
  });
}

Desafíos del ciclo de vida de las cookies

Gestionar el ciclo de vida de las cookies es fundamental para mantener la estabilidad de la sesión y evitar interrupciones. A continuación se presentan algunas estrategias para abordar problemas habituales del ciclo de vida:

1. Gestión de expiración

Supervise las fechas de expiración de las cookies y actualícelas antes de que expiren:

async function handleCookieExpiration(page) {
  const cookies = await page.cookies();
  const currentTime = Date.now() / 1000;

  for (const cookie of cookies) {
    if (cookie.expires && cookie.expires - currentTime < 300) {
      await refreshCookie(page, cookie);
    }
  }
}

2. Limpieza de cookies

Limpie periódicamente las cookies obsoletas para garantizar un rendimiento óptimo y evitar errores de sesión:

async function performCookieCleanup(page) {
  try {
    const cookies = await page.cookies();
    const outdatedCookies = cookies.filter(cookie => 
      cookie.expires && (cookie.expires < Date.now() / 1000)
    );
    await page.deleteCookies(...outdatedCookies);
  } catch (error) {
    console.error('Cookie cleanup failed:', error);
  }
}

3. Recuperación de estado

Recuperar estados de cookies es esencial para mantener sesiones ininterrumpidas. A continuación, se muestra cómo restaurar cookies desde una copia de seguridad:

async function recoverCookieState(page, backupPath) {
  try {
    const currentCookies = await page.cookies();
    if (invalidCookieState(currentCookies)) {
      const backupCookies = await loadCookiesFromBackup(backupPath);
      await page.setCookie(...backupCookies);
    }
  } catch (error) {
    console.error('State recovery failed:', error);
  }
}

Resumen

Aproveche al máximo la gestión de cookies de Puppeteer comprendiendo sus ventajas y limitaciones. Gestionar adecuadamente las cookies es fundamental para mantener sesiones persistentes, garantizar una autenticación fiable y optimizar los flujos de automatización.

A continuación se presenta un resumen rápido de los aspectos esenciales y las prácticas recomendadas para gestionar cookies eficazmente:

AspectoPráctica recomendadaPor qué es importante
Persistencia de sesiónGuarde las cookies en archivos JSONMantiene el estado de la sesión entre ejecuciones
Actualizaciones de cookiesSupervise las fechas de expiraciónEvita expiraciones inesperadas de sesión
Contextos de navegadorUse contextos independientesMejora el aislamiento y la seguridad
Gestión de erroresAñada bloques try-catchGestiona sin problemas los errores relacionados con cookies

Para garantizar el éxito:

  • Compruebe periódicamente la validez de las cookies y realice un seguimiento de su ciclo de vida.
  • Cifre las cookies almacenadas para mantenerlas seguras.
  • Siga protocolos de gestión segura para proteger datos sensibles.

Al iniciar Puppeteer, use la opción userDataDir para conservar los datos de sesión entre ejecuciones. Incorporar mecanismos de gestión de errores y medidas de seguridad le ayudará a crear flujos de automatización estables y eficientes que mantengan una autenticación coherente.

FAQ

Frequently Asked Questions

Las cookies almacenan datos de sesión, preferencias y datos de inicio de sesión. En Puppeteer, se gestionan mediante programación y se incluyen en las cabeceras de solicitudes futuras, lo que permite mantener la continuidad de la sesión entre cargas de página y ejecuciones de automatización.

¿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