B站评论助手:一个把重复劳动交给机器的浏览器插件(附踩坑记录)

做自媒体运营的朋友大概都有这个体会:每天要在B站找几十个相关视频,一个一个打开、一个一个在评论区留言。这个过程没有任何技术含量,但极其消耗时间。

最近在用一个自己写的浏览器插件解决这个问题,用了一段时间,把实现思路和踩过的坑记录一下,也给有同样需求的朋友参考。

B站评论助手

一、技术选型:为什么是 MV3 + 内容脚本

最初考虑过两个方案:

方案 优点 缺点
纯 API 脚本(Python/Node) 实现简单、速度快 需要手动维护 Cookie;请求特征明显
浏览器扩展(MV3) 复用登录态、行为特征接近真人 需要处理 shadow DOM、懒加载等前端细节

最终选了 MV3 浏览器扩展,核心理由:直接复用用户浏览器里的登录态,不需要导出 Cookie;而且评论动作在真实页面上发生,行为特征和人工操作一致。

二、几个关键技术点

1. 评论框藏在嵌套 Shadow DOM 里,而且是懒加载的

B站的评论区是自定义元素 <bili-comments>,内部是多层 shadowRoot。普通的 document.querySelectorAll('textarea') 完全够不到。

更麻烦的是懒加载——组件要滚动到视口附近才挂载,直接干等必然超时。解决方案是阶梯滚动:每步 300~700px、间隔 350~800ms,边滚边查,滚到底再回中部找一遍,上限 20 秒。实测冷启动约 4.3 秒挂载完成。

// 阶梯滚动找评论组件
async function humanScrollToComments() {
  for (let i = 0; i < 20; i++) {
    if (document.querySelector('bili-comments')) break;
    window.scrollBy(0, 300 + Math.random() * 400);
    await sleep(350 + Math.random() * 450);
  }
}

2. 评论框可能贴底浮动,容器内找不到要全页深扫

有些页面的评论框是固定在底部的浮动条,不在 bili-comments 容器里。这时候需要穿透所有 shadowRoot 做全页扫描,找到后 scrollIntoView({block: 'center'}) 再交互。

3. 视频下载:Referer 与 Blob MIME 的坑

这个功能踩了两个坑,值得单独说。

坑一:CDN 要求 Referer。但 chrome.downloads.download 不支持自定义请求头(会报 Unsafe header)。解决方案是用 declarativeNetRequest 动态规则给 bilivideo.com 注入 Referer。注意 condition 里不能加 resourceTypes 过滤,否则不匹配下载请求。

坑二:下载得到 .txt 文件。这个 bug 排查了很久,根因是:

return new Blob(chunks);  // 没传 type,MIME 为空字符串

Blob 没有 MIME 类型时,Chrome 会自己去嗅探内容。如果 CDN 返回的是 HTML 错误页(有时是 HTTP 200 + HTML 验证页,resp.ok 拦不住),Chrome 嗅探出”文本”,就把文件存成了 .txt。

修复方案:Blob 必须带 MIME(优先响应头,非 video/audio 时按文件头魔数判定),并加内容魔数校验——ftyp / FLV / MP4 长度前缀之外的一律拒绝,不再把网页存成”视频”。

4. 私信需要 wbi 签名,MD5 要自己实现

私信接口 api.vc.bilibili.com/web_im/v1/web_im/send_msg 需要 wbi 签名。MV3 里没有现成的 MD5,得自己写。

这里有个隐蔽的坑:JS 里 charCodeAt(i) & 0xFF 会把中文截断成单字节,导致签名串含中文时全错。必须先做 UTF-8 编码再分块。用官方测试向量验证:

// 官方向量:params={foo:114,bar:514,zab:1919810}, wts=1702204169
// mixin_key = ea1db124af3c7062474693fa704f4ff8
// 期望 w_rid = 8f6f2b5b3d485fe1886cec6a0be8c5d4

修正后对拍 node crypto,209 例全过。

三、风控相关的设计

这类工具最容易出问题的地方不是技术,而是频率控制。当前的设计:

  • 评论间隔:1~2 分钟随机,不是固定值
  • 防重复:成功的视频写入本地历史,下次自动跳过
  • 风控码自动停:12045(验证码)/ 12008(当日上限)/ 12002(频率过快)等立即终止任务
  • 私信额外保守:间隔 2~4 分钟,同一用户永久去重(B站限制:对方未回复前最多只能发 1 条)

但必须说明:没有任何工具能保证零风险。平台风控策略是动态更新的,今天有效明天不一定。建议每天不超过 10 条,内容要有实质价值,不要夹带外链和广告。

私信功能风险等级更高,默认关闭,非必要不建议开启。

插件面板

四、其他功能

  • 搜索维度:关键词 + 六种排序 + 20 个分区 + 34 省市/36 热门城市(B站接口不支持省份参数,走关键词拼接 + 标题二次过滤)
  • 评论来源:固定模板 / 自定义(一行一条随机取)/ AI 生成(先抓标签、简介、弹幕、热评,再基于真实内容生成)
  • 授权:1 天试用 + 卡密激活;下载视频不受授权限制

五、安装

  1. 下载解压
  2. chrome://extensions → 开发者模式 → 加载已解压的扩展程序
  3. 登录B站点插件图标
  • 官网:https://dl.88531.cn/bili.html
  • 网盘:https://pan.quark.cn/s/95e3ee9d8e0f
  • 源码:https://github.com/personal82555/bili-auto-comment

写在最后

写这个插件的初衷很单纯:把重复劳动交给机器,把判断留给自己。

“找视频、打开页面、逐字输入”这些是纯体力活,交给工具没问题。但”这条评论值不值得发”这个判断,机器替代不了。

工具用对了是效率神器,用错了就是封号加速器。共勉。

软件仅供学习交流,请勿用于违规用途,使用产生的一切行为由使用者自行承担。

关注公众号:”实用软技”,在公众号窗口里回复关键字”软件”即可免费获取

https://www.88531.cn/?p=58556

www.npspro.top互联侠客
软师兄 » B站评论助手:一个把重复劳动交给机器的浏览器插件(附踩坑记录)

最TOP的Docker,软路由,虚拟机等学习资料

立即查看 了解详情