Skip to main content

DevSam

使用TamperMonkey去除2BT0网站的VIP遮罩

在之前磁盘挂载的文章中有提到过我家里的Jellyfin影音系统。Jellyfin本身只是流媒体管理和播放的工具,需要我们自己收集相关的音视频资源配合使用。从23年左右开始,我一直使用的资源发布网站是2BT0,这个资源网站无广免费,并且资源丰富度也比较良好,大部分的电影和剧集都可以找得到。

最近(25年9月份)发现这个网站发生了一些变化,首先是开放了注册,初步推测后续可能会限制未登陆用户浏览的内容。其次资源列表(磁力链和BT)增加了限制非VIP用户的浏览门槛。顺手注册账号尝试开通vip,发现价格不低。

# 技术分析

VIP遮罩的透明度设置了50%,隐约可以看到遮罩下层已经展示了资源列表,遮罩只是前端的效果。通过浏览器的开发工具查看代码,尝试去除遮罩元素,并删除几个限制操作的样式控制代码后,便可简单的突破遮罩限制。

【补充图片】

# TamperMonkey脚本

简单写了个TamperMonkey脚本,把技术分析中的操作通过脚本自动执行。完整的脚本代码如下,需要的朋友可以直接将代码贴到浏览器的油猴插件中验证下是否能去除遮罩。

需要注意的是,示例脚本只有域名是https://web.mukaku.com/*时才会加载。如果遮罩去除未生效,可以检查下域名是否匹配。另外油猴插件支持多个match标签,推荐增加一行match规则,将未覆盖的域名增加到match规则中。

// ==UserScript==
// @name         Disable2BT0VipGateOverlay
// @namespace    http://devsam.cc/
// @version      2025-09-23
// @description  Automatically remove the VIP overlay from the resource list
// @author       You
// @match        https://web.mukaku.com/*
// @icon
// @grant        none
// @run-at       document-idle
// ==/UserScript==

(function () {
    'use strict';
    const removeOverlay = function() {
        try {
            const overlays = document.querySelectorAll('.vip-gate-overlay');
            if (overlays.length > 0) {
                overlays.forEach(overlay => {
                    overlay.style.display = 'none';
                });
                const loginContainer = document.querySelector('.login-container');
                if (!loginContainer) {
                    return;
                }
                const targetDivs = loginContainer.querySelectorAll(':scope > div > div')
                if (!targetDivs || targetDivs.length <= 0) {
                    return;
                }
                targetDivs.forEach(targetDiv => {
                    targetDiv.style.removeProperty('filter');
                    targetDiv.style.removeProperty('pointer-events');
                    targetDiv.style.removeProperty('user-select');
                });
            }
        } catch (e) {
            console.log('remove overlay failed', e);
        }
    }

    // observe configuration
    const config = { attributes: true, childList: true, subtree: true };
    const callback = function(mutationsList, observer) {
        // console.log('log-container changed');
        removeOverlay();
    }
    setTimeout(()=> {
        // element to be observed
        const targetElement = document.querySelector('.login-container');
        const observer = new MutationObserver(callback);
        observer.observe(targetElement, config);
        window.addEventListener('beforeunload', () => {
            observer.disconnect();
        });
        removeOverlay();
    }, 2000);
    console.log("Disable2BT0VipOverlay Loaded");
})();

# 效果预览

【增加执行油猴脚本前后的对比,可以是视频、gif或者静态图片】