Laténode

Gestion des cookies dans Puppeteer : préservation de session, émulationauthentification et limitations

Maîtrisez la gestion des cookies dans Puppeteer pour la persistance des sessions et l'authentification, tout en connaissant ses limitations et ses bonnes pratiques.

RaianRaian
Gestion des cookies dans Puppeteer : préservation de session, émulationauthentification et limitations

Vous souhaitez rationaliser la gestion des sessions et les testsauthentification avec Marionnettiste? 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 tu peux faire: Enregistrez des sessions, testez l'authentification, gérez les états et imitez même le comportement réel des utilisateurs.
  • Comment gérer: Puppeteer vous permet de définir,obtenir et de supprimer des cookies par programmation.
  • Défis à surveiller : Risques de sécurité, limitations du navigateur et gestion du cycle de vie des cookies.

Caractéristiques principales:

  • Persistance de la session : Enregistrez et rechargez les cookies pour conserver les états de connexion.
  • Automatisation de l'authentification : Utilisez des cookies pour contourner les étapes de connexion répétitives.
  • Casutilisation pratiques : Automatisez les paniersachat, testez les rôles des utilisateurs et bien plus encore.

Petit conseil: Enregistrez les cookies au format JSON, utilisez des contextes de navigateur distincts et surveillez les datesexpiration 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.

Notions de base sur les cookies Marionnettiste

Principes fondamentaux des cookies

Les cookies servent à stocker des informationsétat lors des 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 et du navigateur.

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

MéthodeInteretDomaine
page.cookies()Récupère les cookies de la page actuelleSpécifique à la page
page.setCookie()Définit les cookies avant la navigation sur la pageSpécifique à la page
contexte.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 sont dotés de plusieurs attributs qui définissent leur comportement et leurs paramètres de sécurité :

PropriétésDescriptionExempleutilisation
NomIdentifiant du cookieID de session
ValeurDonnées stockées dans le cookiejeton utilisateur123
DomaineDomaine où le cookie est valide.example.com
CheminChemin URL du cookie/tableau de bord
Expire leDate et heureexpiration03/30/2025 12h00 HNE
SécurisésLimite l'utilisation aux connexions HTTPSvrai ou faux
HttpOnlyRestreint l'accès au côté serveur uniquementvrai ou faux
MêmeSiteContrôle le comportement intersiteStrict, laxiste ou aucun

Les cookies dans Puppeteer peuvent être conservés jusqu'à leur expiration ou uniquement le temps de la session de navigation en cours. De plus, les cookies définis dans un contexte de navigateur ne sont pas partagés avec un autre, garantissant ainsi l'isolation entre les tâches.

Pour les meilleures pratiques :

  • Enregistrez les cookies au format JSON pour une réutilisation facile.
  • Actualisez régulièrement les cookies pour éviter les problèmesexpiration.
  • Utilisez des contextes de navigateur distincts pour différentes tâches d’automatisation.
  • Gardez un œil sur la taille des cookies pour éviter les limites de stockage.

Ensuite, apprenez à gérer ces cookies par programmation dans Puppeteer.

Tutoriel NodeJS Puppeteer n° 9 : Enregistrer et réutiliser les cookies

Gestion des cookies dans Puppeteer

Apprenez à gérer les cookies dans Puppeteer grâce à ces méthodes pratiques. Ces techniques sont essentielles à la gestion des données de session et de l'authentification, qui seront approfondies dans les tâches connexes.

Paramétrage des cookies

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

<span class="hljs-comment">// Setting a single cookie</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>({
  <span class="hljs-attr">name</span>: <span class="hljs-string">'sessionToken'</span>,
  <span class="hljs-attr">value</span>: <span class="hljs-string">'abc123xyz'</span>,
  <span class="hljs-attr">domain</span>: <span class="hljs-string">'.example.com'</span>,
  <span class="hljs-attr">path</span>: <span class="hljs-string">'/'</span>,
  <span class="hljs-attr">expires</span>: <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>) + <span class="hljs-number">3600</span>, <span class="hljs-comment">// 1 hour from now</span>
  <span class="hljs-attr">httpOnly</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">secure</span>: <span class="hljs-literal">true</span>,
  <span class="hljs-attr">sameSite</span>: <span class="hljs-string">'Strict'</span>
});

<span class="hljs-comment">// Setting multiple cookies</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>([
  {
    <span class="hljs-attr">name</span>: <span class="hljs-string">'userPrefs'</span>,
    <span class="hljs-attr">value</span>: <span class="hljs-string">'darkMode'</span>,
    <span class="hljs-attr">domain</span>: <span class="hljs-string">'.example.com'</span>
  },
  {
    <span class="hljs-attr">name</span>: <span class="hljs-string">'language'</span>,
    <span class="hljs-attr">value</span>: <span class="hljs-string">'en-US'</span>,
    <span class="hljs-attr">domain</span>: <span class="hljs-string">'.example.com'</span>
  }
]);

