Greasy Fork is available in English.
去除bilinovel检测到屏蔽后隐藏内容
当前为
// ==UserScript==
// @name bilinovel
// @namespace http://tampermonkey.net/
// @version 1.4
// @description 去除bilinovel检测到屏蔽后隐藏内容
// @author karl
// @match https://www.bilinovel.com/*
// @grant none
// @run-at document-idle
// @icon https://www.google.com/s2/favicons?sz=64&domain=bilinovel.com
// @license GPLv3
// ==/UserScript==
(function() {
'use strict';
const AD_TIPS_SELECTOR = '.adblock-tips'; // 反广告拦截脚本添加的提示框的选择器
const CONTENT_ID = 'acontent'; // 被反广告拦截脚本隐藏的内容区域的 ID
const MAX_ATTEMPTS = 5; // 尝试清理的最大次数
const CHECK_INTERVAL = 1000; // 每次检查清理的时间间隔 (毫秒)
let attempts = 0;
let cleanupInterval = null;
function performCleanup() {
attempts++;
console.log(`[Anti-Anti-Adblock] 第 ${attempts} 次尝试清理...`);
let cleanedSomething = false;
// 1. 移除提示信息
const adBlockTips = document.querySelector(AD_TIPS_SELECTOR);
if (adBlockTips) {
console.log("[Anti-Anti-Adblock] 发现并移除广告拦截提示:", adBlockTips);
adBlockTips.remove();
cleanedSomething = true;
}
// 2. 恢复内容区域
const contentArea = document.getElementById(CONTENT_ID);
if (contentArea && contentArea.style.display === 'none') {
console.log("[Anti-Anti-Adblock] 发现被隐藏的内容区域,尝试恢复显示:", contentArea);
contentArea.style.display = ''; // 恢复默认显示状态 (通常是 'block' 或 '')
cleanedSomething = true;
// 2.1 尝试移除可能添加的 "诱饵" div (基于原脚本逻辑)
// 原脚本会在检测到拦截时,在 contentArea 内添加一个带随机类名的 div
// 这里我们尝试移除 contentArea 内最后一个看起来像诱饵的 div
// 注意:这比较脆弱,如果页面结构复杂,可能会误删
const potentialBait = contentArea.lastElementChild;
// 检查它是否是一个 div,并且有类名 (原脚本会添加随机类名)
if (potentialBait && potentialBait.tagName === 'DIV' && potentialBait.classList.length > 0) {
// 可以添加更严格的检查,比如检查 style 属性是否有 position: absolute 等
console.log("[Anti-Anti-Adblock] 尝试移除内容区域内最后一个可能是诱饵的 DIV:", potentialBait);
// potentialBait.remove(); // 如果确定要移除,取消此行注释。先观察效果。
}
}
// 3. 尝试清除计时器 (高风险,可能影响其他功能)
// 原脚本设置了两个 setInterval。我们无法直接获取它们的 ID,
// 只能尝试清除所有可能的 interval。这非常不推荐,除非绝对必要。
// 如果前面的步骤足够,通常不需要这一步。
/*
if (cleanedSomething) { // 只在确实执行了清理后才尝试清除计时器
console.warn("[Anti-Anti-Adblock] 尝试清除所有 Interval (高风险)...");
let highestIntervalId = window.setInterval(function(){}, Number.MAX_SAFE_INTEGER);
for (let i = 1; i < highestIntervalId; i++) {
window.clearInterval(i);
}
console.warn("[Anti-Anti-Adblock] Interval 清除尝试完成。");
// 清除后,也停止我们自己的检查计时器
if (cleanupInterval) clearInterval(cleanupInterval);
}
*/
// 如果达到最大尝试次数,或者连续几次未检测到需要清理的内容,则停止
if (attempts >= MAX_ATTEMPTS) {
console.log("[Anti-Anti-Adblock] 已达到最大尝试次数,停止检查。");
if (cleanupInterval) clearInterval(cleanupInterval);
}
}
// 使用 setInterval 定期检查,因为反广告脚本可能会延迟执行或重复执行
// run-at document-idle 保证页面基本加载完成,但脚本可能稍后执行
cleanupInterval = setInterval(performCleanup, CHECK_INTERVAL);
// 也可以在页面完全加载后执行一次
// window.addEventListener('load', performCleanup);
})();