拒绝算法绑架!「TabulaBili-Plus 」扩展:让 B 站个性化推荐算法“彻底失忆”一键回归纯净热门流
1. 你的 B 站首页,是不是也被算法“绑架”了?
如今打开小破站,首页推荐的内容越来越精准,但也越来越让人感觉无趣了。
不小心点开了一个机械键盘的评测,好家伙,接下来起码一个星期,首页全是各种轴体、套件和客制化的评测和介绍视频。其实我只是为了看封面图里的那只猫才点进去的,我不想看键盘啊!——更让人哭笑不得的是,你刚看了一个 UP 主的视频,还不小心又多看了一个,算法就会贴心地认为你特别喜欢这个 UP 主,只是还没关注,于是主动把该 UP 主以及其他发过同类型、甚至观点大同小异的 UP 主的视频铺满你的首页。
这种看似“投其所好”的机制,在产品经理的口中叫作“精准用户画像”,但在用户眼里,它有一个更麻烦的名字——信息茧房。
2. “个性化推荐”与“公共热门流”,到底孰优孰劣?
| 推荐流类型 | 优点 | 缺点 |
|---|---|---|
| 个性化推荐 | 极其精准 算法会根据你几百条的浏览和播放历史,死死拿捏你的喜好,属于温水煮青蛙式的“真香”。 |
视野日益狭窄 你很难在首页接触到你认知以外的新世界,算法只让你看它以为你想看的东西。 |
| 公共热门流 | 充满未知与随机 是整个 B 站当下最真实的、没有任何用户画像过滤的公共热门内容。你能刷到平时根本不会主动搜索的领域。 |
缺乏针对性 因为不知道你的喜好,首页会混进一些你不怎么感冒的泛娱乐大热门(比如美妆、吃播、影视切片、玩抽象等)。 |
为了摆脱算法的精准推送,我以前经常用隐私模式去看 B 站,去看看有没有不一样的东西。但没登录的代价非常明显:低清画质、无法发弹幕、不能随手点赞收藏,页面滚着滚着就会弹窗叫我登录,浏览体验极差。
难道我们就不能既登录账号享受 1080P 高清画质,又能看一眼干净、随机、没有被历史记录污染过的公共热门流吗?
当然能。这就要请出我今天给大家安利的主角了——TabulaBili-Plus(初见哔哩增强版)。
这是一款被我无意中发现并试用,因不满现有功能而动手二次开发,最终历经波折成功上架 Chrome 应用市场的浏览器扩展。

如果你也厌倦了被算法反复投喂同样的内容,想找回当年第一次打开 B 站时那种“人生若只如初见”的探索感,这个小扩展绝对能帮到你。
3. 如何关闭B站个性化推荐?TabulaBili-Plus 安装与使用指南
a. 在线安装
- 「点击一键安装」 或者在 Chrome 应用商店搜索
TabulaBili-Plus。 - 像正常扩展程序那样点击安装即可。
b. 本地安装(开发者模式)
- 下载扩展:GitHub | 蓝奏云
- 将
TabulaBili-Plus文件夹解压到一个你喜欢的位置。 - 打开 Chrome 浏览器,在地址栏输入
chrome://extensions/进入扩展管理页面。 - 开启页面右上角的 “开发者模式”(Developer mode)。
- 点击左上角的 “加载已解压的扩展程序”(Load unpacked),选择本扩展所在的目录(即
TabulaBili-v1.*.*文件夹)。
c. 使用方法
- 在浏览器右上角的扩展工具栏中找到 TabulaBili-Plus 并将其固定。
- 点击扩展图标打开设置面板:
- 开启过滤 (ACTIVE):开启纯净访客模式,立即屏蔽个性化推荐。
- 关闭过滤 (OFF):一键瞬间恢复原版 B 站个性化推荐。
- 智能刷新:在切换开关时,如果扩展检测到你当前正在浏览 B 站页面,会自动帮你重载页面,让新模式立即生效。
- 强制刷新:当检测到用户访问 B 站首页,且「换一换」按钮出现时就自动点击,替换首屏的 10 个个性化推荐视频。
d. 扩展使用效果

