Latenode

Gestion des cookies dans Puppeteer : persistance des sessions, émulation de l’authentification et limites

Maîtrisez la gestion des cookies dans Puppeteer pour assurer la persistance des sessions et l’authentification, tout en tenant compte de ses limites et des bonnes pratiques.

9 min de lecture
Illustration de cookies de session et d’authentification dans Puppeteer

Vous souhaitez rationaliser la gestion des sessions et les tests d’authentification avec Puppeteer ? Voici ce que vous devez savoir pour gérer efficacement les cookies :

  • Pourquoi les cookies sont importants : ils stockent les données de session, les préférences et les informations de connexion.
  • Ce que vous pouvez faire : sauvegarder des sessions, tester l’authentification, gérer des états et même reproduire le comportement de véritables utilisateurs.
  • Comment les gérer : Puppeteer vous permet de définir, récupérer et supprimer des cookies par programmation.
  • Les défis à surveiller : les risques de sécurité, les limitations du navigateur et la gestion du cycle de vie des cookies.

Fonctionnalités clés :

  • Persistance des sessions : sauvegardez et rechargez les cookies pour conserver les états de connexion.
  • Automatisation de l’authentification : utilisez les cookies pour éviter les étapes de connexion répétitives.
  • Cas d’usage pratiques : automatisez les paniers d’achat, testez les rôles utilisateurs, et plus encore.

Conseil rapide : sauvegardez les cookies au format JSON, utilisez des contextes de navigateur distincts et surveillez les dates d’expiration pour éviter les problèmes.

Découvrez comment définir, récupérer et sécuriser les cookies dans Puppeteer tout en tenant compte de ses limites.

Principes de base des cookies dans Puppeteer

Fondamentaux des cookies

Les cookies servent à stocker des informations d’état pendant les interactions. Dans Puppeteer, ils fonctionnent comme des cookies web classiques, mais sont gérés par programmation à l’aide de méthodes spécifiques, au niveau de la page comme du contexte du navigateur.

Lorsqu’un site web définit un cookie, celui-ci est automatiquement inclus dans les en-têtes des futures requêtes adressées à ce site, ce qui garantit la continuité de la session. Puppeteer propose deux principales méthodes pour gérer les cookies :

MéthodeObjectifPortée
page.cookies()Récupère les cookies de la page actuelleSpécifique à la page
page.setCookie()Définit des cookies avant la navigation vers une pageSpécifique à la page
context.addCookies()Définit des cookies pour plusieurs pagesContexte du navigateur

En comprenant ces méthodes, vous pouvez gérer efficacement les cookies, qu’il s’agisse de les définir, de les récupérer ou de les supprimer.

Propriétés des cookies

Les cookies comportent plusieurs attributs qui définissent leur comportement et leurs paramètres de sécurité :

PropriétéDescriptionExemple d’utilisation
NomIdentifiant du cookiesessionId
ValeurDonnées stockées dans le cookieuser123token
DomaineDomaine pour lequel le cookie est valide.example.com
CheminChemin d’URL du cookie/dashboard
ExpireDate et heure d’expiration03/30/2025 12:00 PM EST
SecureLimite l’utilisation aux connexions HTTPStrue ou false
HttpOnlyRestreint l’accès au côté serveur uniquementtrue ou false
SameSiteContrôle le comportement intersiteStrict, Lax ou None

Les cookies dans Puppeteer peuvent soit persister jusqu’à leur expiration, soit ne durer que pendant la session actuelle du navigateur. De plus, les cookies définis dans un contexte de navigateur ne sont pas partagés avec un autre, ce qui assure l’isolation entre les tâches.

Bonnes pratiques :

  • Sauvegardez les cookies au format JSON pour les réutiliser facilement.
  • Actualisez régulièrement les cookies pour éviter les problèmes d’expiration.
  • Utilisez des contextes de navigateur distincts pour différentes tâches d’automatisation.
  • Surveillez la taille des cookies afin d’éviter les limites de stockage.

Découvrez maintenant comment gérer ces cookies par programmation dans Puppeteer.

Tutoriel Nodejs Puppeteer n°9 - Sauvegarder et réutiliser les cookies

Gestion des cookies dans Puppeteer

Découvrez comment gérer les cookies dans Puppeteer grâce à ces méthodes pratiques. Ces techniques sont essentielles pour gérer les données de session et l’authentification, qui seront approfondies dans les tâches associées.

Définir des cookies

Utilisez page.setCookie() pour définir un ou plusieurs cookies. Cela permet de maintenir efficacement l’état de session. Voici comment procéder :

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

Principaux paramètres de cookie à retenir :

