如何把 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 存储序列化成一个结构化文件的过程 —— 这个文件可以被备份、分享、导入到另一个浏览器配置,或喂给 curlwget 这类命令行工具。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 步工作流:

  1. 确定要导出哪些 Cookie —— 判断是单域导出(例如 staging.example.com)还是完整浏览器导出。单域导出更小、更安全;全量导出能完整捕获会话状态。
  2. 选择导出格式 —— JSON 用于程序化处理和回导。Netscape cookies.txt 用于 curl -bwget --load-cookies。HAR 用于含请求头和响应体的完整归档。
  3. 安装 CookieVault Editor —— 从 Chrome 应用商店安装。扩展申请 cookies 权限以访问完整 Cookie 存储,包括 HttpOnly Cookie。
  4. 打开扩展弹窗 —— 点 CookieVault Editor 工具栏图标。弹窗显示当前域名的所有 Cookie。点”全部 Cookie”查看浏览器里每一条。
  5. 点导出 —— 弹出格式选择器。选 JSON、Netscape cookies.txt 或 HAR。
  6. 保存文件 —— Chrome 弹出文件保存对话框。选好位置和文件名。
  7. 验证导出 —— 用文本编辑器或 JSON 查看器打开文件。确认预期的 Cookie 都在,HttpOnly Cookie 也包含。
  8. 使用导出文件 —— 喂给下游工具: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 对象数组:namevaluedomainpathexpires(Unix 时间戳)、httpOnlysecuresameSite。输出直接兼容 context.addCookies() 用于回导。

方法三:DevTools 控制台(受限)

简而言之:在 DevTools 控制台里跑 document.cookie,返回当前域名 Cookie 的”name=value”分号分隔字符串。快但不完整 —— HttpOnly Cookie 不可见,元数据(过期、标志、路径)丢失。

document.cookie 这条路径作为不能装扩展时的快速兜底:

  1. 打开 DevTools(F12)→ Console 标签
  2. 输入 document.cookie 并按回车
  3. 复制输出字符串
  4. 手工解析,或写脚本按 ; 再按 = 分割

该方法有三大局限:

  • 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 -bwget --load-cookies
  • 文件体积小
  • 几乎每个命令行 HTTP 工具都支持
  • 用 shell 脚本(awkcut)解析简单

什么时候用哪种

用例推荐格式
跨浏览器配置备份与恢复JSON
把 Cookie 喂给 curlwgetNetscape cookies.txt
给 QA 团队分享测试夹具JSON
归档完整请求/响应做调试HAR
在 CI/CD 里用 Puppeteer/PlaywrightJSON
导入到 Postman 或 InsomniaJSON(通过 collection 导入)

导出文件的安全注意事项

简而言之:Cookie 导出文件等同于凭据。一份泄露的会话 Cookie 文件能让任何人拿到你已认证会话的完整访问权。和密码、API 密钥同等对待。

处理导出 Cookie 文件的 6 条安全规则:

  • 永远不要把导出文件提交进版本库 —— 把 *.cookies.jsoncookies.txt 加进 .gitignore
  • 不要走未加密渠道分享(邮件、未端到端加密的 Slack 私信、公开 Pastebin)
  • 不再需要时即时删除 —— 文件里的会话 Cookie 直到服务端会话过期前仍然有效
  • 在共享开发机上限制文件权限(Linux/Mac 上 chmod 600 cookies.json
  • 分享测试夹具时,把真实会话值替换为占位令牌并注明替换说明
  • 文件不慎泄露时,立即登出受影响站点并修改密码,使所有相关会话失效

这些注意事项对 JSON、Netscape、HAR 三种格式同样适用 —— 都包含可认证你会话的原始 Cookie 值。

另见


Footnotes

  1. Chrome 官方 DevTools 关于 Cookie 检查与编辑的文档在 https://developer.chrome.com/docs/devtools/storage/cookies。Application 面板用表格显示 Cookie 并支持内联编辑,但不含导出功能。Network 面板的 HAR 导出把 Cookie 作为请求头的一部分包含,但要抽出单条 Cookie 需要后处理。 2

最后更新:

作者: Lena Park · 审阅: Marcus Reiter