Uma plataforma de baixo código que combina a simplicidade sem código com o poder do código completo 🚀
Comece gratuitamente
Gerenciamento de cookies no Puppeteer: preservação de sessão, emulação de autenticação e limitações
22 de março de 2025
.
9
min ler

Gerenciamento de cookies no Puppeteer: preservação de sessão, emulação de autenticação e limitações

Jorge Miloradovitch
Pesquisador, redator e entrevistador de casos de uso
Índice

Deseja otimizar o gerenciamento de sessões e os testes de autenticação com Marionetista? Aqui está o que você precisa saber sobre como lidar com cookies de forma eficaz:

  • Por que os cookies são importantes: Eles armazenam dados de sessão, preferências e detalhes de login.
  • O que você pode fazer: Salve sessões, teste autenticação, gerencie estados e até mesmo imite o comportamento real do usuário.
  • Como gerenciar: O Puppeteer permite que você defina, obtenha e exclua cookies programaticamente.
  • Desafios a serem observados: Riscos de segurança, limitações do navegador e gerenciamento do ciclo de vida dos cookies.

Principais Recursos:

  • Persistência de Sessão: Salve e recarregue cookies para manter os estados de login.
  • Automação de autenticação: Use cookies para ignorar etapas repetitivas de login.
  • Casos de uso prático: Automatize carrinhos de compras, teste funções de usuários e muito mais.

Dica rápida: Salve cookies no formato JSON, use contextos de navegador separados e monitore datas de expiração para evitar problemas.

Aprenda como definir, recuperar e proteger cookies no Puppeteer, abordando suas limitações.

Marionetista

Os cookies são usados ​​para armazenar informações de estado durante interações. No Puppeteer, eles funcionam como cookies da web comuns, mas são gerenciados programaticamente usando métodos específicos nos níveis de contexto da página e do navegador.

Quando um site define um cookie, ele é automaticamente incluído nos cabeçalhos de futuras solicitações para esse site, garantindo a continuidade da sessão. O Puppeteer oferece dois métodos principais para lidar com cookies:

Forma Propósito Objetivo
página.cookies() Recupera cookies da página atual Específico da página
página.setCookie() Define cookies antes da navegação da página Específico da página
contexto.addCookies() Define cookies para várias páginas Contexto do navegador

Ao entender esses métodos, você pode gerenciar cookies de forma eficaz, seja configurando, recuperando ou removendo-os.

Os cookies vêm com vários atributos que definem seu comportamento e configurações de segurança:

Imóvel Descrição Exemplo de uso
Nome Identificador para o cookie sessionId
Valor Dados armazenados no cookie user123token
Domínio Domínio onde o cookie é válido .example.com
Caminho Caminho da URL para o cookie /dashboard
Validade Data e hora de expiração 03/30/2025 12:00 PM EST
Garanta o Limita o uso a conexões HTTPS true or false
HttpOnly Restringe o acesso somente ao lado do servidor true or false
Mesmo Site Controla o comportamento entre sites Strict, Laxou None

Os cookies no Puppeteer podem persistir até expirarem ou durar apenas a sessão atual do navegador. Além disso, os cookies definidos em um contexto de navegador não são compartilhados com outro, garantindo o isolamento entre as tarefas.

Para melhores práticas:

  • Salve cookies no formato JSON para fácil reutilização.
  • Atualize os cookies regularmente para evitar problemas de expiração.
  • Use contextos de navegador separados para diferentes tarefas de automação.
  • Fique de olho no tamanho dos cookies para evitar limites de armazenamento.

A seguir, aprenda como gerenciar esses cookies programaticamente no Puppeteer.

Tutorial Nodejs Puppeteer #9 - Salvar e reutilizar cookies

Gerenciando Cookies no Puppeteer

Aprenda a lidar com cookies no Puppeteer com esses métodos práticos. Essas técnicas são essenciais para gerenciar dados de sessão e autenticação, que serão explorados mais adiante em tarefas relacionadas.

Configurando Cookies

Use page.setCookie() para definir um ou mais cookies. Isso ajuda a manter o estado da sessão efetivamente. Veja como você pode fazer isso:

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

Principais parâmetros de cookies a serem lembrados:

Parâmetro Exigido Descrição
nome Sim O identificador do cookie
valor Sim Dados armazenados no cookie
domínio Sim O domínio ao qual se aplica
caminho Não Caminho da URL ao qual se aplica
expirar Não Carimbo de data e hora de expiração
httpSomente Não Restringe o uso do servidor
seguro Não Requer HTTPS

Obtendo Cookies

Recuperar cookies com o page.cookies() método. Você pode buscar todos os cookies ou focar em um domínio 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 extrair o valor de um cookie específico, use uma função 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;
}

Removendo Cookies

Você pode excluir cookies individualmente ou em massa:

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

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

Para manutenção contínua, considere automatizar a remoção de cookies expirados:

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

Sempre use await com operações de cookies para garantir a execução adequada e evitar condições de corrida.

sbb-itb-23997f1

Gerenciamento de Sessões

Para manter as sessões persistentes, você pode salvar cookies em um arquivo JSON e recarregá-los quando necessário. Aqui está uma maneira prática de fazer isso:

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

Consideracoes chave:

  • Atualizar cookies após ações críticas.
  • Valide o arquivo antes de carregar os cookies.
  • Armazene o arquivo em um local seguro.
  • Verifique regularmente a integridade do arquivo.

Gerenciamento de estado de sessão

Levando o gerenciamento de cookies mais adiante, o tratamento ativo de sessão garante que a autenticação do usuário permaneça válida. Veja como você pode gerenciar sessões 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)
  );
}