ParamètreObligatoireDescription
nameOuiL’identifiant du cookie
valueOuiLes données stockées dans le cookie
domainOuiLe domaine auquel il s’applique
pathNonLe chemin d’URL auquel il s’applique
expiresNonL’horodatage d’expiration
httpOnlyNonRestreint l’utilisation au serveur
secureNonNécessite HTTPS

Récupérer des cookies

Récupérez les cookies avec la méthode page.cookies(). Vous pouvez obtenir tous les cookies ou cibler un domaine spécifique :

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

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

Pour extraire la valeur d’un cookie spécifique, utilisez une fonction d’assistance comme celle-ci :

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

Supprimer des cookies

Vous pouvez supprimer les cookies individuellement ou en masse :

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

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

Pour une maintenance continue, envisagez d’automatiser la suppression des cookies expirés :

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

Utilisez toujours await avec les opérations sur les cookies afin de garantir leur bonne exécution et d’éviter les conditions de concurrence.

sbb-itb-23997f1

Gestion des sessions

Stockage et récupération des cookies

Pour conserver les sessions, vous pouvez sauvegarder les cookies dans un fichier JSON et les recharger lorsque nécessaire. Voici une méthode pratique :

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

Points essentiels à prendre en compte :

  • Mettez à jour les cookies après les actions critiques.
  • Validez le fichier avant de charger les cookies.
  • Stockez le fichier dans un emplacement sécurisé.
  • Vérifiez régulièrement l’intégrité du fichier.

Gestion de l’état des sessions

Pour aller plus loin dans la gestion des cookies, le traitement actif des sessions garantit la validité de l’authentification des utilisateurs. Voici comment gérer efficacement les sessions :

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

Bonnes pratiques de gestion des sessions :

  • Suivez les dates d’expiration des cookies.
  • Gérez avec souplesse les interruptions de session inattendues.
  • Stockez les cookies de manière sécurisée afin d’empêcher les accès non autorisés.
  • Utilisez des contextes de navigateur distincts pour différentes tâches.

Pour les sessions de longue durée, envisagez de les diviser en segments plus courts avec des ensembles de cookies distincts afin d’améliorer la fiabilité et de réduire les problèmes potentiels.

Authentification avec les cookies

Les cookies peuvent simplifier et sécuriser le processus d’authentification lorsqu’ils sont associés à des techniques de gestion des sessions.

Automatisation de la connexion

Gagnez du temps en utilisant des cookies pour stocker et réutiliser les jetons d’authentification, ce qui évite de remplir à répétition les formulaires de connexion. Voici un exemple :

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

Une fois l’authentification de base établie, vous pouvez intégrer l’authentification multifacteur pour renforcer la sécurité.

Authentification multifacteur

La gestion de l’authentification multifacteur (MFA) avec des cookies implique le suivi des états de vérification. Voici comment la gérer :

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

Renforcez ces processus en appliquant les bonnes pratiques de sécurité essentielles.

Bonnes pratiques de sécurité

Pour garantir une gestion sécurisée des cookies d’authentification, envisagez les mesures suivantes :

Mesure de sécuritéMise en œuvre
Expiration des cookiesSurveillez l’attribut expires et actualisez les jetons avant leur expiration.
Isolation des domainesUtilisez des contextes de navigateur distincts pour différents domaines d’authentification.
Transport sécuriséDéfinissez l’indicateur Secure afin de limiter la transmission des cookies à HTTPS.
Contrôle des accèsUtilisez l’indicateur HttpOnly pour empêcher les scripts côté client d’accéder aux cookies.
Stratégie de sauvegardeCréez des sauvegardes des cookies avant d’effectuer des modifications.

Voici un exemple de sécurisation des cookies d’authentification par programmation :

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

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

Pour maintenir des états d’authentification sécurisés, concentrez-vous sur ces pratiques :

  • Mettez régulièrement à jour les jetons d’authentification.
  • Gérez correctement les erreurs d’authentification.
  • Surveillez les domaines des cookies pour détecter les modifications non autorisées.
  • Utilisez des chaînes user agent réalistes pour éviter toute détection.

Limitations connues

Lors de l’utilisation de Puppeteer pour la gestion des cookies, certaines contraintes importantes doivent être prises en compte. Les comprendre vous aide à mieux planifier et à éviter les problèmes potentiels.

Restrictions du navigateur

Puppeteer hérite de certaines limites liées aux mesures de sécurité des navigateurs, qui peuvent affecter la gestion des cookies. Par exemple, aucun événement intégré ne permet de détecter les changements de cookies ; des vérifications manuelles sont donc nécessaires.

