如何使用Tampermonkey屏蔽知乎/百度广告?

7/2/2021 Chrome PluginTampermonkey油猴

Tampermonkey(油猴) 是Chrome浏览器插件,使用它可以用来屏蔽知乎的广告,Tampermonkey 怎么实现的呢? 很简单!当我们在刷知乎或者微博的信息流 的时候,浏览器会把这些页面呈现给我们,这些页面也是由类似积木拼接起来的,只不过用户看不到浏览器在下面做的工作。下面以访问知乎为例

layout

我们可以很容易的看到,广告元素和正常元素还是不一样的,广告元素的class多了一个 TopstoryItem--advertCard,我们把这个不一样 的广告元素剔除就可以了,我们打开浏览器的的开发者模式(Mac键盘同时按下 comand + option + i, windows 按 F12),进入console输入下面的代码试一下, 就可以神奇的发现广告元素不见了。

console

let list = document.getElementsByClassName('TopstoryItem--advertCard')
Array.prototype.forEach.call(list, (item) => {
    item.style.display = 'none'
})
1
2
3
4

tampermonkey 就是帮我们做了这些事情,下面是tampermonkey的安装步骤。

# 1. 在Chrome的应用市场安装tampermonkey

应用市场 (opens new window) 大陆用户可能需要科学上网,

tampermonkey

# 2. 在Chrome扩展程序里面打开tampermonkey

Chrome扩展程序

# 3. 在tampermonkey添加脚本

plugins

# 4. 编写脚本

屏蔽知乎广告:把下面这些代码复制进去,然后保存,你还可以把不想看的关键字加进去,比如你不想看关于 吴亦凡 推荐

// ==UserScript==
// @name         clean zhihu ad
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!!
// @author       You
// @match        https://www.zhihu.com
// @grant        none
// ==/UserScript==

var sameNames = [];

// 这里是屏蔽列表, 不想看的关键字写在这里就行了.
var gotohell = ["广告", "吴亦凡"];

