playwright中處理cookie的幾種實(shí)現(xiàn)方法
在 Playwright 中處理 Cookie 主要有以下幾種方式,這些方法適用于所有語言綁定(JavaScript/TypeScript、Python、C#、Java):
1.添加 Cookie
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// 添加單個(gè) 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, // 過期時(shí)間(Unix 時(shí)間戳)
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([]); // 添加空數(shù)組無法清除,需手動(dòng)過濾重置
4.保存/加載 Cookie 狀態(tài)(會(huì)話復(fù)用)
保存狀態(tài)到文件
await context.storageState({ path: 'auth.json' });
文件內(nèi)容包含 cookies 和 localStorage。
加載狀態(tài)創(chuàng)建新上下文
const context = await browser.newContext({
storageState: 'auth.json'
});
5.自動(dòng)處理 Cookie(通過路由攔截)
await context.route('**/*', route => {
const headers = route.request().headers();
headers['Cookie'] = 'my_cookie=value'; // 手動(dòng)添加 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=/';
});
關(guān)鍵注意事項(xiàng)
域名要求
addCookies()必須指定url或domain+path,且當(dāng)前上下文需在該域名下(可通過page.goto()先訪問目標(biāo)域)。HTTP Only Cookie
無法通過page.evaluate()讀取/修改 HTTP-Only Cookie,需使用context.cookies()。跨域限制
Cookie 遵循同源策略,不可直接訪問其他域的 Cookie。瀏覽器上下文隔離
每個(gè) BrowserContext 有獨(dú)立的 Cookie 存儲,復(fù)用狀態(tài)需使用storageState。
典型場景示例:登錄狀態(tài)保持
// 首次登錄并保存狀態(tài)
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' });
// 后續(xù)測試直接加載狀態(tài)
const newContext = await browser.newContext({ storageState: 'auth.json' });
const newPage = await newContext.newPage();
await newPage.goto('https://example.com/dashboard'); // 已登錄狀態(tài)
通過上述方法,可以靈活管理 Cookie,實(shí)現(xiàn)身份驗(yàn)證、會(huì)話保持等關(guān)鍵功能。
到此這篇關(guān)于playwright中處理cookie的幾種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)playwright處理cookie內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序 云開發(fā)模糊查詢實(shí)現(xiàn)解析
這篇文章主要介紹了微信小程序 云開發(fā)模糊查詢實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript?canvas實(shí)現(xiàn)水球加載動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了JavaScript?canvas實(shí)現(xiàn)水球加載動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
使用JavaScript實(shí)現(xiàn)提取視頻關(guān)鍵畫面
在視頻分享成為日常的今天,為視頻挑選一個(gè)吸引人的封面往往能大大提高視頻的點(diǎn)擊率,本文我們就來探討一下如何使用JavaScript實(shí)現(xiàn)提取視頻關(guān)鍵畫面吧2025-06-06
TypeScript中的類型聲明文件的使用實(shí)戰(zhàn)場景
本文詳細(xì)介紹了TypeScript中的類型聲明文件(.d.ts),包括其作用、來源、如何自動(dòng)生成、內(nèi)置聲明文件和外部類型聲明文件的使用,通過實(shí)戰(zhàn)場景,幫助讀者徹底理解并掌握類型聲明文件的使用,感興趣的朋友跟隨小編一起看看吧2026-02-02
JavaScript利用split函數(shù)按規(guī)定截取字符串(獲取郵箱用戶名)
這個(gè)其實(shí)就是利用了js的split函數(shù),以@分割數(shù)組,一般用這個(gè)的地方不多,但這個(gè)思路應(yīng)用的比較廣泛。推薦大家學(xué)習(xí)。2009-12-12

