提示

Get cookies.txt 使用方法

之前用 yt-dlp 下 YouTube 会员视频,死活报错 Sign in to confirm your age。查了半天说要带 cookies。我手动从浏览器开发者工具里把 Cookie 请求头那一长串复制出来,贴到命令行,结果格式不对,yt-dlp 不认。折腾两小时后发现了 Get cookies.txt 这个浏览器扩展——一键导出符合 Netscape 格式的 cookies.txt,从此再也没有 cookie 格式错误。

这篇文章把所有获取 cookies.txt 的方法(扩展、手动、编程)和踩坑记录整理出来。

一、什么是 cookies.txt,为什么需要它

  • cookies.txt 是一个纯文本文件,里面按行存储网站的 Cookie(域名、路径、名称、值、过期时间等)。
  • 很多命令行工具(yt-dlp、wget、curl、aria2)支持 --cookies cookies.txt 来加载浏览器中的登录状态。
  • 典型场景:下载需要登录的视频(YouTube 年龄限制、B 站 1080p+)、访问需要认证的 API、抓取个人数据。

Netscape 格式长这样:

# Netscape HTTP Cookie File
.youtube.com    TRUE    /   TRUE    1700000000  SAPISID 7Px...
.youtube.com    TRUE    /   TRUE    1700000000  __Secure-3PSID  ...

二、方法一:浏览器扩展(推荐,最省事)

支持的浏览器

Chrome / Edge / Brave / Vivaldi
Firefox

2.1 Chrome 系浏览器
扩展名称:Get cookies.txt LOCALLY(注意带 "LOCALLY" 的版本不上传数据)
安装地址:

Chrome 应用商店搜索 "Get cookies.txt LOCALLY"
或直接访问:https://chrome.google.com/webstore/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc

使用方法:

1、打开目标网站并登录。
2、点击浏览器右上角的扩展图标。
3、点击 "Export"  "Cookies.txt"4、文件自动下载为 cookies.txt。

踩坑:有些修改版 Chrome 会阻止扩展获取 Cookie,需要开启 "允许访问网站地址" 权限。

2.2 Firefox

扩展名称:cookies.txt
安装地址:Firefox 附加组件商店搜索 "cookies.txt"
使用方法:和 Chrome 类似。

为什么不推荐在线转换工具?

你的 Cookie 包含登录凭证,发给任何第三方网站就是直接把账号密码交出去。
永远只用本地扩展或本地脚本。

三、方法二:手动从开发者工具导出(无扩展权限时)

某些公司浏览器禁止安装扩展,这时候只能手动。

步骤

1、打开浏览器开发者工具(F12)。
2、切换到 Application(Chrome)或 Storage(Firefox)标签。
3、左侧找到 Cookies,点击目标网站域名。
4、你会看到一张表,每行一个 Cookie。
5、需要手动拼接成 Netscape 格式。极其繁琐,不推荐。

用 Console 脚本导出(半自动)
在开发者工具的 Console 里粘贴以下 JavaScript 代码,会自动下载 cookies.txt:

javascript
(function() {
    const cookies = document.cookie.split(';').map(c => c.trim());
    let output = '# Netscape HTTP Cookie File\n';
    cookies.forEach(cookie => {
        const [name, value] = cookie.split('=');
        output += `.${location.hostname}\tTRUE\t/\tFALSE\t${Math.floor(Date.now()/1000)+86400}\t${name}\t${value}\n`;
    });
    const blob = new Blob([output], {type: 'text/plain'});
    const a = document.createElement('a');
    a.href = URL.createObjectURL(blob);
    a.download = 'cookies.txt';
    a.click();
})();

注意:这个方法只能拿到 document.cookie 里的 Cookie(非 HttpOnly 的)。很多关键 Cookie(如 SAPISID)标记了 HttpOnly,JS 无法读取。所以这个方法对 YouTube、Google 等网站基本无效。

四、方法三:用 Python 脚本导出(高级)

如果你熟悉 Python,可以用 browser_cookie3 库直接读取浏览器的 Cookie 数据库。

安装:

pip install browser-cookie3

导出 Chrome 的 YouTube Cookie 为 Netscape 格式:

python
import browser_cookie3
import http.cookiejar

cj = browser_cookie3.chrome(domain_name='.youtube.com')
http.cookiejar.MozillaCookieJar.save(cj, 'cookies.txt', ignore_expires=True, ignore_discard=True)

