本文最后更新于2019年01月19日;如遇问题,请留言及时通知站长。

声明:本文为转贴,同时收录了部分网友的回复。

用AJAX跟踪Google Adsense广告点击

功能

可以完整详细地获得每一个用户点击广告的数据,包括点击时间,用户的IP,页面来源地址,被点击的广告网站地址,如果你的站点上保存了用户cookie的话,甚至可以查询到是哪位用户点了你的广告。 

用纯客户端javascript代码和AJAX技术实现点击监听和向服务端发送点击数据,服务端我用的是ASP脚本,只是用来保存点击数据和提供浏览器端的点击查询,可以更换为其他服务端脚本,如PHP,JSP等 

数据保存方式为了简单,我用纯text文本保存,一行保存一条数据,数据字段用逗号分隔,这样方便用户将这个文本另存为csv格式,csv就能用excel打开了。

查看广告点击数据可设访问密码 

安装和使用

1.下载这个文件解压出里面的adLog.asp文件 

2.用记事本打开adLog.asp找到如下几行:

Const TextFile = "adLog.txt" '保存点击数据的text文件,是相对路径,可以修改

Const AccessPassword = "adLog" '查看点击时的访问密码,可以自行设定,如果无需身份认证,请将AccessPassword值改为""即可

Const SessionName = "google_ad_logger" 'Session名称,用来保存访问密码到指定Session中

Const WebCharset = "utf-8" '网站的编码类型,如果是GB-2312,请自行修改

Const UserName = "username" '用户名cookie,如果你的站没有用户cookie,就不用管了

可以根据自己实际需要修改其值 

3.修改完毕后将文件上传到你的web站点上,任何路径下都可以。这里注意:如果你的编码是gb-2312,请将文件用记事本打开,并选择另存为,将编码改回为ANSI。 

4.修改你投放了google广告的页面文件,将以下代码插入你的页面任意位置: 

<script language="javascript" type="text/javascript" src="http://www.example.com/adlog.asp?act=script"></script>

将其中的页面路径修改为你自己实际的地址 

5.安装完毕以后页面就自动开始跟踪广告点击了 

6.查看点击数据你可以上ftp直接下载你指定的文本文件查看,或者访问http://www.example.com/adlog.asp 

技术原理

其实这也不是什么高深技术,原理及其简单,主要核心功能都是在客户端javascript中。

通过查看发现google的广告代码全部放在一个iframe中。所以首先通过document.getElementsByTagName("iframe")得到页面中所有iframe标签的元素集保存到一个数组中 

然后遍历数组检查iframe.src值是否包含有"googlesyndication.com"这串字符串,如果有就认为这个iframe是google的广告显示iframe 

得到google显示广告的iframe后给这个iframe增加一个onfocus事件,这个事件就是当元素获得焦点时触发的事件 

在onfocus事件中检查window.status的值,也就是状态栏显示的字符串,如果匹配"go to"和"键连至"这几个字符串就提取中网址地址,这个地址就认为是被点击的广告网址 

利用AJAX立即将用户的点击数据POST到服务端纪录下来,这里的AJAX无需再响应服务端传回的数据了,只管发送出去即可 

几个核心代码

编写过windows程序的朋友一定知道微软的Visual Stdio中包含有一个Spy的小工具,这个小工具中就有一个功能用来监听某个窗口句柄的所有触发事件,用起来很爽,我在写这个广告纪录器时也自己实现了一个网页上用的Spy,代码如下: <input type=text id=test><br />

<textarea cols=80 rows=20 id=view></textarea>

<script language="JavaScript">

obj = document.getElementById("test");

var v = document.getElementById("view");

for (evt in obj)

if (evt.substring(0,2)=="on")eval("obj."+evt+"=function(){v.value ='"+evt+"事件触发\\n'+v.value};");

</script>我就是用这种方法查看iframe上触发的事件,查看后发现鼠标单击iframe时能接收到的事件中有onbeforeactivate、onactivate、onfocusin、onfocus这四个,我就挑了onfocus来监听用户点击的 

ajax部分我用的是XHConn组件,小巧灵活简单,很好使。 

前面讲解安装时我特意说过包含js的代码可以放在网页的任意位置,这里我用的是一个称作domFunction的js组件,这个组件可以实现循环查询DOM对象,直到发现DOM装载入页面并有效后再执行代码,相当于document.onload事件的作用,google adsense的广告有时候会显示很慢,用了这个Dom检查程序就可以保证每次页面装载都能查找到google的iframe,万无一失,也方便了用户添加代码时无需考虑位置的影响了。 

