简单几行代码 写一个百度广告屏蔽插件 爽到爆

2017-09-13 05:19:36javascript油猴

下载地址:https://github.com/jsoncode/baiduBlock
使用方法:

clipboard.png

将文件夹拖到这里面
clipboard.png

一个小问题:
我没有境外支付信用卡>无法向谷歌支付$5的费用>每次打开浏览器都会提示是否禁止>点取消就行了

也可以通过网上的方法,修改注册表关闭提示,这里就不再赘述
如果你有更新,需要打开第二张图的位置,重新载入才能生效


目录结构


-bd.png
-browser_action.js
-config.js
-manifest.json

##manifest.json

{
    "name": "屏蔽百度广告",
    "manifest_version": 2,
    "version": "1.0",
    "description": "百度插件",
    "browser_action": {
        "default_icon": "bd.png"
    },
    "icons": {
        "128":"bd.png"
    },
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["config.js","browser_action.js"]
    }]
}

browser_action.js

var lists = str.split('\n').filter(function(v) {
    if (v) return true
});

function clear(lists) {
    var local = location.href;
    for (var a = 0, list; list = lists[a++];) {
        var sub = list.split('$');
        if (new RegExp(sub[0]).test(local)) {
            var selector = sub[1];
            var obj = document.querySelectorAll(selector);
            for (var i = 0, item; item = obj[i++];) {
                item.parentNode.removeChild(item);
            }
        }
    }
}

clear(lists);
setInterval(function() {
    clear(lists);
}, 2000);
var input = document.querySelector("input[name=wd]");
input&&input.addEventListener('change', function() {
    clear(lists);
});


之所以用定时器一直调用,是因为有些网站会动态延迟的加载动态脚本类的广告,比如bd,恶心无比,自己使用的adBlock,adBlock plus都不理想。

config.js

var str = `
www.baidu.com$#content_left []
www.baidu.com$[tpl="right_toplist"]
www.baidu.com$[]
www.baidu.com$[data-click*="vLevel"]
`;

用法:每次只需要修改config.js中的规则就行
规则约定:需要屏蔽的网站地址$css3选择器,中间的$是分隔符,选择器选中的就是要被删除的广告

上面四个规则自己常用的,
第一个可以屏蔽大多数动态流氓广告,之所以用这么低级的方法(style=*)是因为这类广告伪装实在太逼真(和正常搜索结果没任何区别)
第二个屏蔽右侧不喜欢的推荐
第三行忘记了,
第四行是一些推广广告

从此,世界一片洁净,我不会成为第二个魏则西,在此分享给大家,


这里更新一下,每次打开浏览器,都会提示的问题。

我找到了一个管理浏览器插件代码片段的工具Tampermonkey,是一个浏览器插件。
然后就可以把我的百度插件代码添加到这个插件中使用,就不会每次都提示了。

使用方法:
1,新增脚本
image.png

2,粘贴代码
image.png

代码如下:

// ==UserScript==
// @name         ad-baidu
// @namespace    https://baidu.com/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.baidu.com/**
// @grant        none
// ==/UserScript==
var selectors = `
#content_left [style*="display:block !important;visibility:visible !important"]
[tpl="right_toplist"]
[]
[data-click*="vLevel"]
`;
selectors = selectors.trim().split('\n');
var count = 0;
function showCount(cn){
    if(cn>0){
        count+=cn;
        var content_right = document.querySelector('#content_right');
        if(content_right){
            content_right.style.position = 'relative';
            var style = `
line-height: 42px;
text-align: center;
background: #0c0;
color: #fff;
margin-bottom:30px;
`;
            var msgCount = document.querySelector('#msg-remove');
            if(!msgCount){
                content_right.insertAdjacentHTML('afterbegin','<div id="msg-remove"></div>');
                msgCount = document.querySelector('#msg-remove');
            }
            msgCount.innerHTML = '已过滤:'+count+'条垃圾广告,本次过滤:'+cn+'条';
        }
    }
}
function clear() {
    selectors.forEach(function(selector) {
        var doms = document.querySelectorAll(selector);
        if(doms.length){
            doms = Array.from(doms);
            showCount(doms.length);
            doms.forEach(function(dom) {
                dom.parentNode.removeChild(dom);
            });
        }
    });
}
setInterval(function () {
    clear();
},500);

然后每次打开浏览器百度搜索,就不会再有提示了;
效果:
image.png

热门评论:

  • Chloe Chloe 2017-9-13 4:57 回复:

    你好,特意注册账号来评论,非常感谢,原先一直用的stylish里面的baidu lite,但是一直都有搜索出来然后会显示一片空白error的状况,也想办法反应但是都没能登录到stylish联系到作者,无意中看到你得,试了下很有效,就是侧边广告会有一个反应时间,一般搜索出来之后差不多一秒然后闪现没有,目前还在学习HTML,所以对这个不是很懂,有什么办法可以去除那个反应时间么?
    再次,谢谢分享!

    • jsoncode jsoncode 2017-9-13 5:20 回复:Chloe
      你可以修改setInterval的值,我设置的是500ms轮询一次的,太频繁了不太好

    • Chloe Chloe 2017-9-14 12:39 回复:Chloe

      嗯,谢谢,找到你说的值了,我刚好有油猴扩展,然后尝试了自己添加脚本,一开始没显示,打开百度就显示了一个ad-baidu,试了下很好,500的值OK,我也会试着学习你的这个源码,谢谢!
      今天还学了个you-get的新技能,感觉世界好大,牛人好多啊哈哈!


  • jsoncode jsoncode 2017-9-13 5:13 回复:
    类似adplus无法去掉的百度广告,正是百度用了动态广告的模式,延迟加载的,所以,我是定时轮询判断页面是否有广告的。源码很简单,没有几行代码,你可以研读自己改版的。如果哪里不懂可以继续问我。

  • 笑笑过日子 笑笑过日子 2017-12-21 6:55 回复:

    有没有屏蔽搜狗的?

    • jsoncode jsoncode 2017-12-22 5:06 回复:笑笑过日子
      你会写js吗?思路很简单,可以自己diy哦。如果不会再来评论,我帮你写

  • 小小锅 小小锅 2018-7-11 6:28 回复:

    我不明白是油猴本身机制问题还是设置问题,翻页的时候,(搜索,贴吧等)页面明明是刷新的,为什么domready,onload都不执行呢?求指教谢谢。

    • jsoncode jsoncode 2018-7-14 11:02 回复:小小锅
      你不用使用ready,因为浏览器插件是在页面加载完成后才执行的。

    • 小小锅 小小锅 2018-7-25 6:32 回复:小小锅

      @jsoncode 我做了测试

(function() {

'use strict';
 console.log(new Date());

})

翻页不会执行,求教。我现在只能用setInterval才能执行

  • jsoncode jsoncode 2018-7-26 7:18 回复:小小锅
    油猴里面脚本只执行一次啊,当然要用定时器