如何把 Chrome Cookie 导出为 JSON
TL;DR:要把 Chrome Cookie 导出为 JSON,装 CookieVault Editor,点导出,选 JSON(或 Netscape cookies.txt 供 curl/wget 用)。Chrome 开发者工具不带导出功能。要在 CI/CD 里自动化导出,用 Puppeteer 的
page.cookies()或 Playwright 的context.cookies()。
把 Chrome Cookie 导出为 JSON 是把浏览器 Cookie 存储序列化成一个结构化文件的过程 —— 这个文件可以被备份、分享、导入到另一个浏览器配置,或喂给 curl、wget 这类命令行工具。Chrome DevTools 的 Application 面板能查看和编辑 Cookie,但没有导出按钮 —— 想做结构化导出,需要 Manifest V3 扩展或无头浏览器脚本1。本文按实用性从高到低介绍三种方法。
快速对比:导出方法
简而言之:互动式一键导出用 Manifest V3 扩展。CI/CD 流水线里的自动化导出用 Puppeteer 或 Playwright。装不了扩展时,DevTools 控制台做一次性快速抓取也行,但要知道 HttpOnly Cookie 会丢。
| 方法 | 能导 HttpOnly Cookie | 输出格式 | 自动化支持 | 是否需扩展 |
|---|---|---|---|---|
| CookieVault Editor(扩展) | 是 | JSON、Netscape、HAR | 否(手动点击) | 是 |
Puppeteer page.cookies() | 是 | JSON(通过 JSON.stringify) | 是(可脚本化、CI 友好) | 否(无头 Chrome) |
Playwright context.cookies() | 是 | JSON(通过 JSON.stringify) | 是(可脚本化、CI 友好) | 否(无头 Chromium) |
DevTools 控制台 document.cookie | 否(漏掉 HttpOnly) | 原始字符串(需手工解析) | 否 | 否 |
| DevTools Network 的 HAR 导出 | 部分(在请求头里) | HAR | 否 | 否 |
按 Chrome DevTools 文档所述,Application 面板的 Cookie 表格是为检查与编辑设计,而非数据导出1。Network 面板能导出完整请求归档为 HAR 文件,里面包含 Cookie 请求头,但从 HAR 里抽出单条 Cookie 需要后处理。
方法一:CookieVault Editor(推荐)
简而言之:CookieVault Editor 从工具栏弹窗里支持三种格式导出 —— JSON 用于结构化数据,Netscape cookies.txt 用于 curl/wget,HAR 用于含请求头响应体的完整归档。每次导出一次点击,HttpOnly Cookie 也包含在内。
导出的 8 步工作流:
- 确定要导出哪些 Cookie —— 判断是单域导出(例如
staging.example.com)还是完整浏览器导出。单域导出更小、更安全;全量导出能完整捕获会话状态。 - 选择导出格式 —— JSON 用于程序化处理和回导。Netscape cookies.txt 用于
curl -b和wget --load-cookies。HAR 用于含请求头和响应体的完整归档。 - 安装 CookieVault Editor —— 从 Chrome 应用商店安装。扩展申请
cookies权限以访问完整 Cookie 存储,包括 HttpOnly Cookie。 - 打开扩展弹窗 —— 点 CookieVault Editor 工具栏图标。弹窗显示当前域名的所有 Cookie。点”全部 Cookie”查看浏览器里每一条。
- 点导出 —— 弹出格式选择器。选 JSON、Netscape cookies.txt 或 HAR。
- 保存文件 —— Chrome 弹出文件保存对话框。选好位置和文件名。
- 验证导出 —— 用文本编辑器或 JSON 查看器打开文件。确认预期的 Cookie 都在,HttpOnly Cookie 也包含。
- 使用导出文件 —— 喂给下游工具:
curl -b cookies.txt、Playwright 的context.addCookies(),或 CookieVault Editor 的导入功能做跨配置的会话迁移。
重要:导出的 Cookie 文件里含鉴权令牌。当成密码对待 —— 别提交进版本库,别走未加密渠道分享,用完即删。
方法二:Puppeteer 或 Playwright(自动化)
简而言之:在 CI/CD 流水线、测试夹具生成和脚本化工作流里,Puppeteer 的
page.cookies()和 Playwright 的context.cookies()把 Cookie 数组以 JSON 形式返回。两者都包含 HttpOnly Cookie。用JSON.stringify写到文件即可。
一个最小化的 Puppeteer 导出脚本:
const puppeteer = require('puppeteer');
const fs = require('fs');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// 需要时在此完成鉴权(page.type、page.click 等)
const cookies = await page.cookies();
fs.writeFileSync('cookies.json', JSON.stringify(cookies, null, 2));
await browser.close();
})();
等价的 Playwright 写法:
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
const cookies = await context.cookies();
fs.writeFileSync('cookies.json', JSON.stringify(cookies, null, 2));
await browser.close();
})();
两种方法都返回一个含类型字段的 Cookie 对象数组:name、value、domain、path、expires(Unix 时间戳)、httpOnly、secure、sameSite。输出直接兼容 context.addCookies() 用于回导。
方法三:DevTools 控制台(受限)
简而言之:在 DevTools 控制台里跑
document.cookie,返回当前域名 Cookie 的”name=value”分号分隔字符串。快但不完整 —— HttpOnly Cookie 不可见,元数据(过期、标志、路径)丢失。
document.cookie 这条路径作为不能装扩展时的快速兜底:
- 打开 DevTools(
F12)→ Console 标签 - 输入
document.cookie并按回车 - 复制输出字符串
- 手工解析,或写脚本按
;再按=分割
该方法有三大局限:
- HttpOnly Cookie 对 JavaScript 不可见 —— 不在
document.cookie里 - Cookie 元数据(过期、SameSite、Secure、HttpOnly、Path、Domain)不包含
- 其他域名设置的第三方 Cookie 在当前页面的 JavaScript 上下文里取不到
除了一次性的快速验证,其他场景用方法一或方法二。
导出格式参考
简而言之:JSON 和 Netscape 是最常见的两种导出格式。JSON 保留全部元数据并可回导。Netscape 是为 curl/wget 兼容设计的传统格式。HAR 是完整请求归档,把 Cookie 作为 HTTP 头的一部分包含。
JSON 格式
[
{
"name": "session_id",
"value": "abc123def456",
"domain": ".example.com",
"path": "/",
"expires": 1756252800,
"httpOnly": true,
"secure": true,
"sameSite": "Lax"
}
]
JSON 的优点:
- 字段有类型(标志是布尔,过期是数字)
- 直接兼容 Puppeteer/Playwright 的
addCookies() - 可做 schema 校验
- 人类可读、可 diff
- 支持嵌套结构按域名分组
Netscape cookies.txt 格式
# Netscape HTTP Cookie File
.example.com TRUE / TRUE 1756252800 session_id abc123def456
每行 7 个 Tab 分隔字段:domain、是否含子域(TRUE/FALSE)、path、是否 Secure(TRUE/FALSE)、过期(Unix 时间戳)、name、value。
Netscape 的优点:
- 直接兼容
curl -b和wget --load-cookies - 文件体积小
- 几乎每个命令行 HTTP 工具都支持
- 用 shell 脚本(
awk、cut)解析简单
什么时候用哪种
| 用例 | 推荐格式 |
|---|---|
| 跨浏览器配置备份与恢复 | JSON |
把 Cookie 喂给 curl 或 wget | Netscape cookies.txt |
| 给 QA 团队分享测试夹具 | JSON |
| 归档完整请求/响应做调试 | HAR |
| 在 CI/CD 里用 Puppeteer/Playwright | JSON |
| 导入到 Postman 或 Insomnia | JSON(通过 collection 导入) |
导出文件的安全注意事项
简而言之:Cookie 导出文件等同于凭据。一份泄露的会话 Cookie 文件能让任何人拿到你已认证会话的完整访问权。和密码、API 密钥同等对待。
处理导出 Cookie 文件的 6 条安全规则:
- 永远不要把导出文件提交进版本库 —— 把
*.cookies.json和cookies.txt加进.gitignore - 不要走未加密渠道分享(邮件、未端到端加密的 Slack 私信、公开 Pastebin)
- 不再需要时即时删除 —— 文件里的会话 Cookie 直到服务端会话过期前仍然有效
- 在共享开发机上限制文件权限(Linux/Mac 上
chmod 600 cookies.json) - 分享测试夹具时,把真实会话值替换为占位令牌并注明替换说明
- 文件不慎泄露时,立即登出受影响站点并修改密码,使所有相关会话失效
这些注意事项对 JSON、Netscape、HAR 三种格式同样适用 —— 都包含可认证你会话的原始 Cookie 值。
另见
- 如何在 Chrome 中删除 Cookie —— 导出做备份后再删
- 如何在 Chrome 中编辑 Cookie —— 不删除,只改 Cookie 值
- 清 Cookie 但保留登录态 —— 先导出受保护会话,再清其余
- 如何在 Chrome 中给 Cookie 加白名单 —— 保护特定 Cookie 不被清
- CookieVault Editor —— 开源 Manifest V3 扩展,用于查看、编辑、导出 Cookie
- CookieVault Guardian —— 带白名单支持的自动清理扩展
Footnotes
-
Chrome 官方 DevTools 关于 Cookie 检查与编辑的文档在 https://developer.chrome.com/docs/devtools/storage/cookies。Application 面板用表格显示 Cookie 并支持内联编辑,但不含导出功能。Network 面板的 HAR 导出把 Cookie 作为请求头的一部分包含,但要抽出单条 Cookie 需要后处理。 ↩ ↩2