按理,这个程序应该写成一个asp外加一个js两个文件,但是看了Andy兄介绍的单页面应用程序(Single Page Application这篇文章,很是欣赏,所以特意将两个文件合写到一个文件中了 

服务端保存和读取文本文件的内容时,我用的分别是FSO和ADODB.Stream,如果你的站点不支持这些组件,请和我联系,我改写其他方式 

遗憾

最遗憾的是这个程序只能用在IE下启作用,Firefox下无法跟踪用户点击操作,原因是Firefox中ifrmae根本触发不了任何用户操作事件,去Mozilla上查看资料,官方说明了用document.getElementById("iframe").contentWindow这个对象,但是我尝试后还是毫无作用,只好作罢,等待高人解决。 

最惭愧的是我怎么也找不到在onfocus事件中判断用户鼠标左右键的方法,在iframe上点击鼠标右键也会触发事件的,程序会被认为一次有效的用户点击,这个问题一定要改改的。 

Demo和下载

如果想立即查看下程序实际运行,我特意提供了一个demo文件:http://www.duduwolf.com/test/adLogDemo.asp,这个文件没有设访问密码,任何人都能查看点击数据,你也可以通过装载<script language="javascript" type="text/javascript" src="http://www.example.com/adlog.asp?act=script"></script>这串代码立即从你的网站上实现点击跟踪,只不过点击后的数据是保存在我的网站上并且是公开的。

下载源文件:adloger.rar


这个程序我自己用了好几天了,迟迟没有发布出来就是担心大量应用后google估计就会修改google adsense代码了,还有就是我不知道这样做是不是违背了google广告的保留条款,仔细查看后发现有这样一条

Google 严禁以任何手段人为提高点击次数或网页展示次数,并通过工程系统和人工分析对行为进行密切监控。

所以希望大家只是拿来当技术研究,切勿长时间靠这个跟踪客户点击,虽然目前这个程序不影响任何adsense投放和点击后的动作和行为,但是如果有一天google的工作人员亲自上你的站点研究代码就全暴露了。我blog上的数据也统计了好几天,基本和google提供的统计数据差不多,因为我的blog上有用户留言的cookie,所以我特意保存了用户名,想看看每天都是谁在点击我的广告,统计后发现点击我广告的人都没在blog中留言,在blog中留言保存了cookie的用户从来不点击广告

该日志的引用地址: 

http://www.duduwolf.com/cmd.asp?act=tb&id=251 

-----------------------------------------------------------------

关于iframe javascript的一些测试(引用)

New Start 

很早之前看过嘟嘟写的那个统计adsense点击的东东 今天心血来潮,研究了一下,顺便看看嘟嘟提到那些问题有没有办法解决。... 

2005-12-7 22:39:20 

用onunload事件监听google adsense点击(引用)

New Start 

通过iframe的onfocuse事件监听adsense的点击事件,存在误统计右键点击的问题,用onunload事件,监听就不会存在这个问题了。 

2005-12-13 12:48:08 

4.老康 | (home) 

点击我广告的人都没在blog中留言,在blog中留言保存了cookie的用户从来不点击广告,哈哈哈 

2005-9-25 20:08:34 

5.duduwolf | (home) 

to 黄靖昀:

你说得那个我看过了,他的方法和我的差不多,都是通过onfoucs或者onfocusin来监控的,我的统计数据通过ajax传送到服务器,他的是通过new一个img,然后用img.src='http://www.adsenser.org//click.asp?userid=101014&R=' + document.location + '&U=' + window.status.substring(3); 这种方式发送到他们的网站,原理差不多,点击过程中不会影响发送给google的统计数据,不过说实话,这些第三方还有我的这个都是违反google的规则,google明文指出不允许任何方式人工统计click的 

2005-9-25 20:25:29 

7.duduwolf | (home) 

to 黄靖昀:

谢谢你了,其实我放广告只是为了研究下google的这个技术,并且是带着hack的目的:) 靠这玩意儿赚不了多少,我的blog访问量低,每天的收入几美毛甚至几美分 

2005-9-25 21:37:13 

13.罗古 | (home) 

请教,我把您的代码按照您的方式放入了我的网页里,但IE状态栏有错误提示!

行: 56

字符: 45

错误: 未结束的字符串常量

代码: 0

url: http://www.qqsun.cn

请告诉我原因,好不? 我的QQ:1248800 

2005-11-10 14:28:37 

14.mm | (home) 

google是允许使用统计系统的 

2005-11-14 3:57:17 

16.罗古 | (home) 

