Ad Muncher简称“adm、奶牛”,其广告过滤功能几乎支持所有浏览器和联网软件,但需要结合完善的规则。所以为方便你我他,本人义务制作与维护CJX规则http://bbs.kafan.cn/thread-1133619-1-1.html在此过程中积累了一些经验,梳理一下与大家分享。
一、准备
IE8以上
Ad Muncher CJX绿色版 http://cjx82630.ys168.com/
打开选项Options > 过滤对象Filter Targets > 我的过滤对象My filter targets添加: -firefox:*
下载安装火狐作为辅助 http://www.mozilla.org/en-US/firefox/all.html
添加Firebug https://addons.mozilla.org/zh-CN/firefox/addon/firebug/
添加adblock plus并订阅规则 https://addons.mozilla.org/zh-CN/firefox/addon/adblock-plus/
添加Element Hiding Helper http://adblockplus.org/zh_CN/elemhidehelper
ctrl+shift+F快捷键打开adblock plus首选项,逐条添加自定规则,并取消默认启用的勾选:
$script
$subdocument
参考资料:自行搜索下载HTML、CSS、javascript教程:w3school(3.0).chm
二、过滤浏览器广告
简述:以火狐、adm的logs为辅助手段,先屏蔽脚本,再移除图片、帧、链接等,然后CSS规则,移除div等的次序制作规则,尽量在所有浏览器过滤广告,其中IE不支持高级CSS选择器需要变通。
1、不进行过滤的链接(No filtering on URL)
如误拦可以添加白名单,优先于过滤的规则。查看记录logs误拦了什么就添加什么链接,或某网页不想过滤,添加地址栏网址;无效则选不过滤匹配的关键词Don't match against keywor。
添加规则的方法:事先复制网址或关键字,点击自定义规则My Filters>新建New>粘贴网址或关键字到左边空白框>点击右侧空白框选择过滤类型
2、不过滤匹配的关键词(Don't match against keyword)
如过滤链接、移除脚本、移除div/spn、table、form存在误拦的话,可以添加此规则。
3、只进行最小过滤的链接(Minimal filtering on URL)
适用于adm不兼容的网页,或CSS规则误拦,如Minimal filtering on URL: /qzone/client/photo/*.htm
4、允许弹出带链接的窗口(Allow popups with URL)
adm自带防弹窗功能,但有时会误拦弹窗,如点击链接没反应。查看记录logs > Blocked popup URLs有记录,双击添加规则,例如Allow popups with URL: /ju.taobao.com
5、阻止访问的链接(Block retrieval of URL)
建议优先过滤js、php等脚本文件,因为很多时候,框架、图片等是由脚本召唤控制的。在火狐打开 http://www.ct10000.com/ 用ctrl+shift+V快捷键呼出“可过滤项目”,如图点击,过滤所有脚本。
F5刷新,查看哪些部分被过滤。左下角视频窗口不见了,如刚好想屏蔽它,那么就找出属于哪个脚本。再次点击取消过滤脚本并刷新。
方法1:全选脚本(按住ctl添加或shift选范围),右键点击选择“在新标签页打开”,逐个查看。脚本太多则看方法2;
方法2:按F12呼出Firebug,用左边的点选工具点广告(图示看第2点之2),复制某个广告图片的地址或所在id、class的名称,然后点击“脚本”标签(可能要重新载入),进行搜索。如果在某个脚本文件里,查看内容以免误拦,然后加规则;以 http://bf2.7m.cn/ 为例截图说明
方法3:不懂则用土办法:双击某个脚本网址,选择上面完整网址的选项添加规则并刷新。先尝试过滤大的域名,后尝试具体网址直至成功,记得最后把无关规则禁用。
把abp规则转换为adm规则,右键点击||ct10000.com/images/2008/swfobject.js选择“复制过滤规则”,点击adm的我的规则My Filters,点击新建New,粘帖,删除开头双管线,选择阻止访问的链接Block retrieval of URL,点击Apply。
转换abp的$script规则到adm:多数可用 *.js 代替,例||pfp.sina.com.cn^$script 转换为阻止访问的链接Block retrieval of URL: pfp.sina.com.cn*.js ;少数用*.php等
阻止访问的链接Block retrieval of URL的特点,只要http“链接”(adm到5.X才支持https)匹配规则的关键词、链接、文本都会被屏蔽。比如阻止访问的链接Block retrieval of URL: www 屏蔽所有含“www”的链接。默认在规则前后含通配符*,只是没显示出来的,有时为了区分,在开头会有“.”或“/”,例阻止访问的链接Block retrieval of URL: /s.360.cn;在规则内可使用通配符*,不支持正则,忽略大小写。
6、移除含文本的脚本(Remove scripts with text)
(1)去除下拉窗口
打开电信网站时,顶部自动下拉一张图片,推测在HTML内嵌了JavaScript脚本,单纯过滤图片也会下拉一个白板,可采用添加CSS规则Add CSS to all pages: #ads {display:none;}(即俗说的“元素隐藏”,但ad muncher不是隐藏是删除),但建议优先删除内嵌脚本:
在火狐刷新网页,在下拉窗口上点右键,选择用Firebug查看(窗口下可能只出现一横条,把它拉高),通常内嵌脚本就在附近,此例在上面那个<script type="text/javascript">,点击+号查看具体内容。不懂不要紧,重点查看图片网址或所属id、class名称(本例图片在div id=“ads”)的有关文本,在中间看到几行document.getElementById("ads").style. 复制所列文本,通常要求含括号“(”,在adm选择Remove scripts with text。
这会移除所在的<script type="text/javascript">所含内嵌文本,如果误杀其它元素就放弃使用。在IE刷新查看,没有下拉了(每次点击“应用Apply”都会清除IE缓存所以即时生效,火狐、chrome等需要ctrl+shift+del快捷键删除缓存)。
(2)去除“我的e家”动画
在火狐移动鼠标到flash上,浮现“屏蔽”,点击弹出窗口,在自定义栏复制地址ct10000.com/images/2008/index/index3.swf(前面的http等不需要),在adm添加移除链接的图片Remove images/etc with URL。此方式在其它例子可能无效,则改为阻止访问的链接Block retrieval of URL,但会留下白板,更好的方式是采取CSS选择器object[src*="链接"] {display:none;} 或移除div/spn方式。
出于谨慎也可查看相关代码,在动画上不能右键,使用Firebug点选定位,有时会自动刷新没了,则点路径embed<object<...上翻下翻,又看到了内嵌脚本。优先去除脚本,复制 document.write('<embed src="/images/2008/index/index3.swf ;在adm添加Remove scripts with text,可使用通配符* 即document.write(*/images/2008/index/index3.swf
移除含文本的脚本Remove scripts with text官方规则很多是:document.getElementById、document.write 、push等命令,再加小括号“(”,最后加元素名称、网址等作为区分的关键字。有兴趣了解javascript,参看http://www.w3school.com.cn/js/index.asp
7.移除带链接的图片等(Remove images/etc with URL)
此方式操作简单,例:左边中国地图下图片。可以在IE,右键点击查看属性,复制地址ct10000.com/images/2008/zzfw_title_new.jpg。在adm添加移除带链接的图片等Remove images/etc with URL,能去除占位符;假如用阻止访问的链接Block retrieval of URL是不能的,会留下白板。
移除带链接的图片等Remove images/etc with URL的特点:有效过滤图片jpg、gif、png、bmp、帧htm、html、shtml,部分swf等,而且去占位符,但不能像阻止访问的链接Block retrieval of URL一样彻底屏蔽链接,制作规则的要求类似Block retrieval of URL。
关于“帧htm、html、shtml”,点击火狐“可过滤项目”$subdocument,可自动定位查看是否属于广告,根据火狐给出的地址添加规则移除带链接的图片等Remove images/etc with URL: ct10000.com/images/search.html ;也可采取CSS方式,但必须Firebug定位代码,在iframe查看地址。如果地址含域名、区分度好,则采取添加CSS规则Add CSS to all pages: iframe[src="url"] {display:none;} ;否则采取javascript方式,本例就需要这样:Add javascript to all pages: if(__amscript_cd(".ct10000.com")){__amscript_wc('iframe[src="/images/search.html"] {display:none;}');};
8、移除链接地址(Remove links to URL)
在火狐,鼠标悬停到“自助服务”,下面有几个文字选项,去除“手机号码归属地查询”。用Firebug点选,定位代码,有时自动刷新没了,则点路径,高亮<a href="/main/services/04/">手机号码归属地查询</a>,双击/main/services/04/,然后复制,在adm添加移除链接地址Remove links to URL,注意这是网站本地的路径所以省略了ct10000.com,应该在添加规则时补充:移除链接地址Remove links to URL: ct10000.com/main/services/04/
本人很少用,也只用于<a href="超链接">文本或图片</a>,平时上网点击文本或图片等跳转到的地址,就是所说的“超链接”。使用此过滤方式时,“超链接”应属于广告联盟的、罕见的、精确不容易误杀的。能移除含超链接的所有文本和图片等,以及占位符,强悍但易误杀,可以自行添加查看移除链接地址Remove links to URL: ct10000.com/main/services/
9、添加CSS到所有页面(Add CSS to all pages)
制作过滤规则要懂CSS选择器,但无需达到制作网页的水平,参看http://bbs.maxthon.cn/forum.php?mod=viewthread&tid=369613 弄懂后,再次开始实战。可以借助Element Hiding Helper http://adblockplus.org/zh_CN/elemhidehelper
(1)不显示元素:CSS选择器 {display:none;}
在火狐叫“元素隐藏”,隐藏且下载;在adm,是直接改写代码不会下载,能提高网页载入速度。占所有CSS规则的99%左右。
去除“我的e家”下面最右边的“天翼”方框,用Firebug点选,定位代码,复制“ty”,在adm添加Add CSS to all pages: .ty {display:none;} 在IE刷新看看;
也可以把3个小框都去掉,选取.ty上一层.brand_area,即 Add CSS to all pages: .brand_area {display:none;} 注意:此例可以成功跨层过滤。代码里有许多的层,好比地下室有3层,但有时候过滤最上面的负一层,不能过滤最底下的负3层。如无效就多尝试;
去掉上面的菜单栏:: Add CSS to all pages: .menu_area {display:none;} 注意:第5点添加的不进行过滤的文字都抹杀了;
去除“我的e家”空白框:td[width="556"][height="168"] {display:none;} ;注意:成功去掉后附近元素会填补,中国地图从左边挪到中间。这条规则在chrome等新版浏览器、IE9非兼容模式有效,但IE9兼容模式(IE7核心)无效——中国地图还在左边。IE9完整支持CSS2选择器并支持绝大部分CSS3选择器,但低版本IE不支持CSS3高级选择器,例如: .space_wz > div:nth-child(3) ;.t5[style^="margin-top:8px;"] 替代的做法是使用Remove divs/spans with text等方式删除代码,以后说。
上面的3条规则可以整合为1条,为了方便区分和简洁,每条用英文半角逗号隔开,{display:none;}前留一个空格:Add CSS to all pages: td[width="556"][height="168"],.brand_area,.menu_area {display:none;}其它的例子还有:Add CSS to all pages: iframe[src*="/configs/article/"] {display:none;};Add CSS to all pages: .ch[onclick="ga(this,event)"] {display:none;} 等等。
通常{display:none;}即可,但少数情况下会无效,要添加强调{display: none !important;}
(2)去除背景图片:CSS选择器 {background-image:none !important;}
用Firebug点选背景,定位到“body”,切换至“CSS”,搜索并悬停background-image: url...确认目标。在adm添加Add CSS to all pages: body {background-image:none !important;}
(3)指定字体:CSS选择器 {font-family: "字体" !important;}
adm不但能过滤广告,还有其它功能,试把网页换个字体。通过用Firebug点选,发现代码由"<a "开头,在adm添加Add CSS to all pages: a {font-family: "字体" !important;} ;打开控制面板>字体>右键点击某字体查看名称,比如华文琥珀是“STHUPO.TTF”,复制替换“字体”为“STHUPO”;如无效则换为字体属性>详细信息>标题,比如“楷体”。另外一例:全局字体是楷体,字体大小为16px:Add CSS to all pages: * {font-family: "楷体"; font-size: 16px !important;}
(4)指定高度:CSS选择器 {height:*px !important;}
指定像素,或去除里面元素后用{height:auto;}例如youku首页空白.row_index.row_index_1 {height:auto;}
注意,class存在空格的写法应是把空格替换为点“.”;另外,同时有id和class,取其一而无效则取全部,例如#wp.wp.cl 对应<div class="wp cl" id="wp">要实现更多CSS的效果,查看教程http://www.w3school.com.cn/css/
(5)避免使用[id^="ad_"]:not(#ad_square)这种含“:not”的选择器,已知无效
10、添加javascript到所有页面(Add javascript to all pages)
(1)指定CSS规则作用于某个域名
CSS规则需要结合Add javascript to all pages才能把作用范围限定在指定域名。注意:除非同时开启官方规则,javascript规则必须放在CJX规则的一条以 /*3a*/function __amscript_try... 为开头的规则下面,否则出错。
以上面电信网站为例添加规则:关闭adm,打开安装目录,以记事本打开CustomStrings.dat,往下拖到前述规则,在其下空一行,复制空行下面的一行规则替换空行,更改域名(不要填入详细地址,如.ct10000.com/images/)、更改CSS规则,最后保存,重新打开adm。添加如下:Add javascript to all pages: if(__amscript_cd(".ct10000.com")){__amscript_wc('td[width="556"][height="168"],.brand_area,.menu_area {display:none;}');};
格式:Add javascript to all pages: if(__amscript_cd("域名")){__amscript_wc('任何CSS规则');};
注意:过滤限定域名的动画、图片、帧示例如下Add javascript to all pages: if(__amscript_cd("域名")){__amscript_wc('object[src*="动画地址"],img[src*="图片地址"],iframe[src*="帧地址"] {display:none;}');};
(2)指定CSS规则作用于两个域名以上
两个域名的例子: if(__amscript_cd(".soku.com")||__amscript_cd(".youku.com")){__amscript_wc('[id^="ab_"] {display:none;}');}; 多加了 ||__amscript_cd(".youku.com")
四个域名的例子:if(__amscript_cd("iknow.baidu.com")||__amscript_cd("z.baidu.com")||__amscript_cd("zidao.baidu.com")||__amscript_cd("zhidao.baidu.com")){__amscript_wc('CSS');};
(3)指定两种以上CSS规则作用于域名
电信网站Add javascript to all pages: if(__amscript_cd(".ct10000.com")){__amscript_wc('td[width="556"][height="168"],.brand_area,.menu_area {display:none;} body {background-image:none !important;}');}; 仔细看{display:none;} 和 {background-image:none !important;}的附近
(4)使内嵌脚本的函数失效
例如:Add javascript to all pages: BAIDU_CLB_singleFillSlot=function(){}; 可以整合到前述规则,例如Add javascript to all pages: if(__amscript_cd(".ku6.")){ku_track=_st=function(){};__amscript_wc('.banner {display:none !important;}');};
(5)在加载完网页后运行脚本
基本格式是 __amscript_addonload("脚本");比如__amscript_addonload("if(typeof(ShowConfirmClose)=='function'){ShowConfirmClose();};"); 表示如果有确定关闭的选项则自动关闭。
可限定域名,例如Add javascript to all pages: if(__amscript_cd("360doc.com")){__amscript_addonload("document.body.oncopy=null");__amscript_wc('iframe[src*=".com/ad/"], #divadleft {display:none;}');};
要把多行脚本处理成单行,访问http://fmarcia.info/jsmin/test.html 把脚本粘贴到code方框,level选agressive,点JSMin。所使用的脚本,通常能在地址栏javascript:运行的都可以加入。但油猴那些特别的脚本不能拿来即用。
(6)对于判断cookie的广告可通过制作cookie避免
比如ithome.com首页弹出的通栏广告,按下面格式填写。Add javascript to all pages: if(__amscript_cd("ithome.com")){document.cookie='uy=uycls;domain=.ithome.com;path=/;expires=';__amscript_wc('#bbs_hl,#pop_notice,.hl_wrap,.side_products {display:none;}');};
11、移除含文本的表格(Remove tables with text)
当CSS规则无效才使用,因为CSS能精确定位不误杀,而移除div、table、form等易误杀,须采用区分度高的关键词。实战对象还是那个电信网 T_T
注意:建议代码取自adm的logs。在logs搜索,有很大机会出现变换关键词也找不到代码的情况,这就要详细查看logs了。再不行,就在网页上点击右键,选择查看“源文件”,继续搜索。而通过按F12键、Firebug查看HTML获取的代码经常无效。下面第10、11点同理。
去除底部“诚信网站、可信网站”,Firebug点选,发现用CSS写规则,IE会不支持,复制上层“table“(有时td、tbody也可)某个关键词,在adm的logs的Table texts项“Find all”搜索
逐个双击结果检视,确认目标后,保留易区分代码,其它代码用通配符代替或删除,add > apply.Remove tables with text: <table width="778" border="0" align="center" cellpadding="0" cellspacing="0" class="1h23">
如法往上删除两行
Remove tables with text: <table width="778" border="0" cellspacing="0" cellpadding="0">*<tr>*<td height="32" style="border:1px solid #efefef">
Remove tables with text: <table width="778" border="0" align="center" cellpadding="0" cellspacing="0" class="lh23">
12、移除含文本的div层/span块(Remove divs/spans with text)
删除“帮助与支持”,优先用css去掉,但为讲解用此方式。Firebug点选,代码是<div class="bzyzc">,在adm > logs > div/span text 搜索特征字“bzyzc”,双击结果,检视确认后,保留易区分的代码,其它代码用通配符代替、或删除,add > apply:Remove divs/spans with text: <div class="bzyzc">*<table width="427" border="0" cellspacing="0" cellpadding="0" class="bzyzc_table">
13、移除含文本的表单(Remove forms with text)
用得极少。查看adm logs发现只有一项,如法炮制,能删除右上角搜索框,Remove forms with text: <form id=search name=search*action="http://search.chinatelecom.com.cn/was40/
14、移除链接中所有的弹窗(Remove all popups from URL)
电信网终于功成身退了,说说弹窗。比如访问某些下载种子的网页,特别是点击“download”后,疯狂弹窗,用这个过滤方式有效,例如:
Remove all popups from URL: .rmdown.com/link.php
15、移除带有“alt”文本的图片
完全没用过,官方也只有一条规则,无视,Remove images with "alt" text: ($("div#divbigbanner").
三、屏蔽软件广告
简述:以火狐、adm的logs为辅助手段制作规则,在使用原版软件的情况下屏蔽遇到的广告。ad muncher CJX定制版已经默认支持大多数软件。以下说一说制作规则的土办法:
1、安装一个软件后,如有广告,尝试在选项设置里关闭(资讯、自启动等);
2、无法关闭的话考虑屏蔽。通常小软件不会保存数据,可直接跳到第5步;但大些的软件,则往往保存数据。首先找到数据目录(在网站搜索或参考http://bbs.kafan.cn/thread-1133619-1-1.html快速使用说明第5、6点),如在文件夹地址栏输入并回车 %appdata% 或安装目录或win7的C:\ProgramData\或C:\Documents and Settings\All Users\Application Data\
3、通过翻看,确认广告所在的位置,例如com.tencent.advertisement、adsys、banner、notice、pluginad等文件夹,甚至在.ini、.xml、.zip等文件里;
4、清空文件夹广告、或用记事本打开.ini文件删除广告地址、通常可以直接删除.xml和.zip文件。不关闭这些文件夹以便观察再次下载广告的情况;
5、查看adm的logs的Retrieved URLs是否出现此软件相关的网址,有则说明已默认支持,无则到选项Options > 过滤对象Filter Targets选中软件进程,再点击过滤filter > 应用Apply加入列表;
6、在adm的记录logs的链接Retrieved URLs右下角点击“Clear”清除记录,关闭软件并重新打开,观察adm的logs,和电脑的文件夹;
7、打开火狐 > 选项 > 高级 > 立刻检查,设置火狐为默认浏览器,然后在adm logs Retrieved URLs每次选择几个网址打开查看,优先查看.ini、.htm、.zip、.xml的网址。
以QQ为例,最终确认“迷你首页”,写规则阻止访问的链接Block retrieval of URL: minisite*.qq.com/*.htm? ;通过观察确认,“医生”会封杀修改版,写规则阻止访问的链接Block retrieval of URL: dl_dir.qq.com/qqfile/ims/qqdoctor/*. ;最后清空本地广告文件。
通常用阻止访问的链接Block retrieval of URL足够了,优先屏蔽.ini、.htm、.zip、.xml的网址,甚至某些无此后缀,但会下载这些文件的网址。少数规则去除脚本、移除div等。
四、文本替换
除了我的规则My Filters的15种过滤规则类型外,还有一个强大的文本替换工具,可以改写代码。通常在15种过滤规则类型无能为力时才使用文本替换。例如某个ad.js脚本文件包含正常内容与广告内容,如果用阻止访问的链接Block retrieval of URL: ad.js 虽然过滤了广告内容但也误杀了正常内容,而用文本替换可以只去掉广告内容。但对于日志logs出现的中止过滤Aborted filtering of connection due to unrecognised content encoding的链接无效。
使用过程:工具Tools>Replace Text文本替换>新建New>命名规则>输入被替换的文本>输入替换的文本
“被替换的文本”可以是浏览器地址栏出现的网址、网页源文件的代码。但避免选取网址的某一部分,以免被替换后出现空格而失效。建议刷新后查看被替换后的代码;
“替换的文本”可以留空(相当于删除被替换的文本)、少于或等于被替换文本字节的文本。通配符的用法见实例。
例:网页源文件的代码 var ifengcouplet3_width = 3*;**2**3;
替换为 var ifengcouplet3_width = 0;**0**0;
注意:单通配符表示一段代码,不保留。被替换的文本有单通配符时,替换的文本不能有单通配符;双通配符表示一段代码,会保留。被替换的文本有一组或多组双通配符时,替换的文本要有对应位置的双通配符
五、结语
总之,无论过滤浏览器,还是软件的广告,都可能要反复尝试;建议把所加规则过滤的相关网站、软件都里里外外翻看一遍,以免遗漏、误杀。
联系客服