Paramètres clés des cookies à garder à l’esprit :

ParamètreRequisDescription
Le nomOuiL'identifiant du cookie
La valeurOuiDonnées stockées dans le cookie
domaineOuiLe domaine auquel il s'applique
cheminNonCheminURL auquel il s'applique
expireNonHorodatageexpiration
http uniquementNonLimite l'utilisation du serveur
sécuriséeNonNécessite HTTPS

Obtenir des cookies

Récupérer les cookies avec le page.cookies() Méthode. Vous pouvez récupérer tous les cookies ou vous concentrer sur un domaine spécifique :

<span class="hljs-comment">// Get all cookies</span>
<span class="hljs-keyword">const</span> allCookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();

<span class="hljs-comment">// Get cookies for a specific domain</span>
<span class="hljs-keyword">const</span> domainCookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>(<span class="hljs-string">'https://example.com'</span>);

Pour extraire la valeurun cookie spécifique, utilisez une fonctionassistance comme celle-ci :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">getCookieValue</span>(<span class="hljs-params">page, cookieName</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">const</span> targetCookie = cookies.<span class="hljs-title function_">find</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> cookie.<span class="hljs-property">name</span> === cookieName);
  <span class="hljs-keyword">return</span> targetCookie ? targetCookie.<span class="hljs-property">value</span> : <span class="hljs-literal">null</span>;
}

Suppression des cookies

Vous pouvez supprimer les cookies individuellement ou en masse :

<span class="hljs-comment">// Remove a specific cookie</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">deleteCookie</span>({
  <span class="hljs-attr">name</span>: <span class="hljs-string">'sessionToken'</span>,
  <span class="hljs-attr">domain</span>: <span class="hljs-string">'.example.com'</span>
});

<span class="hljs-comment">// Clear all cookies</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">deleteCookie</span>(...<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>());

Pour une maintenance continue, pensez à automatiser la suppression des cookies expirés :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">cleanupExpiredCookies</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">const</span> now = <span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>;

  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> cookie <span class="hljs-keyword">of</span> cookies) {
    <span class="hljs-keyword">if</span> (cookie.<span class="hljs-property">expires</span> && cookie.<span class="hljs-property">expires</span> < now) {
      <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">deleteCookie</span>({
        <span class="hljs-attr">name</span>: cookie.<span class="hljs-property">name</span>,
        <span class="hljs-attr">domain</span>: cookie.<span class="hljs-property">domain</span>
      });
    }
  }
}

Toujours utiliser await avec des opérations de cookies pour assurer une exécution correcte et éviter les conditions de course.

sbb-itb-23997f1

Gestion de session

Stockage et récupération des cookies

Pour maintenir la persistance des sessions, vous pouvez enregistrer les cookies dans un fichier JSON et les recharger si nécessaire. Voici une méthode pratique :

<span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">saveCookies</span>(<span class="hljs-params">page, filePath</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  fs.<span class="hljs-title function_">writeFileSync</span>(filePath, <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(cookies, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>));
}

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">loadCookies</span>(<span class="hljs-params">page, filePath</span>) {
  <span class="hljs-keyword">const</span> cookieData = fs.<span class="hljs-title function_">readFileSync</span>(filePath);
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(cookieData);
  <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>(...cookies);
}

Considérations clés:

  • Mettre à jour les cookies après des actions critiques.
  • Validez le fichier avant de charger les cookies.
  • Stockez le fichier dans un endroit sûr.
  • Vérifiez régulièrement l'intégrité du fichier.

Gestion de l'état de session

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

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">manageSession</span>(<span class="hljs-params">page, cookiePath</span>) {
  <span class="hljs-keyword">let</span> sessionValid = <span class="hljs-literal">false</span>;

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">if</span> (fs.<span class="hljs-title function_">existsSync</span>(cookiePath)) {
      <span class="hljs-keyword">await</span> <span class="hljs-title function_">loadCookies</span>(page, cookiePath);
      sessionValid = <span class="hljs-keyword">await</span> <span class="hljs-title function_">validateSession</span>(page);
    }

    <span class="hljs-keyword">if</span> (!sessionValid) {
      <span class="hljs-keyword">await</span> <span class="hljs-title function_">performAuthentication</span>(page);
      <span class="hljs-keyword">await</span> <span class="hljs-title function_">saveCookies</span>(page, cookiePath);
    }
  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'Session management error:'</span>, error);
  }
}

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">validateSession</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">return</span> cookies.<span class="hljs-title function_">some</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> 
    cookie.<span class="hljs-property">name</span> === <span class="hljs-string">'sessionToken'</span> && 
    cookie.<span class="hljs-property">expires</span> > (<span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>)
  );
}

