WebBrowser是.NET中一个十分强大的控件,利用这个控件我们做很多带有自动功能的工具,如论坛的自动登录,网页特定内容的截取,甚至编写属于自己的专用浏览器,今天主要说说怎么利用这个控件实现自动点击广告的功能。
首先简单介绍一下WebBrowser组件,下面是摘至MSDN的说明:使用 WebBrowser
控件,可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer
功能,并将该控件用作简单的 HTML 文档查看器。此外,可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在 WebBrowser 控件中承载的事实。通过这种方法,可以将 Web 控件和 Windows 窗体控件无缝地整合到一个应用程序中. 关于这个控件更详细的介绍,可以参见WebBrowser 控件概述.
说到广告点击,大家都不会陌生,最有名的恐怕就是google adsense了,但今天不准备以google adsense为例子,理由很简单,google有着非常严格的防作弊规则,虽然利用 WebBrowser可以成功点击,但时间长了难保会被google察觉.今天将以国外一个出名的广告点击站bux.to为例说一下自动点击功能的实现,bux.to是目前比较火的一个站点,它的注册用户每点击一次广告将会获得1美分的收入,是个典型的广告点击站.废话少说,进入我们的正题.
需要实现的功能:
一 账户保存功能:只有第一次运行程序时需要填写用户名/密码,以后每次都是自动录入.
二 自动点击功能:成功登录后统计广告数,自动跳入广告点击页,到了规定的停留时间后进入下一条广告直到结束.
具体实现:
一 账户自动保存
账户的保存有很多种实现方法,我这里使用的是xml文件保存的方式,首先新建一个xml文档,取名为userinfo.xml,其结构非常简单,只有两个节点.
<userinfo>
<userid>***</userid>
<pwd>***</pwd>
</userinfo>
xmlDoc.Load("userinfo.xml");
if (xmlDoc != null)
{
XmlNode root = xmlDoc.SelectSingleNode("userinfo");
string userid = root.ChildNodes[0].InnerText;
string pwd = root.ChildNodes[1].InnerText;
this.textBoxUserid.Text = userid;
this.textBoxPwd.Text = pwd;
}
else
{
MessageBox.Show("XML文件读取错误!");
}
string pwd = this.textBoxPwd.Text;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("userinfo.xml");
if (xmlDoc != null)
{
XmlNode root = xmlDoc.SelectSingleNode("userinfo");
root.ChildNodes[0].InnerText = userid;
root.ChildNodes[1].InnerText = pwd;
xmlDoc.Save("userinfo.xml");
}
else
{
MessageBox.Show("XML文件写入错误!");
}
首先拖入一个WebBrowser控件,Url属性设置为bux.to的登录地址,双击DocumentCompleted事件编写事件响应程序,即网页载入结束后执行.核心代码如下:
HtmlDocument HTMLDocument = this.webBrowser.Document;
if (url.IndexOf("surf.php") > 0)
{
lblCount.Visible = true;
lblTime.Visible = true;
labelCount.Visible = true;
labelTime.Visible = true;
HtmlElementCollection all = HTMLDocument.All;
int k = 0;
for (int i = 0; i < all.Count; i++)
{
HtmlElement elem = all[i];
if (elem.TagName.ToLower() == "a")
{
this.lblCount.Text = k.ToString();
string anchorString = elem.OuterHtml;
if (anchorString.IndexOf("?ad=") > 0)
{
k++;
anchorString = anchorString.Substring(anchorString.IndexOf("?ad=")+4, 5);
string newUrl = "http://www.bux.to/view.php?ad=" + anchorString;
this.webBrowser.Navigate(newUrl);
}
}
}
}
else if (url.IndexOf("view.php") > 0)
{
this.webBrowser.Stop();
this.timerClock.Enabled = true;
}
else if (url.IndexOf("login.php") > 0)
{
string userid = this.textBoxUserid.Text;
string pwd = this.textBoxPwd.Text;
if (this.webBrowser.Document == null)
{
MessageBox.Show("请先打开一个要分析的网页");
return;
}
HtmlElement tbUserid = this.webBrowser.Document.All["COOKIEusername"];
HtmlElement tbPasswd = this.webBrowser.Document.All["COOKIEpass"];
tbUserid.SetAttribute("value", userid);
tbPasswd.SetAttribute("value", pwd);
}
private void timerClock_Tick(object sender, EventArgs e)
{
if (startTime != 0)
{
startTime--;
this.lblTime.Text = startTime.ToString();
}
else
{
this.timerClock.Enabled = false;
startTime = 35;
this.webBrowser.Navigate("http://www.bux.to/surf.php");
}
}
最后,上一张程序运行时的截图,为了达到更好的界面效果,这里使用了第三方的皮肤组件.