Bilibili 字幕批量下载报 Cookie 失效?用 TaoToken 让 Codex 对照 CID 接口查
1. 脚本跑一半就报 Cookie 失效问题到底出在哪你手上这份 Python 批量下载 Bilibili 视频字幕的脚本逻辑其实不复杂pandas 读 CSV 拿到标题和视频链接正则抠出 BV 号请求 pagelist 接口拿 CID再打 wbi/v2 接口取字幕地址最后把字幕正文拼成 CSV。链路清晰但真正跑起来十有八九会卡在三个地方headers 里的 Cookie 过期、wbi 参数对不上、分 P 取完 CID 之后字幕链接拿不到。这三个问题有个共同点——它们都不是 Python 语法错误而是接口返回的 JSON 在“说话”。Cookie 失效时接口会返回-101未登录wbi 签名不对会返回-403CID 拿错或者分 P 没对齐subtitle字段直接是空数组。你盯着 traceback 看不出所以然因为 requests 根本没抛异常它只是安安静静返回了一个带错误码的 JSON。这篇就是从这个排障视角出发先把 Codex 通过 TaoToken 配通让它当一个“接口对照助手”你把报错、返回 JSON 和分段请求链路贴给它让它逐项核对 CID 和字幕接口的参数确认请求能跑通之后再回到脚本里改 headers 和参数。TaoToken 在这里只负责给 Codex 提供 Key 和 Base URL不替代 requests、pandas也不会去访问 B 站——它就是个帮你读接口、对参数的推理入口。适合谁看已经有一份能跑但总在某个环节断掉的字幕下载脚本想快速定位是 Cookie、wbi 还是 CID 问题的 Python 使用者。2. 先把 Codex 接到 TaoToken 上拿到排查用的 Key 和 Base URL排障之前得有个能对话的模型入口。我试过直接拿报错去搜索引擎翻效率很低因为 B 站接口的错误码和参数组合太多搜到的答案往往对不上你的具体分段。用 Codex 的好处是你可以把整段请求链路和返回 JSON 一起贴进去让它按接口文档逐项比对。第一步打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建账号进控制台生成一个 API Key。这个 Key 就是你后面填进 Codex 配置里的凭证。第二步在 Codex 的配置里把 Base URL 填成https://taotoken.net/api。注意这里只填到/api不要自己拼/v1/chat/completions之类的路径Codex 会按自己的协议去补全。模型名按你控制台里可用的填通常gpt-4o或claude-3-5-sonnet这类都能选。配置大概长这样以环境变量方式注入最省事export OPENAI_API_KEY你在TaoToken控制台生成的Key export OPENAI_BASE_URLhttps://taotoken.net/api如果你用的是 Codex CLI可以在它的配置文件里写[model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY然后export TAOTOKEN_API_KEY你的Key。配完之后跑一句最简单的对话测试能正常返回就说明通道通了。这一步别省很多人后面排查半天结果是 Base URL 多写了个斜杠或者 Key 复制时带了空格。注意TaoToken 只提供模型推理入口你的脚本该用 requests 还是用 requests该带 Cookie 还是带 Cookie它不碰你的业务请求。3. 把报错和请求链路整理成 Codex 能读的排查材料配通之后别急着把整个脚本甩给 Codex。它需要的是“分段请求链路 每段的返回”而不是几百行代码。你要做的是把三个关键节点的请求和响应摘出来。第一个节点是 pagelist 取 CID。请求长这样cid_back requests.get( fhttp://api.bilibili.com/x/player/pagelist?bvid{bvid}, headersheaders ) print(cid_back.status_code) print(cid_back.json())正常返回里data是个列表每个元素有cid、page、part。如果这里返回code: -400多半是 bvid 抠错了比如链接带了?p2没去掉。如果返回code: -403那是 headers 里的 Referer 或 User-Agent 被识别了。第二个节点是 wbi/v2 取字幕地址。你原脚本里w_rid是写死的364cdf378b75ef6a0cee77484ce29dbb这就是典型的 wbi 参数对不上。B 站的 wbi 签名是拿img_key和sub_key按特定规则拼出来的写死的值只在极短时间内有效换个视频或者过几分钟就失效。正确做法是先请求https://api.bilibili.com/x/web-interface/nav拿到wbi_img里的两个 key再按官方算法生成w_rid和wts。第三个节点是字幕正文。拿到subtitle_url之后请求它返回的 JSON 里body是字幕数组每项有from、to、content。如果subtitle_url是空说明这个视频没有 CC 字幕或者你的 Cookie 没有登录态看不到。把这三段的请求 URL、headers、返回 JSON 整理成一段文本贴给 Codex问它“这三段请求里哪一段的参数和 B 站接口文档对不上Cookie 失效会体现在哪个返回码上”它会帮你逐项对照。4. 让 Codex 对照 CID 和字幕接口逐项核对参数贴材料的时候把 Cookie 那行单独标出来。比如请求1: GET https://api.bilibili.com/x/player/pagelist?bvidBV1xx411c7mD 返回: {code:0,data:[{cid:123456789,page:1,part:P1}]} 请求2: GET https://api.bilibili.com/x/player/wbi/v2?aidxxxcid123456789w_rid364cdf...wts1710000000 返回: {code:-403,message:访问权限不足} 请求3: GET https://aisubtitle.hdslb.com/bfs/subtitle/xxx.json 返回: {code:-101,message:账号未登录}Codex 看到-403和-101会告诉你-403是 wbi 签名校验失败-101是 Cookie 没带上或者已过期。然后它会建议你先去浏览器重新登录 B 站F12 里复制最新的 Cookie替换 headers 里的Cookie字段。同时把w_rid和wts改成动态生成而不是写死。这里有个容易踩的坑Cookie 里包含SESSDATA、bili_jct、DedeUserID等多个字段你复制的时候要整行复制别只拿SESSDATA。另外 Cookie 有时效跑批量脚本前最好先手动请求一次 nav 接口确认登录态还在。Codex 还能帮你验证 CID 是否取对。比如分 P 视频pagelist 返回多个 CID你原脚本用item[cid]循环取这没问题但要注意aid是从视频页面 HTML 里正则抠的如果页面结构变了aid可能抠错导致 wbi/v2 返回-400。让 Codex 帮你写一段更稳的aid提取逻辑比如从window.__INITIAL_STATE__里解析。5. 验证请求跑通后再回脚本改 headers 和参数Codex 给的建议不能直接信得自己验证。最稳的方式是先用 curl 或 Python 单独跑通一个视频的三段请求确认返回code: 0且subtitle里有内容再把这套参数搬回批量脚本。验证 pagelistcurl -s https://api.bilibili.com/x/player/pagelist?bvidBV1xx411c7mD \ -H User-Agent: Mozilla/5.0 \ -H Referer: https://www.bilibili.com \ -H Cookie: 你的完整Cookie验证 wbi/v2 时w_rid和wts要动态算。你可以让 Codex 帮你写一个get_wbi_sign函数输入img_key、sub_key和参数字典输出签名后的 query string。核心逻辑是把参数按 key 排序拼成keyvaluekeyvalue形式加上wts再用sub_key做一次 MD5。具体算法 Codex 会给你完整代码你复制进脚本即可。验证字幕正文subtitle_resp requests.get(subtitle_url, headersheaders) print(subtitle_resp.status_code) print(subtitle_resp.json()[body][:3])如果这三步都返回正常再把headers里的 Cookie 换成新的把写死的w_rid换成动态生成把aid提取逻辑换成从__INITIAL_STATE__解析。改完跑一个视频看输出 CSV 里有没有字幕内容。实测下来最容易反复的是 Cookie。批量跑几十个视频中途 Cookie 可能失效脚本会开始大量返回-101。你可以在download_subtitle_json里加一个判断如果 wbi_resp 返回code -101就打印提示并break让你重新换 Cookie而不是继续跑一堆失败请求。6. 本篇常见错排查报错一KeyError: subtitle说明 wbi/v2 返回的 JSON 里没有subtitle字段。先打印完整返回看code是不是-403或-101。如果是-403检查w_rid是否动态生成如果是-101换 Cookie。报错二json.decoder.JSONDecodeError字幕 URL 返回的不是 JSON可能是 HTML 错误页。检查subtitle_url是否以https:开头你原脚本里拼了https: subtitle_links[0][subtitle_url]如果接口返回的已经是完整 URL就会拼成https:https://...。打印出来看一眼。报错三分 P 视频只下载了第一个 P检查cid_json[data]的长度以及循环里filename的拼接逻辑。你原脚本用len(cid_json[data]) 1判断是否多 P这个没问题但part_title里可能包含/等非法字符导致文件写入失败。用sanitize_filename处理一下。报错四Cookie 复制后仍然-101浏览器 F12 里复制的 Cookie 可能带了换行或多余空格。用strip()清理并确认SESSDATA的值没有过期。可以在浏览器里刷新一下 B 站首页确认登录态还在再重新复制。报错五aid提取为空页面 HTML 结构变化会导致text.find(aid)返回-1。改用正则re.search(raid:(\d), text)或者从window.__INITIAL_STATE__里解析。排障过程中如果 Codex 给的参数和实际返回对不上把新的返回 JSON 再贴回去让它重新核对。这个来回过程比你自己翻文档快得多。7. 配通之后这套排查方式还能复用到别的接口脚本Codex 走 TaoToken 配通之后你手里就多了一个“接口对照”工具。不只是 B 站字幕任何带签名、带 Cookie、带多段请求的脚本都可以用同样的方式排查把每段请求和返回整理出来让 Codex 逐项核对参数确认跑通后再回脚本改。如果你后面要长期跑这类批量任务或者想把 Codex 接进自己的编码流程里可以看看 Coding Plan它更适合持续性的脚本调试和 Agent 场景。需要单独管理 Key 的话API Keys 页面可以随时生成和吊销。接入文档里有 Base URL 和模型名的完整说明配的时候对着填就行。模型对话入口适合快速验证某个接口返回的含义比如你拿不准-403和-101的区别直接开一个对话把 JSON 贴进去问比翻社区帖子快。排障这件事工具顺手了剩下的就是耐心对参数。