- 开启扩展后,首页推送完全是根据热门算法排序推荐的。
- 关闭扩展后,首页推送完全是根据个性化算法推荐的。(我就是早上点了一个许仙和街头大爷下象棋的视频,你看这算法就给我塞了多少个象棋的视频)
- PS:请手动忽略页面内的美化样式(手动狗头)。
💡 小提示:下面就是我的一些技术实现细节和个人吐槽了,想要“省流”的读者可以直接跳到文末去下载体验啦!
4. 简单说说原理:我是如何打破大数据精准推送的?
B 站后端之所以知道你是谁、该给你推什么视频,全靠请求头里携带的身份凭证——Cookie(包含你的 SESSDATA 等身份认证标记字段)。本扩展其实就做了两件事:
核心机制 A:网络层身份剥离(打破B站信息茧房)
当插件的开关处于 启用(ACTIVE) 状态时,它会通过 Chrome 的 Manifest V3 声明性网络请求(declarativeNetRequest,简称 DNR,去广告扩展也会使用这个特性)来过滤流量。
每当浏览器准备向 B 站的首页推荐接口(api.bilibili.com/.../rcmd)发起异步请求时,插件会在请求发出的最后一刻拦截请求,精准地把请求头里的 Cookie 字段直接“移除”。
这样一来,B 站的后端首页推荐接口收到请求时,会认为:“这个人没有携带任何身份信息,他是一个刚刚清除过浏览器缓存、或是第一次访问 B 站的全新访客!” 于是,B 站服务器就会老老实实地把最纯净的、根据热门算法排序的首页内容返回给浏览器。
核心机制 B:自动重请求推荐 (对抗 SSR 服务端渲染)
B 站为了提升首页的打开速度,采用了 SSR(服务端渲染) 技术。当你输入网址或按 F5 刷新时,第一屏的前 10 个视频数据是跟着主站网页的 HTML 一起打包直出的。好处是能减少浏览器绘制网页的时间,但对于咱们来说就麻烦了——这前 10 个视频一定是个性化推送的。由于我们不能直接拦截主站的 Cookie(否则账号就会全局退出登录),所以每次刷新后的首屏前 10 个视频依然会遵循个性化推荐。
我的 Plus 版解法: 插件引入了一个基于 MutationObserver 监听机制的本地内容脚本(content.js)。每当你打开 B 站首页时,它会在后台静默监视页面结构,一旦发现首页那个“换一换”按钮被渲染出来,就会在几毫秒内自动模拟点击一下它!
因为点击“换一换”触发的是向 B 站首页推荐接口发起的增量请求,正好撞在前面 DNR 的拦截枪口上。Cookie 被抹除后,首页的前 10 个视频就会被顺利替换为热门算法排序的纯净版。
为了用户体验,我还做了一个“防误伤滚动拦截”:如果在弱网环境下网页加载太慢,页面上部分视频已经加载完成且用户已经向下滚动开始浏览,脚本就会主动放弃强制刷新,避免刷掉用户正在看的内容。
有人可能会问:你为什么要在“换一换”按钮被渲染出来后才刷新,直接上来就刷不行吗?答案是:不行。因为扩展无法判断页面当前的加载状态,在部分 JS 和 CSS 还没载入时就提前刷新,只会得到一个布局诡异的错乱页面。
5. 迟到多年的“处女作”与落灰的开发者账号
其实,这是我第一款真正成功上架到 Chrome 应用市场的浏览器扩展。
当年为了解决一个自用痛点,我曾兴冲冲地写过另一款扩展,准备好开发者账号,结果刚准备提交,谷歌突然搞出了 Manifest V3(简称 MV3),强行把 MV2 停用。由于那款老扩展的某个核心逻辑在 MV3 严苛的安全沙箱机制下根本没有可替代的方案,最后只能无限期搁置,我的开发者账号也就跟着一起落了灰。
前阵子,我在 RSS 阅读器里偶遇了原作者 @wangdaodao 开源的 TabulaBili(初见哔哩) 项目(原作者博客)。
原作者的技术嗅觉非常敏锐。面对如何在不破坏B站首页的情况下展示热门流视频这个需求,我第一时间想到的是通过在前端注入 JS 重新去请求不带 Cookie 的内容,再利用返回数据修改前端界面。但这个过程极易出错,B 站稍微改点代码就会直接 GG。而他想到了直接从底层的网络拦截规则入手,这个精妙的点子和开源工作必须给一个大大的赞赏!
我下载试用后觉得体验很好,顺手 fork 了一份,改掉了使用中发现的一个小 Bug 并给作者提了 PR。随后我跑去小众软件写了个推荐贴,收到的头一条评论就是:“会上架商店不?” 确实,对于普通用户来说,在商店里一键安装比起开启开发者模式去手动加载要方便太多了。在原作者明确表示自己不会上架后,我决定重新唤醒我那个落灰多年的开发者账号。
6. 谷歌的“法务式”刁难:难怪原作者不上架
在把原作者的源码重构、增加完善功能并提交给应用商店的这几天里,我算是彻底领教了谷歌开发者后台的折腾程度。体验了一圈下来,我心里只有一个想法:难怪原作者不上架。
1. 申请主机权限困难重重
在如今的 MV3 时代,谷歌对主机隐私权限和远程代码注入有着近乎偏执的防范。为了能够合规地匹配 B 站首页带参数的特殊 URL(如 www.bilibili.com/?*)以及确保冷启动时不漏掉任何一个 Cookie,我必须在后台提交长篇大论、极其严密的理由,解释我为什么需要请求这些隐私权限。
而且每一项技术理由,写短了不给过,写长了也不行(有 1000 个字符的限制)。为了快速通过审核,我还得写成中英双语的(只用中文写审核会变慢,因为需要转给懂中文的审核人员),逼得我最终放弃了自己硬憋,改用 AI 来帮我填写这些输入框。
2. 商店宣传截图折腾人
商店上架必须要一张 1280x800 或 640x400 的高清界面截图。而我的扩展弹窗界面只有 320 像素宽。如果我直接截取「扩展界面 + B 站真实页面」来凑尺寸,又极易触发谷歌“侵犯第三方商标与版权”的红线。
为了搞出一张合规且好看的宣传图,我折腾了很久。先试着用 PS 搞定,结果自己美术水平不堪入目;接着尝试让 AI 画,结果 AI 总是篡改界面里的细节,最聪明的 Image 2 也在瞎搞。最后一琢磨,比起画图,写代码才是 AI 更擅长的领域,于是我让它写了一个虚假的静态 HTML 页面,并盯着它改了好几版后,才通过截图完成了审核用图的生成。
PS:我说怎么总在扩展商店里看到一些扩展的预览图长宽比严重失调、明显被错误拉伸,之前我还奇怪这些作者扩展都会写,怎么连截图都不会,合着都是被谷歌给逼的。
3. 当开发者需要自费
是的,往 Chrome 应用市场上传扩展是需要开发者掏钱的。谷歌会向开发者收取 5 美元的注册费,按照谷歌的说法,主要目的是防范垃圾信息和恶意软件。通过收取这笔象征性的费用(并要求绑定有效的支付方式),谷歌能够验证开发者的真实身份,防止恶意用户批量注册账号来分发欺诈性或带有病毒的扩展程序。
但对于个人独立开发者来说就有点蛋疼了。首先,我的扩展本来就是免费开源给大家用的,结果我自己还要掏钱上架;其次,Chrome 应用市场理论上不接受中国大陆地区的银联卡,需要使用境外银行卡或者 VISA、Mastercard 等卡组织的信用卡。如谷歌所愿,这 5 刀的注册费用,确实成功提高了开发者上架的门槛。
4. 二开项目最好不要和上游项目同名
本来呢,我觉得自己对原项目没改太多东西,初版(V1.0.0)其实也就只改了一下域名匹配逻辑,解决了错误匹配到非 B 站页面的问题。既然原作者说自己不想上架,且项目开源协议是 MIT 协议,于是我就直接原样提交了,名字、图标、介绍和原项目完全一致。结果……谷歌直接给我打回了。
审核理由是:涉及仿冒其他项目(也就是上游项目),不能自称是“替原作者上架”。经过询问其他有上架经验的大佬,我修改了扩展名称和图标——原版叫 TabulaBili 并配有粉色 T 字图标,我改成了 TabulaBili-Plus 并配有绿色漏斗图标,随后才成功将 V1.1.0 版上架。(其实我自己反而觉得改完名后更像仿冒的了,有些搞不懂谷歌的脑回路 😂)
7. Plus 版和原版有什么区别?
- 「功能性」 优化了 B 站域名匹配逻辑,不会错误匹配到非 B 站的三方网页。
- 「功能性」 加入了自动「换一换」功能,完美解决了 B 站首页前 10 个视频被强制进行个性化推送的问题。
- 「美观性」 为了顺利上架 Chrome 商店,修改了图标和扩展名,满足了平台“无冒充混淆”的合规要求。
- 「美观性」 出于个人开发习惯,将 CSS 样式代码从 HTML 中进行了彻底分离。
- 「功能性」 修复了原版的几个 Bug,比如扩展界面文字和开关状态不同步、存在误导性描述、以及部分 UI 文字重叠之类的小问题。
8. 下载与开源
本扩展纯本地安全运行,借助 MV3 的 DNR 底层特性,加上超时主动退出机制和防误伤刷新机制,扩展的系统性能需求几乎为零。
- Chrome 商店正式版下载:点击前往 Chrome 应用商店 一键安装
- GitHub 源码地址:
https://github.com/tjsky/TabulaBili
希望这款克制、纯粹的小工具,能帮你在喧嚣的大数据时代里,挣脱出一方能够自由呼吸、探索未知的纯净天地。


匡文成的网络日志
2026-05-22 13:30
话说我已经好久不看B站了。
obaby
2026-05-22 13:28
全能型选手啊,我在b站上花的时间越来越少了。
fengc's Blog
2026-05-22 13:03
突破信息茧房,点赞。