Latenode

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

Domine o gerenciamento de cookies no Puppeteer para manter sessões e autenticação, entendendo suas limitações e boas práticas.

9 min de leitura
Cookies e sessão de autenticação em automações com Puppeteer

Quer simplificar o gerenciamento de sessões e os testes de autenticação com o Puppeteer? Veja o que você precisa saber para lidar com cookies de forma eficaz:

  • Por que os cookies são importantes: eles armazenam dados de sessão, preferências e informações de login.
  • O que você pode fazer: salvar sessões, testar autenticação, gerenciar estados e até simular o comportamento de usuários reais.
  • Como gerenciar: o Puppeteer permite definir, obter e excluir cookies programaticamente.
  • Desafios aos quais ficar atento: 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 estados de login.
  • Automação de autenticação: use cookies para evitar etapas repetitivas de login.
  • Casos de uso práticos: automatize carrinhos de compras, teste funções de usuário 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 a definir, recuperar e proteger cookies no Puppeteer, além de lidar com suas limitações.

Noções básicas de cookies no Puppeteer

Fundamentos dos cookies

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

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

MétodoFinalidadeEscopo
page.cookies()Recupera cookies da página atualEspecífico da página
page.setCookie()Define cookies antes da navegação da páginaEspecífico da página
context.addCookies()Define cookies para várias páginasContexto do navegador

Ao entender esses métodos, você pode gerenciar cookies com eficácia, seja para defini-los, recuperá-los ou removê-los.

Propriedades dos cookies

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

PropriedadeDescriçãoExemplo de uso
NomeIdentificador do cookiesessionId
ValorDados armazenados no cookieuser123token
DomínioDomínio em que o cookie é válido.example.com
CaminhoCaminho de URL do cookie/dashboard
ExpiraData e hora de expiração30/03/2025 12:00 EST
SeguroLimita o uso a conexões HTTPStrue ou false
HttpOnlyRestringe o acesso apenas ao lado do servidortrue ou false
SameSiteControla o comportamento entre sitesStrict, Lax ou None

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

Como boas práticas:

  • Salve cookies no formato JSON para reutilizá-los facilmente.
  • Atualize os cookies regularmente para evitar problemas de expiração.
  • Use contextos de navegador separados para diferentes tarefas de automação.
  • Monitore o tamanho dos cookies para evitar limites de armazenamento.

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

Tutorial de Puppeteer no Node.js #9 - Salvar e reutilizar cookies

Gerenciando cookies no Puppeteer

Aprenda a lidar com cookies no Puppeteer usando estes 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.

Definindo cookies

Use page.setCookie() para definir um ou mais cookies. Isso ajuda a manter o estado da sessão de forma eficaz. Veja como fazer:

// 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 para ter em mente:

ParâmetroObrigatórioDescrição
nameSimO identificador do cookie
valueSimDados armazenados no cookie
domainSimO domínio ao qual se aplica
pathNãoCaminho de URL ao qual se aplica
expiresNãoCarimbo de data e hora de expiração
httpOnlyNãoRestringe o uso ao servidor
secureNãoExige HTTPS

Obtendo cookies

Recupere cookies com o método page.cookies(). Você pode buscar todos os cookies ou se concentrar 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 em operações com cookies para garantir a execução correta e evitar condições de corrida.

sbb-itb-23997f1

Gerenciamento de sessões

Armazenamento e recuperação de cookies

Para manter sessões persistentes, você pode salvar cookies em um arquivo JSON e recarregá-los quando necessário. Veja uma forma 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);
}

Pontos importantes:

  • Atualize os 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 do estado da sessão

Indo além do gerenciamento de cookies, o tratamento ativo de sessões garante que a autenticação do usuário permaneça válida. Veja como gerenciar sessões com eficácia:

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