Melhores práticas para gerenciamento de sessão:

  • Acompanhe os tempos de expiração dos cookies.
  • Lide com interrupções inesperadas de sessão com elegância.
  • Armazene cookies com segurança para evitar acesso não autorizado.
  • Use contextos de navegador separados para tarefas diferentes.

Para sessões de longa duração, considere dividi-las em segmentos menores com conjuntos de cookies distintos para melhorar a confiabilidade e reduzir possíveis problemas.

Autenticação com Cookies

Os cookies podem simplificar e proteger o processo de autenticação quando combinados com técnicas de gerenciamento de sessão.

Automação de login

Economize tempo usando cookies para armazenar e reutilizar tokens de autenticação, eliminando a necessidade de preencher repetidamente formulários de login. Aqui está um exemplo:

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

Depois que a autenticação básica for estabelecida, você pode incorporar a autenticação multifator para maior segurança.

Autenticação multi-fator

Gerenciar autenticação multifator (MFA) com cookies envolve rastrear estados de verificação. Veja como você pode lidar com isso:

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

Fortaleça esses processos seguindo as principais práticas de segurança.

Práticas recomendadas de segurança

Para garantir o gerenciamento seguro dos cookies de autenticação, considere estas medidas:

Medida de segurança Implementação
Expiração do cookie Monitorar o expires atribuir e atualizar tokens antes que eles expirem.
Isolamento de domínio Use contextos de navegador separados para diferentes domínios de autenticação.
Transporte seguro Colocou o Secure sinalizador para restringir cookies somente à transmissão HTTPS.
Controle de acesso Use o HttpOnly sinalizador para bloquear scripts do lado do cliente de acessar cookies.
Estratégia de Backup Crie backups de cookies antes de fazer modificações.

Aqui está um exemplo de proteção programática de cookies de autenticação:

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

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

Para manter estados de autenticação seguros, concentre-se nestas práticas:

  • Atualize regularmente os tokens de autenticação.
  • Lide corretamente com erros de autenticação.
  • Monitore domínios de cookies em busca de alterações não autorizadas.
  • Use sequências de agentes de usuário realistas para evitar detecção.

Limitações Conhecidas

Ao usar o Puppeteer para gerenciamento de cookies, há algumas restrições importantes das quais você precisa estar ciente. Entendê-las pode ajudar você a planejar melhor e evitar problemas potenciais.

Restrições de navegador

O Puppeteer herda certas limitações das medidas de segurança do navegador, que podem afetar como os cookies são gerenciados. Por exemplo, não há eventos internos para detectar alterações de cookies, então verificações manuais são necessárias.

Restrição Impacto Solução
Nenhum evento de alteração de cookie Não é possível detectar modificações de cookies automaticamente Configure verificações periódicas para monitorar o estado do cookie
Isolamento de Contexto Os cookies em um contexto de navegador não podem ser acessados ​​em outro Crie sistemas de gerenciamento de cookies separados para cada contexto
Operações assíncronas Condições de corrida podem ocorrer durante o manuseio do cookie Use async/await com tratamento de erros adequado
Sem backup integrado Nenhuma maneira nativa de fazer backup de cookies Faça backup manual dos cookies conforme necessário

Essas restrições tornam essencial implementar práticas cuidadosas de gerenciamento de cookies.

Limites de acesso ao domínio

Outro desafio está no gerenciamento de cookies entre domínios ou subdomínios. Configurações incorretas de atributos de domínio podem levar a problemas de autenticação. Aqui está um exemplo de como validar cookies para um domínio 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;
  });
}

Gerenciar o ciclo de vida dos cookies é crucial para manter a estabilidade da sessão e evitar interrupções. Abaixo estão algumas estratégias para lidar com problemas comuns do ciclo de vida:

1. Gerenciamento de Expiração

Monitore as datas de expiração dos cookies e atualize-os antes que expirem:

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. Limpeza de Cookies

Limpe regularmente cookies desatualizados para garantir o desempenho ideal e evitar erros de sessão:

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. Recuperação do Estado

Recuperar estados de cookies é essencial para manter sessões ininterruptas. Veja como você pode restaurar cookies de um backup:

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

Resumo

Aproveite ao máximo o gerenciamento de cookies do Puppeteer entendendo seus pontos fortes e limitações. O manuseio adequado de cookies é essencial para manter sessões persistentes, garantir autenticação confiável e otimizar fluxos de trabalho de automação.

Aqui está uma rápida análise dos aspectos essenciais e práticas recomendadas para gerenciar cookies de forma eficaz:

Aspecto Melhores Práticas Por que isso importa
Persistência de Sessão Salvar cookies em arquivos JSON Mantém o estado da sessão entre as execuções
Atualizações de cookies Monitorar datas de expiração Evita tempos limite de sessão inesperados
Contextos do navegador Use contextos separados Melhora o isolamento e a segurança
Tratamento de erros Adicionar blocos try-catch Lida com erros relacionados a cookies sem problemas

Para garantir o sucesso:

  • Verifique regularmente a validade dos cookies e acompanhe seu ciclo de vida.
  • Criptografe os cookies armazenados para mantê-los seguros.
  • Siga protocolos de manuseio seguro para proteger dados confidenciais.

Ao iniciar o Puppeteer, use o userDataDir opção para reter dados de sessão entre execuções. Incorporar mecanismos de tratamento de erros e medidas de segurança ajudará você a criar fluxos de trabalho de automação estáveis ​​e eficientes que mantêm autenticação consistente.

Artigos Relacionados

Blogs relacionados

Caso de uso

Apoiado por