相关新闻

2026最新电子节拍器选型避坑指南:告别StackTrace崩溃

2026最新电子节拍器选型避坑指南:告别StackTrace崩溃

2026最新电子节拍器选型避坑指南:告别StackTrace崩溃 还在为一段简单的计时逻辑被满屏红色的 StackTrace 搞崩溃吗?看着那几千行堆栈信息,心累得想砸键盘。…

2026/9/22 21:59:18 阅读更多 →
3个步骤一文搞懂涂鸦画底层原理与源码解析

3个步骤一文搞懂涂鸦画底层原理与源码解析

3个步骤一文搞懂涂鸦画底层原理与源码解析 看着满屏红色的 java.lang.NullPointerException 或者 Canvas is not initialized ,你是不是也感到一阵头疼?Stack Trace…

2026/9/21 20:17:23 阅读更多 →
Agent Skills 的 Spring AI 实现,模型调用走 TaoToken 通道能不能跑通?

Agent Skills 的 Spring AI 实现,模型调用走 TaoToken 通道能不能跑通?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 20:17:23 阅读更多 →

最新新闻

全金属机甲斗神怎么打:配置环境卡半天后的最佳实践

全金属机甲斗神怎么打:配置环境卡半天后的最佳实践

全金属机甲斗神怎么打:配置环境卡半天后的最佳实践 配置环境就卡半天,这是很多开发者在接触新框架或复杂系统时的第一道坎。面对全金属机甲斗神怎么打这个看似与编程无关的问题,实则隐喻了我们在处理高复杂度、多依赖、强耦合系统时的痛点。很多教程只讲理…

