// ==UserScript== // @name VIP Gate Remover // @namespace http://tampermonkey.net/ // @version 1.0 // @description 移除VIP专属内容遮罩层,解锁隐藏资源 // @author You // @match https://web5.mukaku.com/* // @match https://www.0bt0.com/* // @match https://www.1bt0.com/* // @match https://www.2bt0.com/* // @match https://www.3bt0.com/* // @match https://www.4bt0.com/* // @match https://www.5bt0.com/* // @match https://www.6bt0.com/* // @match https://www.7bt0.com/* // @match https://www.8bt0.com/* // @match https://www.9bt0.com/* // @match https://www.butailing.com/* // @match http://web5.mukaku.com/* // @match http://www.0bt0.com/* // @match http://www.1bt0.com/* // @match http://www.2bt0.com/* // @match http://www.3bt0.com/* // @match http://www.4bt0.com/* // @match http://www.5bt0.com/* // @match http://www.6bt0.com/* // @match http://www.7bt0.com/* // @match http://www.8bt0.com/* // @match http://www.9bt0.com/* // @match http://www.butailing.com/* // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; // CSS to hide the VIP gate overlay and remove blur effects const hideVipGateCSS = ` .vip-gate-overlay, div[class*="vip-gate-overlay"], div[data-v-0dc0d6d1].vip-gate-overlay { display: none !important; opacity: 0 !important; visibility: hidden !important; pointer-events: none !important; } /* Remove blur effects from inline styles and classes */ div[style*="blur"], div[style*="filter"], .content-blur, .vip-blur, [class*="blur"] { filter: none !important; -webkit-filter: none !important; pointer-events: auto !important; user-select: auto !important; -webkit-user-select: auto !important; } /* Force enable interaction on blurred content */ div[data-v-0dc0d6d1][style*="pointer-events: none"] { pointer-events: auto !important; } /* Restore body scroll if locked */ body { overflow: auto !important; position: static !important; } `; // Inject CSS function injectCSS() { const style = document.createElement('style'); style.type = 'text/css'; style.textContent = hideVipGateCSS; (document.head || document.documentElement).appendChild(style); } // Remove VIP gate elements and blur effects function removeVipGate() { // Remove by class name const overlays = document.querySelectorAll('.vip-gate-overlay, [class*="vip-gate-overlay"]'); overlays.forEach(element => { element.remove(); }); // Remove by data attribute (Vue.js scoped styles) const vueOverlays = document.querySelectorAll('[data-v-0dc0d6d1].vip-gate-overlay'); vueOverlays.forEach(element => { element.remove(); }); // Remove blur effects from elements with inline styles const blurredElements = document.querySelectorAll('[style*="blur"]'); blurredElements.forEach(element => { element.style.filter = 'none'; element.style.webkitFilter = 'none'; element.style.pointerEvents = 'auto'; element.style.userSelect = 'auto'; }); // Also check for elements with pointer-events: none const blockedElements = document.querySelectorAll('[style*="pointer-events: none"]'); blockedElements.forEach(element => { // Only restore if it's likely a VIP restriction (has blur or user-select: none) const style = element.getAttribute('style') || ''; if (style.includes('blur') || style.includes('user-select: none')) { element.style.pointerEvents = 'auto'; element.style.userSelect = 'auto'; element.style.filter = 'none'; element.style.webkitFilter = 'none'; } }); // Restore body styles if (document.body) { document.body.style.overflow = 'auto'; document.body.style.position = 'static'; } } // Run immediately injectCSS(); // Run when DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', removeVipGate); } else { removeVipGate(); } // Use MutationObserver to handle dynamically added VIP gates and blur effects const observer = new MutationObserver((mutations) => { for (const mutation of mutations) { if (mutation.addedNodes.length) { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { // Element node // Check if the added node is a VIP gate if (node.classList && ( node.classList.contains('vip-gate-overlay') || node.className.includes('vip-gate-overlay') )) { node.remove(); } // Check child nodes for VIP gates const childOverlays = node.querySelectorAll && node.querySelectorAll('.vip-gate-overlay, [class*="vip-gate-overlay"]'); if (childOverlays && childOverlays.length > 0) { childOverlays.forEach(overlay => overlay.remove()); } // Remove blur from the node itself if (node.style && node.style.filter && node.style.filter.includes('blur')) { node.style.filter = 'none'; node.style.pointerEvents = 'auto'; node.style.userSelect = 'auto'; } // Check child nodes for blur effects const blurredChildren = node.querySelectorAll && node.querySelectorAll('[style*="blur"]'); if (blurredChildren && blurredChildren.length > 0) { blurredChildren.forEach(child => { child.style.filter = 'none'; child.style.webkitFilter = 'none'; child.style.pointerEvents = 'auto'; child.style.userSelect = 'auto'; }); } } }); } // Handle attribute changes (inline style modifications) if (mutation.type === 'attributes' && mutation.attributeName === 'style') { const element = mutation.target; if (element.style && element.style.filter && element.style.filter.includes('blur')) { element.style.filter = 'none'; element.style.webkitFilter = 'none'; element.style.pointerEvents = 'auto'; element.style.userSelect = 'auto'; } } } }); // Start observing observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['style'] }); // Additional cleanup every 500ms for the first 5 seconds let cleanupCount = 0; const cleanupInterval = setInterval(() => { removeVipGate(); cleanupCount++; if (cleanupCount >= 10) { clearInterval(cleanupInterval); } }, 500); console.log('[VIP Gate Remover] Script loaded and monitoring for VIP gates'); })();