B站替换弹幕池油猴脚本(适用于补档视频)
2026-02-22
78
本文为本站原创,未经允许请勿随意转载,谢谢!

本脚本仅适用于原稿件弹幕池还开放的情况。

下面代码中的oid即为视频的cid(如何获取可以自行搜索),可以通过https://comment.bilibili.com/<cid>.xml​ 接口来测试弹幕池状态。

新发送的弹幕等操作仍会在补档视频的弹幕池(这里没有拦截发送接口使弹幕发送到原视频弹幕池是为了防止可能存在的“污染”)。

修改下面代码中的replaceList可以自定义。

// ==UserScript==
// @name         B站弹幕池替换
// @namespace    http://tampermonkey.net/
// @version      2026-02-26
// @description  替换B站弹幕请求的oid参数,支持多个视频配置。
// @author       https://space.bilibili.com/226755921
// @match        https://www.bilibili.com/video/BV*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 配置列表:每个视频的BV号和对应的oid
    const replaceList = [
        { bv: 'BV1pvZfB2EFW', oid: 36088580775 },
        { bv: 'BV1UtBEB8ESc', p:3 ,oid: 30544694949 },
        // 在这里添加稿件配置
        // “p”代表第几分p,可以写也可不写,不写时默认为1
        // { bv: 'BVxxx', oid: xxx },
        // { bv: 'BVxxx', p:x, oid: xxx },
    ];


    // /////////////////////////////////// 以下代码勿动!!!(除非你知道你在做什么) //////////////////////////////////////

    // 检查当前视频是否需要替换
    function getTargetOid() {
        const url=new URL(window.location);
        const bvid = url.pathname.match(/\/video\/(BV\w+)/)?.[1];
        if (!bvid) return null;
        const p=parseInt(url.searchParams.get('p')||1)

        const config = replaceList.find(item => bvid===item.bv && p==(item.p||1));
        return config ? config.oid : null;
    }

    // 原始的open方法
    let oldOpen = XMLHttpRequest.prototype.open;
    // 重写open方法
    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
        // 获取当前视频对应的oid
        const targetOid = getTargetOid();
        // 如果有配置且是弹幕API请求,则替换oid参数
        if (targetOid && typeof url === 'string' && url.includes('api.bilibili.com/x/v2/dm/wbi/web/seg.so')) {
            const newUrl = url.replace(/(oid=)\d+/, '$1' + targetOid);
            if (newUrl !== url) {
                console.log('😄 弹幕池已载入', targetOid);
                url = newUrl;
                // 模拟点击弹幕池以重新加载弹幕,如果体验不好可以把下面4行代码注释掉
                setTimeout(() => {
                    document.querySelector("#danmukuBox .bui-collapse-header")?.click()
                    document.querySelector("#danmukuBox .bui-collapse-header")?.click()
                }, 1000);
            }
        }
        // 调用原始的open方法
        return oldOpen.call(this, method, url, async, user, password);
    };

    console.log('✅B站弹幕池替换脚本已加载');
})();

注意:

  1. 只适用于电脑网页版。
  2. 代码中的默认配置适用于【极客湾】(一补)手机游戏性能大横评:厂商作弊太疯狂!及其补档,懂自懂。
  3. 用完记得把脚本关掉。

效果示意:

补档弹幕池油猴脚本