2026/9/22 21:59:21 阅读更多 →
DNF天帷禁地通关全解:完整示例拆解底层逻辑

DNF天帷禁地通关全解:完整示例拆解底层逻辑

DNF天帷禁地通关全解:完整示例拆解底层逻辑 官方文档里关于副本机制的说明往往晦涩难懂,几十页的文本让人抓不住重点。别慌,我们直接切入核心,用一套 完整示例…

2026/9/22 21:59:20 阅读更多 →
2026最新头像文字源码解析:面试被问原理答不上来?

2026最新头像文字源码解析:面试被问原理答不上来?

2026最新头像文字源码解析:面试被问原理答不上来? 面试被问到“头像文字”底层渲染逻辑,答不上来?这不仅是技术盲区,更是2026最新前端工程化能力的试金石。很多开发者停留在 avatar…

2026/9/22 21:59:20 阅读更多 →
属于c高频面试题

属于c高频面试题

3个实战项目带你彻底搞懂C语言指针属于谁 版本升级后 API 全变了,这是很多老程序员的噩梦,也是新手入门时的第一道坎。 别慌,今天不聊虚的。我们直接上手一个【实战项目】,通过解决一个真实的内存管理问题,来彻底搞懂那个让人头秃的问题:…

2026/9/22 21:59:20 阅读更多 →
3个坑教你手写实现装饰设计培训项目

3个坑教你手写实现装饰设计培训项目

3个坑教你手写实现装饰设计培训项目 版本升级后 API 全变了,昨天还能跑的装饰工程数据接口,今天全报 404。别急着骂娘,这其实是底层逻辑变了。很多从业者还在死记硬背旧版参数,结果被新版校验机制卡得死死的。与其天天查文档改参数,不如直接手…

2026/9/22 21:58:20 阅读更多 →
qq播放器下载源码拆解:3个实战项目级技巧

qq播放器下载源码拆解:3个实战项目级技巧

qq播放器下载源码拆解:3个实战项目级技巧 学会语法却不知怎么搭项目,是大多数开发者转行或进阶时的最大卡点。很多人背下了 Python 的类继承、Java 的并发包,甚至刷完了 LeetCode 的前 200 题,但面对一个真实的…

2026/9/22 21:58:20 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →