教你编写百度搜索广告过滤的chrome插件
1 前言
目前百度搜索列表首页里,广告5条正常内容是10条,而且广告都是前1到5条的位置,与正常内容的显示样式无异。对于我们这样有能力的开发者,其实可以简单的实现一个chrome插件,在百度搜索页面里执行一些我们自己的javascript,删除掉这些广告条目。
2 插件简介
Chrome插件逻辑主体为两部分组成,一是在目标文档(比如www.baidu.com页面)运行的js和css,叫content_scripts;一部分是在chrome外壳上加载与显示的内容(比如图标和设置界面)叫browser_action,这些都需要在一个manifest.json的文件里描述。
2.1 插件结构
manifest.json
scripts
--jquery-1.7.1.min.js
--include.js
images
--icon16.png
--icon32.png
其中,scripts下的js是content_scripts需要的,images下的图片是叫browser_action需要的。
3 百度搜索的广告特征
3.1 文档结构特征
<div id="content_left">
<div>
<div>广告1</div>
<div>广告2</div>
<div>广告3</div>
<div>广告4</div>
</div>
<div>搜索记录1</div>
<div>搜索记录2</div>
<div>
<div>广告5</div>
</div>
</div>
- 广告可以分首尾两个地方显示,也可能只有在首部显示
- 多个广告可能被一个div包住,此div与搜索记录平行,但有时候广告与搜索记录直接平行
3.2 样式特征
- 广告条目的class名称是动态的,每次刷新都得到不一样的class名
- 广告条目使用了内联样式,用于保证广告的显示属性不受样式表的影响
3.3 自保护特征
在文档加载完成的两秒之内,广告条目的dom受到保护,试图修改广告的内联样式或直接删除广告的dom,都会触发生成新的不一样广告,插入搜索记录前面。
4 广告过滤思路
由于百度搜索在反反广告上做了很多措施,基于css级别的隐藏广告思路是不太可行了,我们可以基于jQuery,监测document的元素插入事件,在里面搜索广告条件,进而删除。虽然百度有自保护特征,但终究插入新广告也是触发到测document的元素插入事件。
4.1 include.js代码
; (function () {
$(document).bind("DOMNodeInserted", function (e) {
$("#content_left div[data-click] span:contains('广告')")
.parents("#content_left div[data-click]")
.remove();
});
})();
$("#content_left div[data-click] span:contains('广告')")可以将广告标识选择出来,向上选择到#content_left div[data-click],就是广告条目,然后把它删除。删除之后,百度会自动插入新的广告,新广告也符合这个选择器,所以会二次运行我们的去广告代码逻辑。
4.2 插件和源代码
源代码已经放到github上,把里面有一个已打包好的BaiduAdBlock.crx,将其拖曳到chrome内核的浏览器上,勾选“允许访问敏感页面”就完成安装。
github链接
https://github.com/xljiulang/BaiduAdBlock
教你编写百度搜索广告过滤的chrome插件的更多相关文章
- Chrome 百度搜索热点过滤插件 - 开源软件
学习时,为了搜集最全的中文资料,有时候不得不使用Baidu搜索引擎.在你还是个小菜鸡的时候你可能会花费大量时间在百度上! 但是,时间久了你会发现,你总会被网络上一些奇奇怪怪或者有趣的事情吸引过去而逐渐 ...
- 使用Tampermonkey(油猴) 插件,重新实现了,百度搜索热点过滤功能
昨天晚上,花了点时间学习了Chrome插件的制作方法,并书写了<Chrome 百度搜索热点过滤插件 - 开源软件>这一文章,简单地介绍自己实现的百度搜索热点过滤神器的原理和使用方式,并进行 ...
- 写个屏蔽百度搜索广告的Chrome插件
工作生活都用百度比较多,毕竟它是目前为止感觉最好的国内PC搜索引擎.我纵使已经差不多炼成了一眼过滤广告的眼力,但始终觉得碍眼,感觉还是写个插件把它屏蔽了吧.这个插件开发的门槛其实非常低,只是一开始做不 ...
- 【项目】百度搜索广告CTR预估
-------倒叙查看本文. 6,用auc对测试的结果进行评估: auc代码如下: #!/usr/bin/env python import sys def auc(labels,predicted_ ...
- 用less编写百度搜索静态效果
效果图 html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- jquery 仿百度搜索下拉框的插件
转载地址:http://www.open-open.com/lib/view/open1420624048437.html 今天写了个下拉插件分享出来 效果: , 可以搜素,也可以使用上下键选择匹配出 ...
- Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法
先上图百度广告,其实屏蔽广告很简单 主要分成以下三步: 下载Adblock Plus插件 安装Adblock Plus插件 开启屏蔽 一.下载Adblock Plus插件(官网离线版) 二.安装Adb ...
- 搜索引擎广告过滤Chrome插件
搜索广告屏蔽Chrome插件:自动过滤:百度,360,搜狗,google,bing的搜索广告,让魏则西的悲剧不再重演.珍爱生命,远离搜索广告! 下载:FuckAd.zip 安装:方法自行百度. 关闭百 ...
- 百度搜索 “Java面试题” 前200页(面试必看)
前言 本文中的题目来源于网上的一篇文章<百度搜索 "Java面试题" 前200页>,但该文章里面只有题目,没有答案.因此,我整理了一些答案发布于本文.本文整理答案的原则 ...
随机推荐
- bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)
题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...
- jdk源码剖析四:JDK1.7升级1.8 HashMap原理的变化
一.hashMap数据结构 如上图所示,JDK7之前hashmap又叫散列链表:基于一个数组以及多个链表的实现,hash值冲突的时候,就将对应节点以链表的形式存储. JDK8中,当同一个hash值(T ...
- 在CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- Android--APP性能测试工具GT的使用总结
GT(随身调)是APP的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, Integrated Debug Environment).利用GT,仅凭一部手机,无需连 ...
- Spring Boot + Vue 前后端分离,两种文件上传方式总结
在Vue.js 中,如果网络请求使用 axios ,并且使用了 ElementUI 库,那么一般来说,文件上传有两种不同的实现方案: 通过 Ajax 实现文件上传 通过 ElementUI 里边的 U ...
- 【HADOOP】| 环境搭建:从零开始搭建hadoop大数据平台(单机/伪分布式)-下
因篇幅过长,故分为两节,上节主要说明hadoop运行环境和必须的基础软件,包括VMware虚拟机软件的说明安装.Xmanager5管理软件以及CentOS操作系统的安装和基本网络配置.具体请参看: [ ...
- 深入理解es6-Promise对象
前言 在之前翻博客时,看到promise,又重读了一边,突然发现理解很浅,记的笔记也不是很好理解,又重新学习promise,加深理解,学以致用 在promise出来之前,js常用解决异 ...
- 第5章 令牌自省端点(Token Introspection Endpoint) - IdentityModel 中文文档(v1.0.0)
OAuth 2.0令牌自省的客户端库是作为HttpClient扩展方法提供的. 以下代码将引用令牌发送到内省端点: var client = new HttpClient(); var respons ...
- ACM入门之OJ~
所谓OJ,顾名思义Online Judge,一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等.用户程序执行的结果将被Online ...
- DRUID连接池配置详情
DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...