半自动屏蔽网页内容,例如悬浮窗

根据F12查找到的element(div)的name或者id,对其进行自动屏蔽的通用脚本,***请注意第15~17行***,自行修改需要屏蔽的网站和内容(现在的blockeName和blockedPageUrls是用来屏蔽嘶哩嘶哩的悬浮窗广告的)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         半自动屏蔽网页内容,例如悬浮窗
// @namespace    http://tampermonkey.net/
// @version      1.26
// @description  根据F12查找到的element(div)的name或者id,对其进行自动屏蔽的通用脚本,***请注意第15~17行***,自行修改需要屏蔽的网站和内容(现在的blockeName和blockedPageUrls是用来屏蔽嘶哩嘶哩的悬浮窗广告的)
// @author       shepherdZheng
// @match        http://*/*
// @match        https://*/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    //在下面两行中输入需要屏蔽的name或者id,以及网页列表,数量/长度不限。
    var blockeName = ['coupletright','coupletleft','HMRichBox','HMrichA'];
    var blockedPageUrls = ['https://www.silisilifun.com/', 'https://www.silisili.tv'];

    //确认是否是需要河蟹的网页
    function isBlockedPageUrl() {
        for (var a = 0; a < blockedPageUrls.length; a++) {
            if (window.location.href.indexOf(blockedPageUrls[a]) !== -1) {
                return true;
            }
        }
        return false;
    }
    //查找网页内容,进行河蟹
    function getElementandRemove(i,blockeName) {
        if (i < 10) { //网速比较慢的情况下,请调高i<的值,例如,网页需要10秒加载完的话,这里应该大于10*2,大于20。
            setTimeout(function() {
                var delete_count=0;
                console.log(i); //调试用
                //console.log('AAAAAAAAAAAAAAAAAAAAAAAAAAA');//调试用,和k与j的输出相区分
                var elements = document.getElementsByTagName('*');
                //var divzElements = document.querySelectorAll('[style*="bottom:0px"][style*="right:0px"]');//这个方法对于一般的div是有效的,但没办法选中那个奇妙的divz。。。?采用下面那行的特征可以选中
                var divzElements = document.querySelectorAll('[style*="display: block;"]');//silisili改变了右下角悬浮窗的写法,现在它会随机生成自身的id,有趣有趣。
                for(var b=0; b<divzElements.length; b++) {
                    //console.log(divzElements[b]);//调试用
                    divzElements[b].style.display = 'none';
                }
                for (var j = 0; j < blockeName.length; j++) {//js的for循环是在循环完毕到下一轮判断开始之间进行计数的,所以循环体内j最大是 (blockName.length - 1)
                    //console.log(j); //调试用
                    //console.log('JJJJJJJJJ');//同上
                    var name = blockeName[j];
                    for(var k=0; k<elements.length; k++) {
                        //console.log(k); //调试用
                        if(elements[k].getAttribute('id') === name || elements[k].getAttribute('name') === name) {
                            elements[k].style.display = 'none';
                            //无法屏蔽掉网页内容时请依次取消下面三行的注释(手段逐渐过激,但其实大多数时候的问题是没能准确的捕获到element而不是杀不掉它)
                            //elements[k].style.display = "none !important";
                            //elements[k].style.visibility = "hidden !important";
                            //elements[k].parentNode.removeChild(element);
                            delete_count += 1;
                            if(delete_count > 0) {//第一次删除就算数,因为意味着网页加载好了,别的也会被删。。。?
                                i += 233;//在内层循环改外层循环的i值是有效的(真奇怪,为什么我会担心这个,真奇怪呢。。。屮)
                            }
                        }
                    }
                }
                getElementandRemove(i + 1,blockeName);//1.25又忘记补全输入参数了。。。淦。。。
            }, 500);//最不稳定的一种异步方式(递归),但相对而言。。。额。。爷乐意
        }
    }
    // 主函数,js要实现异步编程还挺麻烦的——只会python的初学者的感想。
    if (isBlockedPageUrl()) {
        getElementandRemove(0,blockeName);
    }
})();