duduwolf兄,上次的问题我已经解决,是编码的问题!另存后就好了。

想请您有空的时候能不能把这个监视程序改成ACCSEE数据库啊?!

因为访问量大了fso会使电脑卡机的,期待这个程序的升级!:) 

2005-11-15 22:47:15 

17.zhaoj | (home) 

我的是PHP和静态的网页放的GG广告,你给的是asp的,我不会怎么改成我可以用的,请帮帮我可以吗? 

2005-11-23 20:25:54 

21.david | (home) 

mozilla用的是document.getElementById("iframe").contentWindow.focus()

不是onfocus

我在firefox中列出了所有的iframe可用属性和方法,还有contentWindow的可用属性和方法,好像没有监听用户事件的

ie中有很多,不过好像很多都不能用,onclick之类的都有,但是不能用 

2005-12-7 20:54:12 

23.shunz | (home) 

我写信问过google了,可以放这个代码进行跟踪,我正准备把你的代码转到php中。。。 

2005-12-19 18:25:32 

24.duduwolf | (home) 

shunz稍等一两天,我准备改造下,让firefox也支持,并且把可以自定义取cookie以及客户端浏览器和来源地址,这些数据有时候也挺有用的 

2005-12-20 0:34:58 

31.oneandhalf | (home) 

可不可以用在其它广告商比如allfeed 这样的广告上? 

2006-3-24 1:11:26 

32.travelman | (home) 

有没有用于adwords的跟踪作品啊? 

2006-3-24 1:56:19 

33.naruco | (home) 

强。很早前就想弄个广告统计的代码了。无奈自己水平有限!呵呵。看了一下这 个源代码,感觉有点明白了。或许稍微改进一下,功能就可以扩展到统计整个网页中的广告单元,而不仅仅是GG广告。不知我的想法正不正确!有空得好好学习一下这个源程序。呵呵。谢谢提供!

今天在网上逛了几圈,看了些有关ajax的文章。也看了google网站上利用ajax做的部分。感觉效果超好!!但大多数好像都是php与ajax的结合,我只懂点asp,苦恼啊。不知嘟嘟能否指点一二?先谢了!

我查阅ajax的目的,是为了能在网页中实现无刷新搜索结果的显示,具体效果是: 

http://www.movfox.com/movie,33353.html

还烦请嘟嘟您打开上面网址,然后点击BT下载!

点击后的效果,就是我想要的。但不知从何下手。

不知道嘟嘟您愿意指导一下我不?

做不出来很苦恼。呵呵。麻烦了~~ 

2006-5-8 16:02:06 

34.duduwolf | (home) 

你去看看新版的射手网,全都是无刷新显示搜索结果的 

2006-5-8 17:18:31 

35.naruco | (home) 

刚去看了,也进行搜索测试了。其搜索过程就是我最想要的效果。但不知道他是怎么处理的。请求嘟嘟你指点指点我,好吗?谢了。我一点头绪也没有。

他是如何搜索到这些结果的?应该不是对数据库进行检索,如果是对数据库检索,到没什么。我最想要的是如何实现像爬虫类的搜索!查阅了些heritrix、jspider的资料,也都没有详细的说明!

起初我有去询问影视之狐的人,他们做了个diggfox,类似www.digg.com的。他们只是给了我个引,说那只是爬虫,包括他影视之狐中BT种子的搜索!

现在我很想弄懂这种搜索的处理过程,可又不会。呵呵。麻烦嘟嘟您了!! 

2006-5-9 3:00:48 

36.duduwolf | (home) 

to naruco: 汗,爬虫我就不是很了解了,但肯定的是射手网的搜索结果是从数据库中检索出来的,其他一些bt下载的种子我觉得大多数都应该是数据库中放的,你有通过爬虫抓取互联网下载信息的相关网站吗? 

2006-5-9 8:14:18 

37.naruco | (home) 

这方面的资料很难找,找到的绝大多数也都是英文。我英文水平又太烂,哎!! 

http://www.backbase.com/demos/bbsearch/

这是一个雅虎搜索的东东。感觉也挺实用! 

http://crawler.archive.org/

这个是开源的爬虫程序。但说实在的,真弄不懂里面的代码。

我也是从别人博客里看到的,里面是这样说的:

Heritrix是一个开源,可扩展的web爬虫项目。Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。 

至于jspider,这个后来了解到,并不是专指爬虫,而且用于js调试什么的,里面功能很强,合理配置也能达到搜索爬虫的功效!就是太复杂了!

现在这方面的资料很难找,我不知道是不是我查找的方式不对还是怎么的。呵呵~

