多账号并行的 B 站关注关系管理工具,桌面 EXE,数据全部本地存储。
基础
- 扫码登录,多账号并存,同时并行执行,各自独立限速
- 清理单向关注 / 回粉互粉 / 两者都做
- 演练模式、白名单、跳过认证账号与特别关注、CSV 导出
统计与循环
- 关注数 / 粉丝数实时统计 — 每轮任务自动刷新,另有独立定时刷新(默认 5 分钟一次),账号卡片直接显示数值与增减量(
+3/-2) - 自动循环 — 一轮跑完按设定间隔自动进入下一轮,可设每日操作总量上限,达到即停
- 回关率统计与自动止损 — 关注后满 N 小时自动核验对方是否回关,按来源统计回关率;样本达标且回关率低于阈值时,自动停止该来源
任务多选 · 自动找目标(v2.1) 4. 任务类型多选 — 「清理单向关注」和「自动关注目标」可任意组合,一次跑完 5. 关注目标来源多选 — ①我的粉丝列表(回粉)②关键词搜索陌生人 ③指定 UP 的粉丝 6. 关键词搜索自动找人 — 填关键词即可按页搜索陌生人并关注,支持粉丝数上限、最低等级筛选;已自动排除你自己的粉丝 7. 自动关注 × 回粉分流 — 搜索 / 指定UP 只关注「没关注过你的陌生人」,已是你的粉丝一律跳过;回粉统一走「我的粉丝列表」
稳定性(v2.1.2–2.1.3) 8. 异常后自动重启 — 任务抛异常后等待设定分钟数自动重启,连续异常达 6 次上限后停止,防死循环 9. 启动时自动恢复任务 — 全局开关打开后,软件每次启动自动接回「有任务且未禁用」的账号,过夜 / 崩溃重启无需手动点开始 10. 看门狗停滞检测 — 单次请求 30 秒超时 + 单轮内连续 N 分钟无进展即判定卡死,强制重启恢复(沉默的挂起也能被救回)
支持 11. 联系合作 / 随缘打赏支持 — 顶栏「联系合作 / 打赏」按钮,内含抖音、B站联系方式与微信 / 支付宝打赏码 12. 中文应用菜单 — 文件(重新加载 / 导出 CSV / 数据目录 / 退出)、编辑(撤销重做 / 剪切复制粘贴)、视图(开发者工具 / 缩放 / 全屏)、窗口、帮助(使用说明与风险提示 / 联系合作 / GitHub 主页 / 关于),全中文 13. 关注上限保护 — B站普通账号关注上限 5000。关注数达到设定值(默认 5000,大会员可调高)时自动跳过「自动关注」阶段,改为提示先「清理单向关注」腾名额,避免硬闯被平台拒绝
满关自救与热更新(v2.1.7) 14. 满关自救 — 账号配置新增开关:关注数达到「上限 − 预留名额」(默认距 5000 还剩 100)时,①「自动关注」暂停,不再撞上限被拒 ②「清理单向关注」忽略「关注满 N 天」门槛立即腾名额——满员账号每天都能清,不会一直卡在上限 15. 应用内热更新 — 启动 6 秒后静默检查 GitHub Releases,发现新版自动弹窗(版本号 + 更新说明 + 下载进度);点「立即更新并重启」即下载新版便携 EXE、退出时自动替换并重启。也可随时从菜单「帮助 → 检查更新…」手动触发;「稍后再说」的版本不再自动提醒
源健康度与可观测性(v2.1.8,基于 5 天实跑日志)
16. 目标 UP 轮转 — 每轮从上次停下的位置继续扫,几千个 UP 都能轮到(此前每轮只扫列表头部几个,尾部永远轮不到)
17. 失败源负缓存 — 「对方隐藏粉丝列表」自动休 30 天;-412 封禁 / -352 风控源指数退避(30 分钟→24 小时),不再每轮空跑重试(实测此前 69% 的 UP 请求是失败的)
18. 跨账号节流 + 全局熔断 — 同一 UP 被某账号扫过后 10 分钟内其他账号不再重复扫;任一账号撞到 -352/-509 触发全局暂停 15 分钟,避免 5 个账号连锁触发风控
19. 已注销 / 隐私限制黑名单 — 关注失败的「账号已注销」「隐私设置不允许关注」自动记入跨账号共享名录,之后直接跳过(实测占全部错误 31%)
20. 日志按天落盘 — 完整日志写到 数据目录/logs/YYYY-MM-DD.log(默认保留 14 天,菜单「文件 → 打开日志目录」直达),界面只留最近 300 条;日志变少后 data.json 也显著变小
持续发现新版(v2.1.10)
21. 定时复查 + 回到前台补查 — 启动 6 秒首查之外,每 2 小时自动复查一次;窗口从后台切回且距上次检查超过 30 分钟时补查一次。此前只在启动时查一次,软件常开几天就永远发现不了新版
22. 顶部「可更新 vX」常驻标记 — 发现新版后标题旁出现粉色药丸,点一下就能回到更新弹窗;即使先点了「稍后再说」或在下载前关掉弹窗,也不会再错过
23. 手动检查必有反馈 — 菜单「帮助 → 检查更新…」无论有没有新版都会给出明确结果(已是最新 / 失败原因),不会点了没反应
24. 修复「永远提示已是最新」 — compareVer() 早先只认字符串,而调用方传的是 parseVer() 的对象,解析失败返回 0 → 「当前 ≥ 最新」恒成立 → v2.1.7~v2.1.9 的更新提示一次都没弹过。现已支持对象入参并补了回归断言 + 真机全链路验收脚本 tools/test-update-check.js
界面修复(v2.1.11)
25. 界面可滚动 / 不截断 — 修复 flexbox 滚动陷阱:账号列表、配置面板、日志/明细/统计三个 tab 之前因缺 min-height:0 导致滚动条不出现、内容被硬裁(「今日」也被截断、面板无法拖动);现改为双向滚动 + chip 自动换行,窗口拉到最小(1020×640)也能看全
统计增强(v2.1.12)
26. 新增粉丝统计(今日 / 本周 / 本月 / 本年) — 卡片「今日操作」下方新增「新增粉丝」一行:今日/本周/本月/本年净增粉丝数(绿涨红跌),基于每日粉丝快照 followerLog(自动留存 400 天)计算,重启不丢、跨天累计。顺带解释「今日 N」= 今日操作总数(关注+取关+回粉),并非涨粉数
27. 操作明细与统计补时间戳 — 用户反馈「日志有时间戳、明细和统计没有」:「操作明细」表新增「时间」列(与日志一致的 HH:MM:SS);「统计」每个账号卡片头部新增「更新于 HH:MM:SS」(取自每次刷新实时数时写入的 live.at)。CSV 导出本就含完整日期时间
取关我的名单(v2.1.13) 28. 记录「关注我后又取关」的人 — 每日自动拉取粉丝列表快照并与上一次比对,差集即取关者:写入「取关」tab(昵称/UID/日期/状态),自动加入「不再回关」名单,支持逐条「加入黑名单 / 忽略」与 CSV 导出。仅读取粉丝列表、不对 B 站做写操作。受 B 站接口限制仅覆盖最近 1000 名粉丝(粉丝数超 1000 的账号更早的取关者无法覆盖,界面与日志均有提示)
一键批量取关 + 筛选(v2.1.16) 29. 「批量取关」标签页 — 把"我主动取关"做成带筛选器的工具:两种名单来源(关键字搜索 / 我的关注列表)+ 四类可叠加筛选(结果内关键字、仅「我关注但 TA 未回关」、仅「我正关注的人」、对方粉丝数区间),勾选后二次确认预览 → 一键取关 30. 安全护栏 — 取关为真实写操作:确认弹窗显示人数与预览名单;主流程自动跳过白名单 / 互关 / 不再关注名单 / 已注销者;带节流 + 20 分钟看门狗 + 每日上限;每次成功取关写入「不再关注名单」。搜索模式自带粉丝数与关系位,粉丝数区间筛选即时可用;关注列表模式覆盖前 1000 关注、自动标记不互关(粉丝数区间筛选请改用搜索模式)
粉丝画像 + 活跃度分析,穷举一键取关(v2.2.0) 34. 一键穷举可取关粉丝 — 「我的关注列表」载入后顶部直接显示「可一键取关(单向关注)人数」,并抓取对方头像/简介/粉丝数
批量取关健壮性修复(v2.2.1) 38. 布局防塌缩 — 三栏侧栏宽度按窗口比例动态钳制并随窗口缩放实时调整,中栏永不被挤成 0 宽(避免窄窗/拖宽侧栏时文字逐字竖排、表格被压成一条缝) 39. 加载态与错误可见 — 搜索/载入「我的关注」时面板显示明确加载提示与转圈;首屏请求失败直接展示原因(登录态失效 / 限流等),不再静默返回「0 人」;中途分页失败保留已采集结果并提示
三栏布局防塌缩(真正的根因,v2.2.2)
40. 显式网格列锚定 — 「取关 tab 留白 / 批量取关 tab 文字逐字竖排」的真正根因是 CSS Grid 自动排布:未加账号时中间「配置」面板被 [hidden](display:none)移出网格,其余面板自动左移、右栏掉进 8px 分隔条列 → 整栏塌缩。改为给每个面板显式指定 grid-column/grid-row,隐藏中间面板不再撼动左右栏位置
41. 对齐 v2.2.1 的修复意图 — v2.2.1 已将「返回 0 人 / 搜索载入失败无提示」修好,但布局塌缩的表象需 v2.2.2 的网格锚定才真正解决;两版共同覆盖你反馈的「界面崩坏 + 载入/搜索无效」
多方式登录 · 官方API二维码扫码 · refresh_token自动续期(v2.3.0)
45. 官方 passport API 应用内二维码扫码登录 — 新增「二维码扫码登录」按钮,主进程直接走 B 站官方 /x/passport-login/web/qrcode 接口生成二维码(PNG dataURL 内联显示,无需写文件),轮询扫码/确认状态;成功后拿到完整 cookie + refresh_token,不再依赖 Electron cookie 罐,打包后更稳
46. refresh_token 免扫码续期 — 账号列表每个账号新增「续期」按钮:用 B 站官方 RSA 公钥对 refresh_{时间戳} 做 RSA-OAEP(SHA-256) 加密得 correspondPath → 解析 correspond/1/{path} 取 refresh_csrf → cookie/refresh + confirm/refresh 刷新登录态;过期但有 refresh_token 可免重新扫码
47. Cookie 导入加固 — 手动导入 Cookie 增加格式/必填字段校验与落库兜底,导入即校验 nav 是否有效
48. 启动自动恢复编排 — 应用启动时遍历账号,登录态失效(nav≠0)且存在 refresh_token 的自动尝试续期,成功静默落库、失败才提示重新登录;界面无需手动干预
竞品借鉴升级 · 死粉三段细分 · 文件级同步 · 风控面板化 · 四段式护栏(v2.4.0)→ 二维码登录 405 修复(v2.4.1)→ 扫码确认后无凭据修复(v2.4.2)
49. 死粉三段细分 — 画像/活跃度分析后,把「值得清的沉默号」拆成有决策意义的桶:已注销/不可关注 · 内容变质(曾高产停更) · 停更(低产沉寂) · 沉寂临界 · 偶尔 · 活跃 · 从未投稿;顶部新增「死粉分段」下拉,按段秒筛
50. 四段式护栏 + 具名确认 + 强制 CSV 备份闸门 — 取关前先自动把「待操作名单」导出本地 CSV 备份(BOM 便于 Excel)再执行;确认弹窗升级为具名表格(昵称/UID/关系/活跃度/死粉分段),并明确提示「演示模式」「执行前备份」两种状态
51. 风控参数面板化 — 账号配置新增 5 项默认保守、危险默认关闭的护栏(单次批量上限 / 最近关注豁免 / 互关自动白名单 / 特别关注自动白名单 / 执行前备份);批量取关面板新增「本次上限 N 人」「最近关注 ≤ N 天保护」输入
52. 文件级同步(集合求差) — 新增「文件级同步」面板:把「当前关注」与「目标关注集(MID,昵称)」做集合求差 → 多余的取关、缺失的补关注,最适合换号迁移 / 备份还原
53. 演示 / 预览模式增强 — 「演示模式」走真实预览:主进程逐条计算「将取关 / 跳过」并生成具名计划、导出预览备份,但不发送任何真实请求
54. 活跃度置顶陷阱修复 — 最近投稿改用「前 N 条的最大 pubdate」而非首条,规避 B 站把很旧的置顶视频顶在最前导致的「误判近期活跃」
55. 平台适配器抽象(合规预留) — 新增统一 RelationAdapter 接口与注册表,B 站已实现适配器;微博/抖音/小红书仅留合规挂载点,不接入真实第三方(不碰云端代登录 / 凭据托管)
三搜索路径可用化 · 公开搜索免登录 · 核对关注状态(v2.2.3)
42. 公开搜索免登录卡口 — 搜索是公开接口,原 unfollow:search 被「nav 校验失败即报错」堵死;现 nav 失败不再阻断搜索,仅提示「取关需重新登录」
43. 网页式搜 UP 主 → 取关 — 新增「核对关注状态」按钮:搜索结果逐个查关系位,标出「已关注 / 未关注」,让「仅我正关注的人」筛选生效,只取关真正关注的
44. 列表内本地搜索 + 拉名单→勾选→取关 — 原有模式保留并加固;三处 nav=-101 过期统一提示「请重新登录(点账号刷新资料 / 扫码登录)」
35. 昵称画像 + 活跃度 — 「分析画像 / 活跃度」按钮对每个候选查询 B 站空间,得出最近投稿时间与活跃度分级(活跃 90 天内 / 偶尔 90~365 天 / 沉寂 超 1 年 / 从未投稿),卡片直接展示
36. 更聪明筛选 — 在原有基础上新增「活跃度 / 最近投稿 ≤ N 天 / 等级下限 / 有简介」,可叠加「仅不互关」精准挑沉默号
37. UI 重做 — 列表改卡片网格(头像 + 昵称 + 关系/粉丝/活跃度三色标签 + 简介),筛选栏分组更清晰
侧边栏拖动 + 热更新镜像加速(v2.1.17)
31. 侧边栏 / 日志面板宽度可拖动 — 左栏(账号面板)与右栏(运行结果 / 日志)之间各有一条分隔条,按住拖动即可调整宽度,松手后记忆到本地,下次启动恢复(左栏 200–480px、右栏 240–620px)
32. 热更新自动探测镜像 — 重写更新器下载链路:启动时并行探测多个反代镜像(ghproxy 系列),按最快来源下载;失败自动回退下一个并带重试;下载后仍校验 sha256sums.txt,不匹配即中止不替换。国内访问不再依赖直连 GitHub
33. 「热更新下载镜像」全局设置 — 三项可选:自动探测(默认)/ 直连 GitHub / 自定义前缀(如 https://ghproxy.com/),改完即生效,也可填自己的代理地址
审计修复(v2.1.14,RB1–RB23)
29. 安全与数据完整性 — 热更新下载后校验 SHA256(发布侧产出 sha256sums.txt,不一致即中止)+ HTTP Range 断点续传;三处 CSV 导出统一防公式注入;Cookie 落盘改用系统 DPAPI(safeStorage)加密;操作明细落盘持久化(重启不丢)
30. 稳定性与合规 — 单实例锁(杜绝安装版与旧便携版并发写同一 data.json);登录临时会话自动清理;主进程未捕获异常写日志并通知界面;高频统计字段延迟落盘降低写入放大;每日上限/粉丝快照/取关节流统一使用本地日期(消除 UTC 跨天错位 8 小时)
31. 风控与体验 — 新增「休息时段 / 每周休息日」(命中自动暂停循环)、「跳过大会员」过滤、多账号按 UID 分散 UA;来源统计自动清理(30 天/上限 500);待核验队列设上限与超龄丢弃;明细/统计渲染改 rAF 合并,降低高频刷新卡顿
| 浏览器 Console 脚本 | 本工具 | |
|---|---|---|
| 方式 | DOM 模拟点击 → 页面改版即失效 | 直连官方接口 /x/relation/modify + WBI 签名 |
| 账号 | 单账号(当前 tab 登录态) | 多账号并存,同时执行 |
| CORS | 受同源限制 | 主进程发请求,无跨域问题 |
| 凭证 | 每次重开浏览器要重来 | 一次扫码,长期复用 |
| 限速 | 固定 1.5s | 每账号独立随机间隔 3~6s,遇 -509 自动暂停 60s |
| 审计 | 无 | 实时日志 + 操作明细 + CSV 导出 |
当前产物在
dist/(v2.4.2)
方式一:安装版 —— dist\B站关注管理台-2.4.2.exe(NSIS,可选安装路径,建桌面/开始菜单快捷方式)
方式二:便携版 —— dist\B站关注管理台-2.4.2-便携版.exe(单文件约 96MB,双击即用,免安装)
方式三:免打包 —— dist\win-unpacked\B站关注管理台.exe(解压版,便于排查)
已验证:打包后的 EXE 执行 --selftest 通过,结果写入 %APPDATA%\bili-relation-manager\selftest.txt。
- 运行 EXE → 右上角有三种登录方式:
- 「二维码扫码登录」(推荐):应用内生成官方二维码,手机 B 站 App 扫码确认即可,拿到 cookie + refresh_token,打包后最稳。
- 「+ 扫码登录账号」:传统弹窗浏览器扫码。
- 「手动导入 Cookie」:从浏览器复制 Cookie 粘贴导入,导入即校验有效性。
- 如需第二个账号:关闭登录窗口 → 再次点「二维码扫码登录」,重复即可。账号数量不限。
- 账号登录态过期时,点账号卡片的「续期」可用 refresh_token 免扫码刷新;若续期失败再重新扫码/导入。
- 左侧选中账号 → 中间面板配置:
- 任务类型(可多选):
清理单向关注/自动关注目标 - 关注来源(可多选):
我的粉丝列表(回粉)/关键词搜索(自动找陌生人)/指定 UP 的粉丝 - 选「关键词搜索」时填关键词(空格/逗号分隔);选「指定 UP」时填目标 UID
- 操作间隔:建议 3000
6000 ms;每轮上限:建议 3050 - 演练模式:默认勾选,只列名单不发写请求。确认无误后取消勾选才真正执行。
- 勾选「仅处理关注满 N 天仍未回关的」→ 只清理关注时间达到天数的账号
- 勾选「满关自救」→ 关注数达到「上限 − 预留名额」时:自动关注暂停、清理忽略天数门槛立即腾名额,满员账号每天都能清(上限值见全局设置「关注上限保护」)
- 勾选「自动循环」→ 设定每轮间隔(分钟)与每日上限(0 = 不限)
- 「异常后自动重启」「看门狗停滞阈值」→ 无人值守自愈,详见上文
- 任务类型(可多选):
- 点「全部开始」—— 所有账号各自起一条流水线,真正并行,互不阻塞。
- 右侧三个标签页:
- 日志:实时滚动
- 操作明细:每条处理结果与跳过原因
- 统计:关注/粉丝数、今日操作量、按来源 UP 的回关率与启停状态
- 全局设置里可维护「不再关注名单」,以及回关率下限、最小样本量、核验延迟、统计刷新间隔。
bili-relation-manager/
├── main.js 主进程:窗口、IPC、扫码登录会话隔离、任务转发
├── preload.js contextBridge 白名单桥接(nodeIntegration=false)
├── src/
│ ├── bilibili.js B 站接口客户端:WBI 签名(MD5)、列表、关系变更
│ ├── store.js 本地 JSON 持久化(userData 目录)
│ ├── task.js 多账号并发引擎
│ ├── updater-core.js 热更新纯逻辑(版本比较 / 挑安装包,可单测)
│ └── updater.js 热更新:查 GitHub Releases → 下载 → 守护脚本替换重启
├── renderer/ 界面(HTML/CSS/JS,无 Node 权限)
├── test/smoke.js 冒烟测试
├── test/engine.js 功能离线测试
└── dist/ 打包产物
- 界面日志页:最近 300 条,存在
data.json,重启不丢 - 完整历史:
%APPDATA%\bili-relation-manager\logs\YYYY-MM-DD.log,按天一个文件,默认保留 14 天 - 菜单「文件 → 打开日志目录(按天存档)」可直接打开
npm install
npm start # 开发模式运行
npm test # 全套测试:smoke 27 + engine 57 + ui 37 + batch 12 = 133 项
node test/engine.js # 仅功能离线测试(并发/上限/白名单/演练/停止/搜索找目标/回关率/自动循环/异常重启/看门狗/满关自救/源负缓存/轮转/节流/熔断,57 项)
npm run build # 打包 Windows x64,产出 nsis 安装包 + portable 单文件
npm run clean:dist # 清理历史打包产物,只保留当前版本(删除 dist-v*、旧版 exe/blockmap、latest.yml)
node tools/verify-asar.js # 打包后校验 asar 里文件齐全 + 版本标记都在(PASS/FAIL)本机若设置了
ELECTRON_RUN_AS_NODE(部分 Electron 宿主终端会注入),手动调试需先清除:env -u ELECTRON_RUN_AS_NODE node_modules/electron/dist/electron.exe .
- 改
package.json的version与main.js的BUILD_TAG,跑测试 +npm run build - 打 tag 并推送,创建 Release 后上传两个 EXE 作为资产:
git tag v2.1.15 && git push origin v2.1.15
# 创建 Release(notes 取自 RELEASE_NOTES.md),上传两个 EXE + sha256sums.txt:
GH_TOKEN=<github token> node tools/publish-release.js发布脚本会同时生成并上传
sha256sums.txt;应用内热更新下载后会校验 SHA256,不匹配直接中止(v2.1.15)。若校验文件缺失,更新仅退化为体积校验并提示。
打包时若卡在下载(
Timeout awaiting 'request'),先设国内镜像:ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/,并确保LOCALAPPDATA有值(否则 electron-builder 缓存目录解析失败,每次都要重新下载工具链)。
- 用户端:启动 6 秒后自动检查,发现新版即弹窗;点「立即更新并重启」自动完成替换。也可菜单「帮助 → 检查更新…」手动触发
两个坑(已踩过):① GitHub 会剥掉资产名里的非 ASCII 字符,中文名会变成
B.-2.1.7-.exe,所以资产一律用 ASCII 名 +portable/setup标记,热更新靠这个标记挑「便携版」;②uploads.github.com的 URL 拼装不要多加?(URL.search自带问号),否则报Invalid name for request。
- 列表:
GET /x/relation/followings、/x/relation/followers(需 WBI 签名) - 变更:
POST /x/relation/modify,fid+act(1 关注 / 2 取关 / 5 拉黑 / 6 解除拉黑 / 7 移除粉丝)+re_src=11+csrf=bili_jct - 关系位掩码
attribute:2=我关注了TA,4=TA关注了我,6=互粉,128=拉黑- 清理单向:
!(attr & 4) - 回粉:
!(attr & 2)
- 清理单向:
nodeIntegration: false+contextIsolation: true,渲染层拿不到 Node- IPC 全部白名单注册,入参在主进程校验与转字符串
- 账号凭证仅保存在本机
%APPDATA%\bili-relation-manager\data.json,不外传;v2.1.14 起 Cookie 经系统 DPAPI(ElectronsafeStorage)加密后落盘(内存中才明文),旧版明文数据自动迁移 - 热更新下载后校验 SHA256(
sha256sums.txt),不匹配即中止,不替换进程 - 单实例锁:同一时间只允许一个实例运行,避免多版本并发写同一
data.json - 默认「演练模式」开启;
-509限流自动暂停;-352/-111致命码终止该账号任务 - 支持「特别关注」跳过、认证账号跳过、大会员跳过、全局白名单 UID
- CSV 导出统一防公式注入(
= + - @前置单引号)
批量操作属自动化行为,可能被平台识别。务必:单次 ≤ 50、间隔 ≥ 3 秒;出现 -509(频繁)或 -352(风控)立即停止并等待数小时。合规使用。
本工具完全免费,所有数据只保存在本机、不上传服务器。如果它帮到了你,欢迎「随缘」打赏支持,或来找我聊合作:
- 抖音:许许许许许、若辰 — 抖音号 / 合作:
A604665656 - B站:许许许许许、若辰 — UID:
298813 - 微信支付 / 支付宝:见软件内「联系合作 / 打赏」弹窗中的二维码
打赏纯属自愿,不影响任何功能。