RestrictionImpactSolution de contournement
Aucun événement de modification des cookiesImpossible de détecter automatiquement les modifications de cookiesMettez en place des vérifications périodiques pour surveiller l’état des cookies
Isolation des contextesLes cookies d’un contexte de navigateur ne sont pas accessibles dans un autreCréez des systèmes de gestion des cookies distincts pour chaque contexte
Opérations asynchronesDes conditions de concurrence peuvent survenir lors de la gestion des cookiesUtilisez async/await avec une gestion appropriée des erreurs
Aucune sauvegarde intégréeAucun moyen natif de sauvegarder les cookiesSauvegardez manuellement les cookies selon les besoins

Ces contraintes rendent indispensable la mise en place de pratiques rigoureuses de gestion des cookies.

Limites d’accès aux domaines

La gestion des cookies entre des domaines ou sous-domaines constitue un autre défi. Des configurations incorrectes de l’attribut de domaine peuvent entraîner des problèmes d’authentification. Voici un exemple de validation des cookies pour un domaine spécifique :

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

Défis liés au cycle de vie des cookies

La gestion du cycle de vie des cookies est essentielle pour maintenir la stabilité des sessions et éviter les interruptions. Voici quelques stratégies pour gérer les problèmes courants liés au cycle de vie :

1. Gestion des expirations

Surveillez les dates d’expiration des cookies et actualisez-les avant qu’ils n’expirent :

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. Nettoyage des cookies

Nettoyez régulièrement les cookies obsolètes afin de garantir des performances optimales et d’éviter les erreurs de session :

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. Récupération de l’état

La récupération des états des cookies est essentielle pour maintenir des sessions ininterrompues. Voici comment restaurer les cookies à partir d’une sauvegarde :

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

Résumé

Tirez le meilleur parti de la gestion des cookies de Puppeteer en comprenant ses forces et ses limites. Une gestion appropriée des cookies est essentielle pour maintenir des sessions persistantes, garantir une authentification fiable et rationaliser les workflows d’automatisation.

Voici une synthèse rapide des aspects essentiels et des pratiques recommandées pour gérer efficacement les cookies :

AspectBonne pratiquePourquoi c’est important
Persistance des sessionsSauvegardez les cookies dans des fichiers JSONConserve l’état de session entre les exécutions
Mises à jour des cookiesSurveillez les dates d’expirationÉvite les expirations de session inattendues
Contextes de navigateurUtilisez des contextes distinctsAméliore l’isolation et la sécurité
Gestion des erreursAjoutez des blocs try-catchGère efficacement les erreurs liées aux cookies

Pour assurer votre réussite :

  • Vérifiez régulièrement la validité des cookies et suivez leur cycle de vie.
  • Chiffrez les cookies stockés afin de les sécuriser.
  • Respectez des protocoles de traitement sécurisé pour protéger les données sensibles.

Lors du lancement de Puppeteer, utilisez l’option userDataDir pour conserver les données de session d’une exécution à l’autre. L’intégration de mécanismes de gestion des erreurs et de mesures de sécurité vous aidera à créer des workflows d’automatisation stables et efficaces, qui maintiennent une authentification cohérente.

FAQ

Frequently Asked Questions

Les cookies stockent des données de session, des préférences et des informations de connexion. Dans Puppeteer, ils sont gérés par programmation et inclus dans les en-têtes des requêtes ultérieures, ce qui assure la continuité des sessions entre les chargements de pages et les exécutions d’automatisation.

Cela vous a aidé ? Partagez-le →

Écrit par

Vasiliy Datsenko

Responsable du support client

Vasiliy Datsenko est responsable du support client chez Latenode et un rédacteur en automatisation axé sur les produits. Son travail relie les conversations clients, la recherche sur l'automatisation des flux de travail, les cas d'utilisation de l'IA et la formation pratique sur les produits pour les équipes cherchant à automatiser des processus métier réels.

Profil de l'auteur →

Vérifié par

Oleg Zankov

PDG de Latenode, expert en no-code

Avec une philosophie ancrée dans l'innovation, la résolution de problèmes et l'expérience utilisateur, je me consacre à donner aux équipes les moyens de créer des intégrations sur mesure et d'automatiser les workflows avec facilité et efficacité. Fort d'une riche expérience en développement commercial, entrepreneurship technologique et développement logiciel, j'ai reconnu le besoin d'une solution d'intégration plus accessible, évolutive et adaptable. Ainsi est né Latenode.com. Grâce à notre plateforme, les entreprises peuvent exploiter la puissance de la technologie sans nécessiter de compétences approfondies en codage. Passionné par la création d'un avenir où la technologie nous sert, et non l'inverse, ma mission est de simplifier les processus complexes. Je crois en la démocratisation de la technologie et en dotant les équipes des outils nécessaires pour innover, croître et réussir dans un monde de plus en plus numérique.

Profil de l'auteur →

Continuer la lecture