优点:能拿到 HttpOnly Cookie,且不需要打开浏览器。
缺点:需要 Python 环境,且某些 Linux 下需要关闭浏览器才能读取。

五、实践:用 cookies.txt 配合 yt-dlp

下载需要登录的 YouTube 视频:

yt-dlp --cookies cookies.txt https://www.youtube.com/watch?v=xxx

或者使用浏览器直接导入(不需要显式文件):

yt-dlp --cookies-from-browser chrome URL

这就是为什么 --cookies-from-browser 更方便——不用导出文件,yt-dlp 直接读浏览器数据库。但有些旧工具只支持文件,cookies.txt 还是必要的。

六、实践:配合 wget 或 curl

# wget
wget --load-cookies cookies.txt https://example.com/private-data
# curl
curl -b cookies.txt https://example.com/private-data

七、问题汇总

  1. yt-dlp: ERROR: cookies.txt: invalid cookie format
    原因:文件格式不是标准的 Netscape 格式。
    解决:用扩展导出的才是标准格式。手动拼凑的容易缺字段(TRUE/FALSE、域名前是否有点等)。
  2. Cookie 导出了,但 yt-dlp 仍然提示需要登录
    原因:Cookie 可能已过期。登录态的 Cookie 过期时间很短(几小时到几天)。
    解决:重新登录网站,再导出一次。或者使用 --cookies-from-browser 实时读取,每次都用最新状态。
  3. 扩展导出的 cookies.txt 里有大量重复行
    原因:扩展导出了所有域名(包括子域名)的 Cookie,这没关系,工具会自动过滤。
    解决:可以在导出的扩展界面里选择 "Only for this domain"。
  4. 在无图形界面的服务器上怎么获取 cookies.txt
    场景:你在一台远程 Linux 服务器上跑 yt-dlp,没法打开浏览器。
    解决:在你的本地电脑用扩展导出 cookies.txt,然后用 scp 传到服务器。注意:cookies.txt 包含你的登录凭证,传输时用加密通道,用完及时删除。
  5. 用 --cookies-from-browser chrome 报错 No such file or directory
    原因:yt-dlp 找不到 Chrome 的 Cookie 数据库路径。
    解决:指定配置文件位置:
yt-dlp --cookies-from-browser chrome --cookies-from-browser-path ~/.config/google-chrome/Default/Cookies URL

Windows 下类似。

  1. 导出后工具还是报 403 Forbidden
    原因:有些网站会验证 User-Agent 和 Cookie 是否匹配。
    解决:用 --user-agent 模拟浏览器的 UA,或者直接用浏览器的完整请求头。

八、安全提醒(非常重要)

cookies.txt 就是你的登录凭证,泄露给别人等于把账号送出去了。用完及时删除或加密存储。
不要上传到任何在线转换网站、GitHub、或发给他人。
在服务器上使用时,设置文件权限 chmod 600 cookies.txt。
定期清理过期的 cookies.txt 并重新导出。

九、一点小建议

1、优先用 yt-dlp 自带的 --cookies-from-browser,比手动导出文件更安全、更省事。
2、如果非要导出文件,务必用官方推荐的扩展 "Get cookies.txt LOCALLY" 或 Firefox 的 "cookies.txt" 扩展。
3、导出的 cookies.txt 可以用 head -n 5 cookies.txt 检查格式是否正确(开头应该有一行注释 # Netscape HTTP Cookie File)。
4、对于 YouTube,如果你只是为了下载不需要登录的公开视频,完全不需要 cookies。只有年龄限制、会员视频才需要。
写这篇的时候我又踩了个坑:用 Python browser_cookie3 读取 Chrome 的 Cookie,结果 Chrome 正在运行,sqlite 数据库被锁了,报错 database is locked。关掉 Chrome 后解决。但关掉 Chrome 后 Cookie 数据库里的密码可能未同步,所以最好还是用扩展导出。

最后推荐一个我的日常流程:

1、本地 Chrome 登录目标网站。
2、点击 "Get cookies.txt LOCALLY" 扩展,导出为 cookies.txt。
3、scp 到服务器。
4、在服务器上 yt-dlp --cookies cookies.txt URL。
5、任务完成后 rm cookies.txt。
顶部
×
🔖
收藏本站
将本站添加到浏览器书签,方便下次访问
Ctrl + D (Windows/Linux)
+ D (Mac)