使用WebBrowser编写广告挂机程序

    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,其结构非常简单,只有两个节点.

<?xml version="1.0" encoding="gb2312"?>
<userinfo>
  <userid>***</userid>
  <pwd>***</pwd>
</userinfo>
读取xml文档的代码:
            XmlDocument xmlDoc = new XmlDocument();
            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文件读取错误!");
            }
写入xml文档的代码:
            string userid = this.textBoxUserid.Text;
            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事件编写事件响应程序,即网页载入结束后执行.核心代码如下:
            string url=this.webBrowser.Url.ToString();
            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);
            }
    为了实现间隔一定时间执行一次点击的功能,需要引入.NET定时器功能.在.NET中,共有三个命名空间可以实现定时器功能,这里我选用的是System.Windows.Forms下的Timer组件.在设计模式下拖入一个Timer组件,设置Interval属性为1000(即每1秒执行一次),然后编写Tick事件的响应程序,这里主要完成两件事:1是到达规定时间(35s)后网页跳转;2是通过Label控件显示时间的变化.代码如下:
        private int startTime=35;
        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");
           }      
        }

最后,上一张程序运行时的截图,为了达到更好的界面效果,这里使用了第三方的皮肤组件.

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章