Boas práticas para o gerenciamento de sessões:

  • Acompanhe os tempos de expiração dos cookies.
  • Lide adequadamente com interrupções inesperadas da sessão.
  • Armazene cookies com segurança para impedir acessos não autorizados.
  • Use contextos de navegador separados para diferentes tarefas.

Para sessões de longa duração, considere dividi-las em segmentos menores com conjuntos distintos de cookies 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ões.

Automação de login

Economize tempo usando cookies para armazenar e reutilizar tokens de autenticação, eliminando a necessidade de preencher formulários de login repetidamente. Veja 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 de estabelecer a autenticação básica, você pode incorporar a autenticação multifator para ampliar a segurança.

Autenticação multifator

Gerenciar a autenticação multifator (MFA) com cookies envolve acompanhar os estados de verificação. Veja como 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 práticas essenciais de segurança.

Boas práticas de segurança

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

Medida de segurançaImplementação
Expiração de cookiesMonitore o atributo expires e atualize os tokens antes que expirem.
Isolamento de domínioUse contextos de navegador separados para diferentes domínios de autenticação.
Transporte seguroDefina a flag Secure para restringir cookies à transmissão somente via HTTPS.
Controle de acessoUse a flag HttpOnly para impedir que scripts do lado do cliente acessem cookies.
Estratégia de backupCrie backups dos cookies antes de fazer modificações.

Veja um exemplo de como proteger cookies de autenticação programaticamente:

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.
  • Trate corretamente os erros de autenticação.
  • Monitore domínios de cookies em busca de alterações não autorizadas.
  • Use strings realistas de user agent para evitar detecção.

Limitações conhecidas

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

Restrições do navegador

O Puppeteer herda certas limitações das medidas de segurança dos navegadores, o que pode afetar o gerenciamento de cookies. Por exemplo, não há eventos integrados para detectar alterações em cookies, então são necessárias verificações manuais.

RestriçãoImpactoAlternativa
Sem eventos de alteração de cookiesNão é possível detectar modificações em cookies automaticamenteConfigure verificações periódicas para monitorar o estado dos cookies
Isolamento de contextoCookies em um contexto de navegador não podem ser acessados em outroCrie sistemas de gerenciamento de cookies separados para cada contexto
Operações assíncronasPodem ocorrer condições de corrida durante o tratamento de cookiesUse async/await com tratamento adequado de erros
Sem backup integradoNão há uma forma nativa de criar backup de cookiesFaça backup manual dos cookies quando necessário

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

Limites de acesso a domínios

Outro desafio está no gerenciamento de cookies entre domínios ou subdomínios. Configurações incorretas do atributo de domínio podem causar problemas de autenticação. Veja 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;
  });
}

Desafios do ciclo de vida dos cookies

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

1. Gerenciamento de expiração

Monitore 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 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 de estado

Recuperar estados de cookies é essencial para manter sessões ininterruptas. Veja como restaurar cookies a partir 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 tratamento adequado de cookies é essencial para manter sessões persistentes, garantir uma autenticação confiável e simplificar fluxos de automação.

Veja um resumo rápido dos aspectos essenciais e das práticas recomendadas para gerenciar cookies com eficácia:

AspectoMelhor práticaPor que é importante
Persistência de sessãoSalve cookies em arquivos JSONMantém o estado da sessão entre execuções
Atualizações de cookiesMonitore datas de expiraçãoEvita expirações inesperadas da sessão
Contextos do navegadorUse contextos separadosMelhora o isolamento e a segurança
Tratamento de errosAdicione blocos try-catchLida adequadamente com erros relacionados a cookies

Para garantir bons resultados:

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

Ao iniciar o Puppeteer, use a opção userDataDir 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 automação estáveis e eficientes, que mantêm uma autenticação consistente.

FAQ

Frequently Asked Questions

Os cookies armazenam dados de sessão, preferências e informações de login. No Puppeteer, eles são gerenciados programaticamente e incluídos nos cabeçalhos de solicitações futuras, permitindo a continuidade da sessão entre carregamentos de página e execuções de automação.

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