Bonnes pratiques pour la gestion des sessions :

  • Gardez une trace des délais d’expiration des cookies.
  • Gérez les interruptions de session inattendues avec élégance.
  • Stockez les cookies en toute sécurité pour empêcher tout accès non autorisé.
  • Utilisez des contextes de navigateur distincts pour différentes tâches.

Pour les sessions de longue durée, pensez à les diviser en segments plus petits avec des ensembles de cookies distincts pour améliorer la fiabilité et réduire les problèmes potentiels.

Authentification avec cookies

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

Automatisation de la connexion

Gagnez du temps en utilisant des cookies pour stocker et réutiliser les jetonsauthentification, évitant ainsi de remplir plusieurs fois les formulaires de connexion. Voici un exemple :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleLogin</span>(<span class="hljs-params">page, cookiePath</span>) {
  <span class="hljs-keyword">const</span> authenticationStatus = <span class="hljs-keyword">await</span> <span class="hljs-title function_">validateAuthStatus</span>(page);

  <span class="hljs-keyword">if</span> (!authenticationStatus.<span class="hljs-property">isValid</span>) {
    <span class="hljs-keyword">await</span> <span class="hljs-title function_">performLogin</span>(page);
    <span class="hljs-keyword">await</span> <span class="hljs-title function_">saveCookiesToFile</span>(page, cookiePath);
  }
}

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">validateAuthStatus</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">return</span> {
    <span class="hljs-attr">isValid</span>: cookies.<span class="hljs-title function_">some</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> 
      cookie.<span class="hljs-property">name</span> === <span class="hljs-string">'authToken'</span> && 
      cookie.<span class="hljs-property">expires</span> > (<span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>)
    )
  };
}

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

Authentification multi-facteurs

La gestion de l'authentification multifacteur (AMF) avec cookies implique le suivi des états de vérification. Voici comment procéder :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleMFAAuthentication</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForSelector</span>(<span class="hljs-string">'#mfa-input'</span>);
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">type</span>(<span class="hljs-string">'#mfa-input'</span>, <span class="hljs-title function_">getMFAToken</span>()); <span class="hljs-comment">// Replace with your MFA token provider</span>
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">click</span>(<span class="hljs-string">'#verify-button'</span>);
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForNavigation</span>();

    <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
    <span class="hljs-keyword">return</span> cookies.<span class="hljs-title function_">some</span>(<span class="hljs-function"><span class="hljs-params">c</span> =></span> c.<span class="hljs-property">name</span> === <span class="hljs-string">'mfa_verified'</span>);
  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'MFA verification failed:'</span>, error);
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
  }
}

Renforcez ces processus en suivant les pratiques de sécurité clés.

Meilleures pratiques de sécurité

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

Mesure de sécuritéMise en œuvre
Expiration des cookiesSurveillez l'attributexpiration et actualisez les jetons avant leur expiration.
Isolation de domaineUtilisez des contextes de navigateur distincts pour différents domaines d’authentification.
Transport sécuriséActivez l'option « Sécurisé » pour limiter la transmission des cookies au protocole HTTPS uniquement.
ContrôleAccèsUtilisez l'indicateur HttpOnly pour empêcher les scripts côté clientaccéder aux cookies.
Stratégie de sauvegardeCréez des sauvegardes des cookies avanteffectuer des modifications.

Voici un exemple de sécurisation programmatique des cookiesauthentification :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">secureAuthCookies</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();

  <span class="hljs-keyword">return</span> cookies.<span class="hljs-title function_">map</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> ({
    ...cookie,
    <span class="hljs-attr">secure</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">httpOnly</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">sameSite</span>: <span class="hljs-string">'Strict'</span>
  }));
}

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

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

Limites connues

Lorsque vous utilisez Puppeteer pour la gestion des cookies, il existe des contraintes importantes à prendre en compte. Les comprendre vous aidera à mieux planifier et à éviter les problèmes potentiels.

Restrictions du navigateur

Puppeteer hérite de certaines limitations liées aux mesures de sécurité des navigateurs, ce qui peut affecter la gestion des cookies. Par exemple, il n'existe aucun événement intégré pour détecter les modifications de cookies ; des vérifications manuelles sont donc nécessaires.