www.wanmp3.com,这个网站,嘟嘟你有去过吗?他有一个客户端,我大致观察了一下,其核心好像是通过百度搜索结果来的!类型跟刚才给的backbase差不多,现在就是弄不懂,他是如何处理搜索结果的!

程序,,这东西真难!!! 

2006-5-9 12:07:30 

38.duduwolf | (home) 

backbase的那玩意儿非常简单的,它就是通过你提交的关键字去查询yahoo的结果页面,得到页面结果的html代码后,把每条搜索到的结果剥离出来,然后重新组织一下就给你显示出来,就像我写的这篇文章中的那个小玩意一样http://www.duduwolf.com/post/122.asp 

2006-5-9 13:49:07 

39.duduwolf | (home) 

那个wanmp3.com我看了一会儿也不能确定它用的什么方法,可能是人家有自己私有的mp3链接的数据库,也有可能通过爬虫抓的互联网上的mp3链接,取自mp3.baidu.com的可能性很大。

backbase和wanmp3看似非常相似的ajax远程获取数据行为,但我认为它们的获取方式有相同点也有不同点。前者是每次请求时动态从yahoo获得数据并重新组织在呈现给用户,wanmp3估计是事先取好数据保存在自己的数据库中,用户请求页面时把数据库中存放的mp3链接提出来,然后用在线播放器播放。 

2006-5-9 13:56:01 

40.duduwolf | (home) 

你如果想做一个类似于wanmp3的网站,那你就应该事先通过程序爬虫去一页一页扒baidu的网页,把每首歌的所有mp3链接扒过来,然后存放在自己的数据库中,但是你还得要有一个程序专门来测试这些链接有效性和连接速度,然后把所有链接设置优先级,当用户访问你网站的某一首歌的页面时,在自己的数据库中取出优先级最高的mp3链接显示给用户,或者直接在线播放。

网页爬虫包含了很多的法律法规和访问规则,你不能随心所欲的去抓取,如果给对方带来了大量流量,人家说不定会屏蔽你的,所以建议写个小程序在本地运行,起码不要在你提供web服务的服务器上运行。建议你去看看网络上非常流行的新闻小偷、mp3小偷之类的远程采集程序,这些程序大多都是php、asp写的,你可以参照后用c++或java写个小程序实现 

2006-5-9 14:07:33 

41.naruco | (home) 

在这回完话,我就一直在看wanmp3上的东西。并载了他的播放器下来,剥离后发现是delphi编写的。

他网站的音乐,我比对了百度里的音乐排行,与他形同一样,很可能他是扒了百度后,将一些资料存于库中,但所有的音乐链接都不是他本地的。而是网络中的,查看源文件,好像比较固定,排除了他即时从百度获取音乐链接的可能。这之后我就没看他网页了。就在查看他的播放器

他的播放器应该完全是随机从web获取音乐链接,并指向他的播放器,从而进行播放的。

以下是他播放一着歌时,所产生的系列文件: 

http://202.99.219.172:6677//Music1/0/1/2/3406/3407/3430.wma

http://61.139.33.112//Music1/0/1/2/3406/3407/3430.wma 

http://search.sogua.com/view.asp?id=13360274&format=wma&singer=夏宇愈混乐队&song=雨人&Page=1

http://search.sogua.com/search/view.asp?id=13360274&format=wma&singer=夏宇愈混乐队&song=雨人&Page=1 

http://search.sogua.com/search.asp?key=雨人&b1=搜索&fmp3=1&fwma=1

。。。等等

这个触发过程应该是他这个播放器的重点!!

对这个过程我比较感兴趣。但如何触发,究竟怎样利用ajax去调度这些,对我来讲是个难点!

还有,刚才你讲的扒百度并入库的这个想法,我也有想到,但很多细节上不了解,比如,如何将扒到的资料处理并入库呢?没有处理过,看来还得去找找!呵呵

说得有点乱。忘谅解!! 

2006-5-9 17:49:07 

44.Aether | (home) 

亲爱的老大,我向Zola推荐你这个统计系统,让他可以修改一下,放在PHP空间,监控他的格子。结果你的代码写地也太整合了吧,全在ASP里面……我哭了…… 

2006-8-8 22:18:59 

45.duduwolf | (home) 

hehe,为了达到app of one page效果就写在一个文件里了,不过还是可以修改的啊 

2006-8-9 13:55:10 

46.Ryan | (home) 

最近想学AJAX, 发现JavaScript不过关... 

2006-9-9 12:31:57 

50.google广告收入有多少阿 | (home) 

这么多人做google广告,收入有多少阿