# adClicker **Repository Path**: labuladuo/adClicker ## Basic Information - **Project Name**: adClicker - **Description**: 广告点击神器,帮助您提升收益! - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: http://www.letscode.top - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2018-09-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #adClicker ## 背景  现如今,越来越多的人加入到网站主的行列中来,期待通过网站流量来带来额外的收入。但是网站推广是一个很难的过程,如何在前期开始阶段就有点收入,来补贴网站的服务器费用呢?adClicker可以实现你的需求。但是切记,不可贪杯! ## 介绍  adClicker是基于Selenium+ChromeWebDriver开发而成,支持web端和移动端(wap)的广告点击,支持针对不同的广告联盟控制点击概率,另外在凌晨期间会自动减少点击的概率,真实模拟现实情况。如果您有另外的需求,可以基于该项目来修改,比如关闭/收起广告,滚动页面等 :smile: 。执行效果如下: ![执行效果](http://git.oschina.net/uploads/images/2017/0309/150840_71457d49_141502.gif "自动点击效果") ## 使用说明 #### 站点定义  站点定义的时候,需要在top.letscode.adclicker.site下增加属于你自己的站点类,并继承AbstractSite,如: ```java @Site(name = "www.letscode.top", desc = "纷享IT") public class LetsCodeMainSite implements AbstractSite { @Override public String getUrlFileName() { return "/urls/www_letscode_top.txt"; } } ``` 需要注意的是,该类需要增加@Site的注解,name为必须指定,使用的时候会根据该name来获取对应的实例。getUrlFileName中返回的字符串是网站对应的url列表,页面访问的时候,随机从中取出一个url进行访问。尽量随机和多的页面有助于减少作弊的判断。如我的[纷享IT](http://www.letscode.top)中的url: ``` http://www.letscode.top http://www.letscode.top/productmng/152.htm http://www.letscode.top/develop/394.htm http://www.letscode.top http://www.letscode.top http://www.letscode.top/develop/392.htm http://www.letscode.top/develop/387.htm http://www.letscode.top/develop/168.htm http://www.letscode.top http://www.letscode.top/productmng/346.htm http://www.letscode.top/productmng/326.htm http://www.letscode.top/productmng/310.htm ``` #### 广告联盟定义  增加广告联盟的时候,需要在top.letscode.adclicker.site下增加属于你自己的联盟类,并继承AbstractUnion,如我注册过彩屏联盟 ```java @Union(name = "caiping", desc = "彩屏联盟http://www.9cp.cn/Webmaster/main.php", type = Constants.UNION_TYPE_MOBILE) public class CaiPingUnion extends AbstractUnion { @Override public void click(WebDriver webDriver) { Actions actions = new Actions(webDriver); // 7%左右可以关闭广告 if (RandomUtil.randomFloat() < 0.7) { WebElement element = WebDriverHelper.findElement(By.id("closeCp")); if (element != null) { element.click(); } } System.out.println("start click caiping ad..."); WebElement iframe = WebDriverHelper.findElement(By.xpath("//iframe[position()=1]")); // 随机一个坐标点击 actions.moveToElement(iframe, RandomUtil.randomInt(250), RandomUtil.randomInt(300)).click() .perform(); } @Override public float getRate() { return 0.8f; } } ``` 继承之后需要实现click和getRate方法。其中click为点击广告代码的具体实现,rate控制点击的概率。在广告点击的时候,随机生成一个0~1的值,判断该值是否小于此处定义的rate,如果小于,那么点击广告,如果大于,那么不点击广告。通过该设置达到概率控制的效果。 #### 其他说明 - deviceName.txt中为模拟的手机型号,对于不带$$的为chrome自带的默认机型;带$$的为自定义机型,具体区别可以参考[selenium chromedriver模拟手机进行自动化测试](http://www.letscode.top/develop/457.htm) - userAgent.txt中为web访问的时候,需要设置的userAgent信息,以此达到每次访问的时候用的浏览器、操作系统会不一样,包括其他的信息等。 - 修改屏幕分辨率:修改屏幕分辨率适用于union type=web,也就是当广告类型在web页面上展示的时候,可以动态的修改屏幕分辨率,避免每次都是相同的屏幕分辨率,容易被广告联盟判定为作弊。为支持修改屏幕分辨率,需要将src/main/resources下的SetRes.exe拷贝到c:/windows/system32目录下 **以上代码需要配合动态拨号VPS使用!** _ **切记,模拟虽然逼真,但是毕竟不是真实的流量,切勿贪杯!**_ 有其他问题欢迎访问[纷享IT](http://www.letscode.top)提问!