RestrictionImpact Solution
Aucun événement de modification de cookieImpossible de détecter automatiquement les modifications des cookiesConfigurer des contrôles périodiques pour surveiller l'état des cookies
Isolation du contexteLes cookies dans un contexte de navigateur ne sont pas accessibles dans un autreCréer des systèmes de gestion des cookies distincts pour chaque contexte
Opérations asynchronesDes conditions de course peuvent survenir lors de la gestion des cookiesUtilisez async/await avec une gestion des erreurs appropriée.
Aucune sauvegarde intégréeAucun moyen natif de sauvegarder les cookiesSauvegarder manuellement les cookies si nécessaire

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

Limitesaccès au domaine

Un autre défi réside dans la gestion des cookies entre domaines ou sous-domaines. Une configuration incorrecte des attributs de domaine peut entraîner des problèmesauthentification. Voici un exemple de validation des cookies pour un domaine spécifique :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">validateDomainCookies</span>(<span class="hljs-params">page, targetDomain</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">return</span> cookies.<span class="hljs-title function_">filter</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> {
    <span class="hljs-keyword">const</span> cookieDomain = cookie.<span class="hljs-property">domain</span>.<span class="hljs-title function_">startsWith</span>(<span class="hljs-string">'.'</span>) ? 
      cookie.<span class="hljs-property">domain</span>.<span class="hljs-title function_">slice</span>(<span class="hljs-number">1</span>) : cookie.<span class="hljs-property">domain</span>;
    <span class="hljs-keyword">return</span> cookieDomain === targetDomain;
  });
}

Défis du 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 leur expiration :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleCookieExpiration</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
  <span class="hljs-keyword">const</span> currentTime = <span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>;

  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> cookie <span class="hljs-keyword">of</span> cookies) {
    <span class="hljs-keyword">if</span> (cookie.<span class="hljs-property">expires</span> && cookie.<span class="hljs-property">expires</span> - currentTime < <span class="hljs-number">300</span>) {
      <span class="hljs-keyword">await</span> <span class="hljs-title function_">refreshCookie</span>(page, cookie);
    }
  }
}

2. Nettoyage des cookies

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

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">performCookieCleanup</span>(<span class="hljs-params">page</span>) {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
    <span class="hljs-keyword">const</span> outdatedCookies = cookies.<span class="hljs-title function_">filter</span>(<span class="hljs-function"><span class="hljs-params">cookie</span> =></span> 
      cookie.<span class="hljs-property">expires</span> && (cookie.<span class="hljs-property">expires</span> < <span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>() / <span class="hljs-number">1000</span>)
    );
    <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">deleteCookies</span>(...outdatedCookies);
  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'Cookie cleanup failed:'</span>, error);
  }
}

3. Récupération de l'État

La récupération de l'état des cookies est essentielle pour maintenir des sessions ininterrompues. Voici comment restaurer les cookies à partirune sauvegarde :

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">recoverCookieState</span>(<span class="hljs-params">page, backupPath</span>) {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> currentCookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
    <span class="hljs-keyword">if</span> (<span class="hljs-title function_">invalidCookieState</span>(currentCookies)) {
      <span class="hljs-keyword">const</span> backupCookies = <span class="hljs-keyword">await</span> <span class="hljs-title function_">loadCookiesFromBackup</span>(backupPath);
      <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>(...backupCookies);
    }
  } <span class="hljs-keyword">catch</span> (error) {
    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">error</span>(<span class="hljs-string">'State recovery failed:'</span>, error);
  }
}

Résumé

Exploitez pleinement la gestion des cookies de Puppeteer en comprenant ses atouts et ses limites. Une gestion adéquate des cookies est essentielle pour maintenir des sessions persistantes, garantir une authentification fiable et optimiser les processusautomatisation.

Voici un aperçu rapide des aspects essentiels et des pratiques recommandées pour gérer efficacement les cookies :

AspectBest PracticePourquoi ça compte
Persistance de la sessionEnregistrer les cookies dans des fichiers JSONConserve l'état de la session entre les exécutions
Mises à jour des cookiesSurveiller les datesexpirationÉvite les expirations de session inattendues
Contextes du navigateurUtiliser des contextes distinctsAméliore l'isolement et la sécurité
Gestion des erreurs Ajouter des blocs try-catchGère les erreurs liées aux cookies en douceur

Pour assurer le succès :

  • Vérifiez régulièrement la validité des cookies et suivez leur cycle de vie.
  • Crypter les cookies stockés pour les garder en sécurité.
  • Suivez les protocoles de traitement sécurisés pour protéger les données sensibles.

Lors du lancement de Puppeteer, utilisez le userDataDir Possibilité de conserver les données de session entre les exécutions. L'intégration de mécanismes de gestion des erreurs et de mesures de sécurité vous aidera à créer des workflowsautomatisation stables et efficaces, garantissant une authentification cohérente.

articles similaires

Raian

Chercheur, expert Nocode

Détails de l'auteur →