如何在 Puppeteer 中保存和加载 Cookies 以实现会话持久化
回答
在 Puppeteer 中,可以在认证后使用 page.cookies() 保存 cookies,并稍后使用 page.setCookie() 恢复。这允许在浏览器运行之间保持会话,避免重复登录,并在自动化或爬虫工作流中保持已认证状态。
详细解释
Cookies 是网站存储的小型数据片段,用于维护会话身份、用户偏好和认证状态。当用户登录时,服务器会发出会话 cookies,并将其附加到后续的 HTTP 请求中。在无头浏览器自动化中,除非显式保存,否则这些 cookies 不会在浏览器实例之间自动保留。
默认情况下,Puppeteer 会启动一个全新的浏览器上下文,这意味着每个会话都从没有先前认证数据的状态开始。为克服此限制,开发人员可以使用 Puppeteer 提供的 DevTools API 提取已登录会话的 cookies。这些 cookies 可以序列化并外部存储(例如 JSON 文件)。在新运行时,会在导航前重新注入这些 cookies,只要 cookies 仍有效,即可恢复已认证会话。
此技术广泛用于网络爬虫、自动化测试和机器人工作流中,其中保持登录连续性至关重要。然而,cookies 可能过期、因服务器端轮换而失效,或绑定到特定域名和安全属性(如 HttpOnly 或 SameSite),在恢复时必须遵守这些限制。
解决方案/方法
- 在登录后提取 cookies:在完成认证后使用
await page.cookies(),然后将结果以 JSON 格式存储,供后续会话使用。 - 在导航前恢复 cookies:加载存储的 cookies 数据,并使用
await page.setCookie(...cookies)应用它们,以在访问受保护页面前保持会话状态。 - 在会话中断时使用自动 CAPTCHA 处理:一些网站通过 reCAPTCHA 或 Cloudflare 保护等挑战使会话失效。在这种情况下,自动 CAPTCHA 解决服务(如 CapSolver)可以通过在登录或会话续订期间编程解决验证步骤来帮助恢复访问流程。
最佳实践/技巧
- 在恢复 cookies 之前,始终确保其与正确的域名匹配。
- 避免在不同网站之间混合使用 cookies 集合,以防止认证冲突。
- 在需要长期会话时,优先使用持久化的浏览器上下文。
- 优雅处理过期的 cookies,必要时重新认证或触发自动验证流程。
👉 相关:
在 CapSolver 注册时使用代码
FAQ,可额外获得 5% 的充值奖励。
CapSolver 常见问题 — capsolver.com
