bilinovel

去除bilinovel检测到屏蔽后隐藏内容

当前为 2025-04-23 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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);

})();