Greasy Fork

Greasy Fork is available in English.

哔哩免登录看评论+1080p视频+免弹窗

通过拦截一些特定 Bilibili 接口请求或响应,让你的体验能够像登录用户一样丝滑

当前为 2025-04-19 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
vruses
评分
0 0 0
版本
1.0
创建于
2025-04-19
更新于
2025-04-19
大小
9.7 KB
许可证
MIT
适用于

📺 Bilibili 免登录与高分辨率视频

⏱页面组件加载时机

SSR 渲染

以视频页为例,服务端渲染时会根据用户 cookie 注入 window.__playinfo__,其中包含初始的视频 CDN 地址,未登录用户只能获取最高480p的视频(只有360p只是因为前端限制)。

播放器模块加载

  • 首先加载核心模块 core.[hash].js(基于 NanoPlayer)。
  • core 会被挂载在window.nano身上,挂载完毕后被脚本调用 nano.createPlayer(primarySetting, theme) 创建播放器实例,挂载到window.player
  • primarySetting包含从window.__playinfo__读取的视频CDN。
  • 已登录和未登录情况下core都会从window.__playinfo__身上获取CDN地址然后首先加载several video segments保证用户体验。
  • 随后core会对/x/player/wbi/v2发起请求,除了包含一些视频信息,还包含user的一些信息,比如ip,level,mid(也就是uid,未登录返回null,这条响应信息会控制player widget的方法调用逻辑及以何种方式渲染,如图)。
  • core在最后会加载npd.[nanoId].[hash].jsvideo.[hash].js。前者是一些控件用于组装player,不仅包括ui,它们身上都挂载了一些方法,比如切换画质(setQuality)跳转视频进度(seeking)等;后者用于在player组装完成后load header,以及评论区的lazy load

Image

播放器行为

  • 未登录时,core会读取 localStorage.bpx_player_profile 来获取默认分辨率,是否开启弹幕,是否试看高分辨率等状态,clear此item能刷新试看次数。未登录状态能试用高分辨率,说明未登录就能一直试用高分辨率。

  • 点击试看会请求/x/player/wbi/playurl接口,这两个参数不可少qn=80try_look=1,下表qn对应分辨率:

| QualityNumber | Resolution | | :------------ | :---------- | | 120 | 超清 4K | | 112 | 高清 1080P+ | | 80 | 高清 1080P | | 64 | 高清 720P | | 32 | 清晰 480P | | 16 | 流畅 360P |

其它模块加载

  • video.[hash].jscore调用后,它会对/x/web-interface/nav发起请求。请求结果包含用户的一些详细信息。
  • bili-header.umd.js被加载,用于生成页面顶部的header部分,nav接口返回的数据用于右上角个人中心的信息加载。
  • bili-comment.[hash].js被加载,当向下滑动被调用用于懒加载评论区数据,评论区是否被遮罩取决于nav返回的信息中是否为登录用户。
  • 当向下滑动请求视频评论区列表时,web.min.js被加载用于请求/x/v2/reply/wbi/main获取评论列表,实测当cookie中包含buvid3时只会加载三条评论,不包含buvid3时正常加载评论但缺少ip属地信息。展开评论会请求x/v2/reply/reply

Image


💡 思路

  • 自请求playurl,拿到响应替换window.__playinfo__之前,阻塞core创建player。但是注意到当设置__playinfo__nullcore会发出playurl请求,可以在此时拦截它,获取响应结果时切换成1080p分辨率。

  • 拦截playurl请求,添加参数try_look=1,改qn=80,去掉w_rid,wts并根据参数重新生成。

  • 拦截nav接口响应,伪造登录格式json达到伪登录目的,弹窗,评论区遮罩一次性解决。

  • 拦截mainreply请求,去除cookie获取所有评论数据。

Image


📝 待完善

  • 如何使player拿到playurl时请求最高分辨率或者常用分辨率,以及鼠标悬浮视频页右侧视频列表时控制台会报错。
  • 由于无法准确的记录用户的登录状态,比如登录再退出,无法确定脚本是否应该执行,最好在登录情况下禁用此脚本。
  • 如果还有其它常用,未登录也可用的接口也会考虑加进来。