给 B 站粉丝页补上一个和关注页一模一样的搜索框。输了字就搜,搜的是整个粉丝列表,不是当前这一页。
dist/bfs-fans-search.user.js(约 397 KB,拼音库已内联,离线可用)https://space.bilibili.com/*、https://www.bilibili.com/space/*@grant none,不加载任何远程脚本B 站的空间页里,「关注」有搜索框,「粉丝」没有。
粉丝页的头部其实和关注页是同一个组件,只是它是空的:
<!-- 关注页 -->
<div class="relation-content-header__right">
<div class="vui_input fav-list-header-filter__search">
<input placeholder="输入关键词">
</div>
</div>
<!-- 粉丝页:同一位置,空的 -->
<div class="relation-content-header"><!----><!----></div>
于是粉丝一多,想找某个人只能一页一页翻,而每页只有 24 个。
这个脚本做的,就是把粉丝页里那个空位置填上同款搜索框,并且让搜索范围覆盖整个粉丝列表。
默认状态 —— 只是多了一个搜索框,不打扰原有列表:
搜索中文昵称:
搜索拼音(qinuo 命中「奇诺比奥和奇诺比珂qs」):
dist/bfs-fans-search.user.js 的内容整个粘贴进去 → 保存;.user.js 文件拖进浏览器窗口,管理器会弹出安装页。https://space.bilibili.com/<你的UID>/fans(或从「我的粉丝」点进去),
头部就会多出搜索框,不需要登录脚本管理器账号,也不需要额外配置。首次安装后如果没反应,刷新一次页面即可。脚本是
document-idle注入, 站点是单页应用,之后在空间内跳转不需要再刷新。
| 输入 | 结果 |
|---|---|
小明 |
昵称里含「小明」的粉丝 |
xiaoming |
拼音全拼,同样命中「小明」「小明明同学」 |
xm |
拼音首字母 |
qinuobiao |
「奇诺比奥和奇诺比珂qs」 |
qnbahqnbk |
同上,首字母连写 |
老师 qin |
两个关键词同时命中(AND,空格分隔) |
3706975095359970 |
按 UID 精确查找 |
A-SOUL |
英文昵称,不区分大小写 |
qinuobiao),告诉你 这条是靠拼音搜出来的,
避免出现「我没搜这个名字,它怎么出来了」的疑惑。搜索框左边是四个筛选条,带实时计数:
全部 / 互关 / 单向 / 大会员
它们可以和搜索词叠加使用,例如「只看互关的、名字带老师的」。
不输关键词时,结果按关注时间从近到远排列;输了关键词时,按相关度排列 (UID 精确 > 昵称完全匹配 > 昵称前缀 > 昵称包含 > 拼音 > 首字母 > 签名)。
| 站内搜索 | 本脚本 | |
|---|---|---|
| 搜索范围 | 全站用户 | 当前这个人的粉丝列表 |
| 匹配方式 | 昵称关键词 | 昵称 / 拼音 / 首字母 / UID / 签名 |
| 结果排序 | 平台算法 | 关注时间 或 相关度 |
| 能否筛选互关 | 不能 | 能 |
典型场景:想在自己的 400 多个粉丝里找出某个眼熟的人,但只记得读音、或者只记得名字里有个字。 站内搜索做不到,脚本可以。
/123456/fans、/123456/relation/fans、/zh-CN/123456/fans
以及旧版 www.bilibili.com/space/123456#/fans),只在这些页面上激活。.space-fans .relation-content-header,把搜索框和筛选条插进站点预留的
__left / __right 插槽。类名、图标字体、尺寸(310px)全部沿用站点的,
颜色取站点 CSS 变量,所以亮色 / 暗色皮肤都自动跟随。ps=50 逐页请求 x/relation/fans,去重后合并。
第一页会做一次预检:如果接口把 ps 悄悄压小,就按真实页大小重新分页,避免漏人。localStorage,下次进同一个页面秒开,点「刷新」才重扫。B 站对短时间内的密集请求比较敏感,翻页太快会返回 -352。
脚本的处理:
-352 / -412 / -799 自动退避重试,间隔依次为 1.5s → 3s → 6s → 12s → 20s → 30s;如果连续失败,建议:隔几分钟再点「重试」,或者先去正常刷几个视频,让账号行为看起来正常一些。
api.bilibili.com。localStorage(键名 bfs:v1:fans:<UID>,压缩存储,1000 人约 120KB)。/x/web-interface/nav
拿到的登录 UID 与 URL 里的 UID 是否一致,脚本里没有任何写死的 UID。Q:搜索框没出现?
A:确认你打开的是粉丝页(地址栏以 /fans 结尾)。在个人主页、关注页、动态页都不会注入。
另外确认脚本管理器里这个脚本是启用状态。极少数情况下站点改版会导致选择器失效,可以反馈。
Q:搜不到某个明明存在的粉丝? A:先看状态条里的「共 N 位粉丝」。如果 N 明显小于你实际粉丝数,说明接口只返回了前一部分—— 网页端前端只展示前 1000 位,接口在部分账号上能翻得更深,脚本不会主动截断, 但接口不给的它也没办法。另外确认这个人没有被你搜索词之外的筛选条件排除。
Q:为什么数量显示 439,但只找到 400 多?
A:total 是接口声明的总数,实际能取到的以扫描结果为准;两者不一致时状态条会说明。
Q:未登录能用吗?
A:不能。粉丝列表接口需要登录态,未登录会返回 -101,搜索框会提示你先登录。
Q:会不会拖慢页面? A:不会。只有打开粉丝页时才工作,扫描是异步的、边扫边渲染;离开粉丝页会停掉扫描并移除注入的节点。
Q:和「B站粉丝列表搜索」扩展版有什么区别? A:功能完全一致,代码同源。扩展版只是给装不了脚本管理器的浏览器(同样是 Chromium 内核)用的。
1.0.0
MIT。内联的 pinyin-pro 版权归其作者,同样为 MIT。