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 Firefox2.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、切换到 ApplicationChrome或 StorageFirefox标签。3、左侧找到 Cookies点击目标网站域名。4、你会看到一张表每行一个 Cookie。5、需要手动拼接成 Netscape 格式。极其繁琐不推荐。用 Console 脚本导出半自动在开发者工具的 Console 里粘贴以下 JavaScript 代码会自动下载 cookies.txtjavascript(function(){const cookiesdocument.cookie.split(;).map(cc.trim());letoutput# 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 blobnew Blob([output],{type:text/plain});const adocument.createElement(a);a.hrefURL.createObjectURL(blob);a.downloadcookies.txt;a.click();})();注意这个方法只能拿到 document.cookie 里的 Cookie非 HttpOnly 的。很多关键 Cookie如 SAPISID标记了 HttpOnlyJS 无法读取。所以这个方法对 YouTube、Google 等网站基本无效。四、方法三用 Python 脚本导出高级如果你熟悉 Python可以用 browser_cookie3 库直接读取浏览器的 Cookie 数据库。安装pipinstallbrowser-cookie3导出 Chrome 的 YouTube Cookie 为 Netscape 格式pythonimportbrowser_cookie3importhttp.cookiejar cjbrowser_cookie3.chrome(domain_name.youtube.com)http.cookiejar.MozillaCookieJar.save(cj,cookies.txt,ignore_expiresTrue,ignore_discardTrue)优点能拿到 HttpOnly Cookie且不需要打开浏览器。缺点需要 Python 环境且某些 Linux 下需要关闭浏览器才能读取。五、实践用 cookies.txt 配合 yt-dlp下载需要登录的 YouTube 视频yt-dlp--cookiescookies.txt https://www.youtube.com/watch?vxxx或者使用浏览器直接导入不需要显式文件yt-dlp --cookies-from-browser chrome URL这就是为什么 --cookies-from-browser 更方便——不用导出文件yt-dlp 直接读浏览器数据库。但有些旧工具只支持文件cookies.txt 还是必要的。六、实践配合 wget 或 curl# wgetwget--load-cookies cookies.txt https://example.com/private-data# curlcurl-bcookies.txt https://example.com/private-data七、问题汇总yt-dlp: ERROR: cookies.txt: invalid cookie format原因文件格式不是标准的 Netscape 格式。解决用扩展导出的才是标准格式。手动拼凑的容易缺字段TRUE/FALSE、域名前是否有点等。Cookie 导出了但 yt-dlp 仍然提示需要登录原因Cookie 可能已过期。登录态的 Cookie 过期时间很短几小时到几天。解决重新登录网站再导出一次。或者使用 --cookies-from-browser 实时读取每次都用最新状态。扩展导出的 cookies.txt 里有大量重复行原因扩展导出了所有域名包括子域名的 Cookie这没关系工具会自动过滤。解决可以在导出的扩展界面里选择 “Only for this domain”。在无图形界面的服务器上怎么获取 cookies.txt场景你在一台远程 Linux 服务器上跑 yt-dlp没法打开浏览器。解决在你的本地电脑用扩展导出 cookies.txt然后用 scp 传到服务器。注意cookies.txt 包含你的登录凭证传输时用加密通道用完及时删除。用 --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 URLWindows 下类似。导出后工具还是报 403 Forbidden原因有些网站会验证 User-Agent 和 Cookie 是否匹配。解决用 --user-agent 模拟浏览器的 UA或者直接用浏览器的完整请求头。八、安全提醒非常重要cookies.txt 就是你的登录凭证泄露给别人等于把账号送出去了。用完及时删除或加密存储。 不要上传到任何在线转换网站、GitHub、或发给他人。 在服务器上使用时设置文件权限chmod600cookies.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--cookiescookies.txt URL。5、任务完成后rmcookies.txt。