window.onload=function()
{
    var main = document.getElementsByClassName("Topstory-recommend")[0];
    main.addEventListener("DOMNodeInserted", function() {
        hideItems();
    });
    function hideItems() {
        var items = document.getElementsByClassName("TopstoryItem");
        for (var i = 0; i < items.length; ++i)
        {
            if (items[i].classList.contains("TopstoryItem--advertCard")) {
                items[i].style.display = "none";
                console.log('wv');
            };

            if (items[i].classList.contains("alreadyfucked")) continue;
            //console.log("doing" + i);
            var title = items[i].getElementsByClassName("ContentItem-title");
            var a;
            if (title.length) a = title[0].getElementsByTagName("a");
            else continue;
            var text = a[0].innerHTML;
            for (var j = 0; j < gotohell.length; ++j) {
                if (text.match(gotohell[j])) {
                    console.log(gotohell[j]);
                    items[i].style.display = "none";
                }
            }


            //for (var jj = 0; jj < sameNames.length; ++jj) {
            //    if (text==sameNames[jj]) {
            //        console.log(sameNames[jj]);
            //        items[i].style.display = "none";
            //    }
            //}
            //sameNames.push(text);
            items[i].classList.add("alreadyfucked");
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

屏蔽百度广告:把下面这些代码复制进去,屏蔽广告

// ==UserScript==
// @name               百度广告(首尾推广及右侧广告)清理
// @name:en            Kill Baidu AD
// @name:zh-TW         百度廣告(首尾推廣及右側廣告)清理
// @namespace          hoothin
// @version            1.22
// @description        彻底清理百度搜索(www.baidu.com)结果首尾的推广广告、二次顽固广告、右侧广告,并防止反复
// @description:en     Just Kill Baidu AD
// @description:zh-TW  徹底清理百度搜索(www.baidu.com)結果首尾的推廣廣告、二次頑固廣告、右側廣告,並防止反復
// @author             hoothin
// @include            http*://www.baidu.com/*
// @include            http*://m.baidu.com/*
// @grant              GM_xmlhttpRequest
// @run-at             document-start
// @license            MIT License
// @compatible         chrome 测试通过
// @compatible         firefox 测试通过
// @compatible         opera 未测试
// @compatible         safari 未测试
// @contributionURL    https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation
// @contributionAmount 1
// ==/UserScript==

(function() {
    'use strict';
    var killBaijiaType=2;
    var MO = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
    if(MO){
        var observer = new MO(function(records){
            records.map(function(record) {
                if(record.addedNodes.length){
                    [].forEach.call(record.addedNodes,function(addedNode) {
                        clearOneAD(addedNode);
                    });
                }
            });
        });
        var option = {
            'childList': true,
            'subtree': true
        };
        observer.observe(document, option);
    }

    function checkBaijia(item){
        var itemHref=item.querySelector("a").href;
        item.style.display="none";
        if(itemHref.indexOf("baidu.com")==-1)return;
        var gmxhr=GM_xmlhttpRequest({
            url: itemHref,
            headers: {
                "Accept": "text/html"
            },
            method: "head",
            onreadystatechange:function(response) {
                if(response.readyState==4){
                    if(response.finalUrl.indexOf("baijiahao.baidu.com")!=-1){
                        item.remove();
                    }else{
                        item.style.display="";
                    }
                    gmxhr.abort();
                }
            }
        });
    }

    function clearAD(){
        if(!document.querySelectorAll)return;
        var mAds=document.querySelectorAll(".ec_wise_ad,.ec_youxuan_card,.page-banner"),i;
        for(i=0;i<mAds.length;i++){
            var mAd=mAds[i];
            mAd.remove();
        }
        var list=document.querySelectorAll("#content_left>div,#content_left>table");
        for(i=0;i<list.length;i++){
            let item = list[i];
            let s = item.getAttribute("style");
            if (s && /display:(table|block)\s!important/.test(s)) {
                item.remove();
            }else{
                var span=item.querySelector("div>span");
                if(span && span.innerHTML=="广告"){
                    item.remove();
                }
                [].forEach.call(item.querySelectorAll("span,a"),function(span){
                    if(span && (span.innerHTML=="广告" || span.getAttribute("data-tuiguang"))){
                        item.remove();
                    }
                });
                if(killBaijiaType==2){
                    [].forEach.call(item.querySelectorAll("a>div>span+img"),function(img){
                        if(img && /^https?:\/\/pic\.rmb\.bdstatic\.com/.test(img.src)){
                            //checkBaijia(item);
                            item.remove();
                        }
                    });
                }
            }
        }

        var eb = document.querySelectorAll("#content_right>table>tbody>tr>td>div");
        for(i=0;i<eb.length;i++){
            let d = eb[i];
            if (d.id!="con-ar") {
                d.remove();
            }
        }

        var nr = document.querySelector("#content_right>div>div>div");
        if(nr){
            var nra=nr.querySelectorAll("a");
            for(i=0;i<nra.length;i++){
                let d = nra[i];
                if (d.innerHTML=="广告") {
                    nr.remove();
                    break;
                }
            }
        }
    }

    function clearOneAD(ele){
        if(ele.nodeType!=1)return;
        if(ele.classList.contains("ec-tuiguang") || ele.classList.contains("ec_wise_ad") || ele.classList.contains("ec_youxuan_card") || ele.classList.contains("page-banner")){
            ele.remove();
            return;
        }
        if(ele.parentNode && ele.parentNode.id=="content_left" && (ele.nodeName=="DIV" || ele.nodeName=="TABLE")){
            let s = ele.getAttribute("style");
            if (s && /display:(table|block)\s!important/.test(s)) {
                ele.remove();
            }else{
                var span=ele.querySelector("div>span");
                if(span && span.innerHTML=="广告"){
                    ele.remove();
                }
                [].forEach.call(ele.querySelectorAll("span,a"),function(span){
                    if(span && (span.innerHTML=="广告" || span.getAttribute("data-tuiguang"))){
                        ele.remove();
                    }
                });
                if(killBaijiaType==2){
                    [].forEach.call(ele.querySelectorAll("a>div>span+img"),function(img){
                        if(img && /^https?:\/\/pic\.rmb\.bdstatic\.com/.test(img.src)){
                            //checkBaijia(ele);
                            ele.remove();
                        }
                    });
                }
            }
        }else if(ele.parentNode && ele.parentNode.id=="content_right"){
            if(ele.nodeName=="TABLE"){
                var eb = ele.querySelectorAll("tbody>tr>td>div");
                for(var i=0;i<eb.length;i++){
                    let d = eb[i];
                    if (d.id!="con-ar") {
                        d.remove();
                    }
                }
            }
            if(ele.nodeName=="DIV"){
                var nr = ele.querySelector("div>div");
                if(nr){
                    var nra=nr.querySelectorAll("a");
                    for(i=0;i<nra.length;i++){
                        let d = nra[i];
                        if (d.innerHTML=="广告") {
                            nr.remove();
                            break;
                        }
                    }
                }
            }
        }else{
            let eles=ele.querySelectorAll("#content_left>div,#content_left>table");
            [].forEach.call(eles, e=>{clearOneAD(e)});
        }
    }
    setTimeout(()=>{clearAD();},2000);
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181

# 5.测试是否生效

# 6. 总结

Tampermonkey可以说是学习Web必备的工具,只要你用过一次,就会爱上它。我也是一次偶然的机会才了解到它,有个医生同学找我帮忙,工作 需要查找 Sci-Hub 网站上面的文献,论文下载的时候需要用到这个神奇的工具。tampermonkey的功能还有很多,上面只是知乎和百度的屏蔽广告的例子, 还有微博的屏蔽广告的code我没有贴出来,你如果想要可以私信我,你也可以去tampermokey脚本市场下载,文章多有不足之处,欢迎指正和留言。

Last Updated: 2/1/2023, 10:34:15 AM