谷歌浏览器屏蔽百度结果页推广源码

对于有强迫症的我,坚决抵制百度结果页面显示推广,刚开始安装了ADBLOCK PLUS屏蔽广告的插件,装上后效果的确不一样,页面变得更加清爽凉快,更容易找到自己想要的结果。前几天突然发现屏蔽不了结果页的推广,很纠结。于是乎开始寻找解救之法,截图如下:
QQ图片20160517165325
可以做以下分析:content_left这个ID是搜索结果容器, 这下面的DIV则是列表容器,很简单的能发现一个规律如果结果是自然排名那它的class必然带了c-container,其余的推广结果class则是随机生成,除非哪天百度改变这一class。难怪广告插件无法屏蔽,原来百度更改了这机制。其实远远不止,我们可以看到,在结果列表后面还有个style属性,这是强制显示结果集;而我们的广告插件是依赖于样式表,对其进行隐藏,会CSS的基本都知道样式表等级制度;
ps:不再一一列举,一天一夜也写不完。

display:block !important;visibility:visible !important

既然样式对他无效,我们就可以从JS方面入手了,将搜索列表不要内容给remove掉就可以了。到了这儿就需要谷歌插件帮忙了,了解一点点插件开发基本知识就行。

manifest.json

{
	"manifest_version": 2,
	"name": "ADPLUS ",
	"description": "屏蔽百度搜索页推广结果",
	"version": "1.1",

	"permissions": ["<all_urls>"] ,
	"browser_action": {
		"default_icon": "icon.png"//显示在浏览器右上侧的图标
	},
	"content_scripts": [ 
		{ 
			"matches": ["http://www.baidu.com/*","https://www.baidu.com/*"],//在哪个页面执行脚本文件
			"js": ["background.js"]//这就是JS主文件
		} 
	]
}

background.js

(function(){
	var st = setInterval(clearDom, 100);
	document.getElementById("kw").onkeyup =function(e){
		if (e){
			e.stopPropagation(); 
		}else{
		 window.event.cancelBubble = true;
		}
		st = setInterval(clearDom, 100);//如果是在搜索结果页输入另外的关键词,那么下面的clearInterval将无法正常清除时间队列,望高手赐教。
	}
	function clearDom(){
		var ch = document.getElementById('content_left').childNodes;
		var ch_1=Array();
		for(var i = 0; i < ch.length; i++){
			var te = ch[i];
			if(te.nodeType == 1 && te.nodeName == 'DIV'){
				ch_1.push(te);
				if(te.className.indexOf("c-container") === -1){
					te.remove();
				}
			}
		}
		if(ch_1.length == 10){
			clearInterval(st);
		}
	}
})()

使用方法:将这两份文件拷贝到文件夹,然后添加一张PNG图标文件即可。在拓展应用里面点击开发者模式-》加载已解压的扩展程序-》选择文件夹导入就行了。浏览器版本50.0.2661.102亲测可用。

这个插件最好配合ADBLOCK PLUS使用,它可以屏蔽多数广告,该插件只屏蔽结果页而已;

发表评论


昵称

沙发空缺中,还不快抢~