javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > playwright处理cookie

playwright中处理cookie的几种实现方法

作者:勤奋的码农007

Playwright 提供了多种处理 Cookie 的方法,支持 JavaScript/TypeScript、Python 等语言,下面就来介绍一下如何使用,感兴趣的可以了解一下

在 Playwright 中处理 Cookie 主要有以下几种方式,这些方法适用于所有语言绑定(JavaScript/TypeScript、Python、C#、Java):

1.添加 Cookie

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  
  // 添加单个 Cookie
  await context.addCookies([{
    name: 'token',
    value: 'abc123',
    url: 'https://example.com', // 或使用 domain/path
    domain: 'example.com',
    path: '/',
    expires: Math.floor(Date.now() / 1000) + 86400, // 过期时间(Unix 时间戳)
    httpOnly: true,
    secure: true,
    sameSite: 'Lax' // 'Strict' | 'Lax' | 'None'
  }]);
})();

2.获取 Cookie

// 获取所有 Cookie
const cookies = await context.cookies();
console.log(cookies);

// 获取特定 URL 的 Cookie
const siteCookies = await context.cookies(['https://example.com/login']);

3.清除 Cookie

// 清除所有 Cookie
await context.clearCookies();

// 清除特定 Cookie(通过名称)
await context.addCookies([]); // 添加空数组无法清除,需手动过滤重置

4.保存/加载 Cookie 状态(会话复用)

保存状态到文件

await context.storageState({ path: 'auth.json' });

文件内容包含 cookies 和 localStorage。

加载状态创建新上下文

const context = await browser.newContext({
  storageState: 'auth.json'
});

5.自动处理 Cookie(通过路由拦截)

await context.route('**/*', route => {
  const headers = route.request().headers();
  headers['Cookie'] = 'my_cookie=value'; // 手动添加 Cookie 到请求
  route.continue({ headers });
});

6.在页面中操作 Cookie(通过 evaluate)

const cookieValue = await page.evaluate(() => {
  return document.cookie; // 读取全部 Cookie
});

await page.evaluate(() => {
  document.cookie = 'user=john; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/';
});

关键注意事项

  1. 域名要求
    addCookies() 必须指定 urldomain+path,且当前上下文需在该域名下(可通过 page.goto() 先访问目标域)。

  2. HTTP Only Cookie
    无法通过 page.evaluate() 读取/修改 HTTP-Only Cookie,需使用 context.cookies()

  3. 跨域限制
    Cookie 遵循同源策略,不可直接访问其他域的 Cookie。

  4. 浏览器上下文隔离
    每个 BrowserContext 有独立的 Cookie 存储,复用状态需使用 storageState

典型场景示例:登录状态保持

// 首次登录并保存状态
const context = await browser.newContext();
await context.addInitScript(() => {
  localStorage.setItem('theme', 'dark');
});
await page.goto('https://example.com/login');
await page.fill('#username', 'user');
await page.fill('#password', 'pass');
await page.click('#login');
await context.storageState({ path: 'auth.json' });

// 后续测试直接加载状态
const newContext = await browser.newContext({ storageState: 'auth.json' });
const newPage = await newContext.newPage();
await newPage.goto('https://example.com/dashboard'); // 已登录状态

通过上述方法,可以灵活管理 Cookie,实现身份验证、会话保持等关键功能。

到此这篇关于playwright中处理cookie的几种实现方法的文章就介绍到这了,更多相关playwright处理cookie内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文