对于有强迫症的我,坚决抵制百度结果页面显示推广,刚开始安装了ADBLOCK PLUS屏蔽广告的插件,装上后效果的确不一样,页面变得更加清爽凉快,更容易找到自己想要的结果。前几天突然发现屏蔽不了结果页的推广,很纠结。于是乎开始寻找解救之法,截图如下:
可以做以下分析: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使用,它可以屏蔽多数广告,该插件只屏蔽结果页而已;
发表评论
沙发空缺中,还不快抢~