转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB.NET做个自动发帖机         ★★★★

用VB.NET做个自动发帖机

作者:闵涛 文章来源:闵涛的学习笔记 点击数:930 更新时间:2009/4/23 19:01:36
      用VB.NET做个自动发帖机

          屠恩海(
SunHai

  题记如果你经常泡各种论坛发表宏论,如果您想把您的软件在极短时间内提交到有关网站,如果您想把您的网站快速登陆各搜索引擎,本篇文章可能对您有所帮助。

   开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP

                  编程实现自动发帖                  

  不编程也能实现自动发贴?
  答案肯定的。2003年10月前,我还未学习编程(VB6),但我已经实现自动发贴。虽然现在我已不用这种方法,但可能对有些朋友有用,还是在此介绍一下实现方法。
  实现原理是:借用模拟键盘、鼠标操作的软件,抓取输入框座标,然后模拟移动鼠标到指定座标,模拟键盘输入字符,模拟回车或点击相应位置完成自动发贴。当然,你得编写相应自动化脚本,虽有一点难度,但对于编程来说,应该是简单的。
  有三个模拟键盘、鼠标类软件,功能比较好,在《VS.NET学习方法论》已经有所介绍。
  一. PCWorker(http://www.pcworker.net)
   PCWorker功能极多,更重要的是,PCWorker中的脚本代码都是看得懂的代码:

Press VK_F1 // 模擬按 F1 鍵 Press VK_CTRL+VK_F // 模擬按 Ctrl + F 鍵

  是不是不太难?

  二. “按键精灵”(http://www.vrbrothers.com/cn/qmacro)
  相对来说,按键精灵容易使用,但只有PCWorker的少部分功能。比如PCWorker可输出随机数,按键精灵就不行。
  按键精灵的脚本代码不太容易看懂,比如
  KeyPress 82 1
   您看得出按的是哪个键吗?

  三. EzScript(http://ezscript.seed.cx/)
  EzScript的功能也很多。但我在Windows XP下试用自动发贴时,没有反应。

   初学者建议使用按键精灵,进阶则用PCWorker。使用教程请参考作者网站。


                   用AxWebBrowser控件实现自动发帖

 
   AxWebBrowser控件即VB6中的WebBrowser控件。
   使用时先添加对AxWebBrowser控件和MSHTML的引用。
  先Navigate到指定网址。然后用以下代码等待网页加载完毕:

Do While brow.Busy
  Application.DoEvents()
Loop

  然后调用发帖过程。

Public Sub fill()
  On Error Resume Next
  Do While brow.Busy
    Application.DoEvents()
  Loop

  Dim webDoc As Object = brow.Document.all
  Dim webTag As Object
  Dim lengthTag As Integer = webDoc.length - 1

  For countTag As Integer= 0 To lengthTag
    webTag = webDoc.item(countTag)
    Select Case Strings.LCase(webDoc.item(countTag).tagname)
      Case "textarea"     ''''网页中的文本框
        Select Case webTag.name
          Case "body"   ''''"body"来自网页源代码,不同网站很可能不同,你根据实际修改。下同。
            webTag.value = strBody   ''''这是预先定义的值,下同。
         End Select

      Case "select"       ''''网页中的下拉选择框
        Select Case webTag.name
          Case "month"   ''''选择月份,这里略去年、日的选择,因为原理相同。
            webTag.all.item(1).selected = True  ''''选择第一个值
         End Select

       Case "input"  ''''网页中的输入框
        Select Case Strings.LCase(webTag.type)
          Case "text"     ''''文本
            Select Case webTag.name
              Case "name", "userid", "nickname" ''''用户名
                webTag.value = strName
              Case "subject" ''''标题
                webTag.value = strSubject
              Case "regid" ''''注册码
                webTag.value = strRegid
              Case "username", "realname"
                webTag.value = strUsername
              Case "cardnumber"
                webTag.value = strCardNumber
              Case "homephone"
                webTag.value = strHomephone ''''电话号
              Case "url_title" ''''链接名称
                webTag.value = urlTitle
              Case "url"  ''''链接
                webTag.value = url
              Case "email" ''''email地址
                webTag.value = email
              Case "img"  ''''图片  
                webTag.value = img
              Case "midi"  ''''音乐
                webTag.value = midi
              Case "year"  ''''年
                webTag.value = strYear
              Case "prompt" ''''找回密码提示问题
                webTag.value = strPrompt
              Case "answer" ''''找回密码答案
                webTag.value = strAnswer
            End Select
          Case "password"  ''''密码
            Select Case webTag.name
              Case "passwd", "password", "confirm", "repasswd" ''''密码,确认密码
                webTag.value = strPass
            End Select
          Case "checkbox"  ''''单选框
            Select Case webTag.name
              Case "emailme"  ''''email通知我
                webTag.checked = True  
            End Select

        End Select

     End Select
   Next

  brow.Document.forms(0).submit()  ''''许多网页表单,这一句简单代码即实现自动提交

End Sub  

于是,主过程是这样:

Public Sub autoAdd()
  brow.Silent = True ''''不弹出窗口
  brow.Navigate("http://sunhai.tianyablog.com") ''''打开指定页
  Do While formBrowNetsh.brow.Busy  ''''等待网页加载完毕
    Application.DoEvents()
  Loop
  Call fill()
End Sub

  以上代码可实现可视化自动注册和发帖。
   还有几个问题有待解决:
   一. 有的网站要填上识别码数字才能注册或发言,如何用程序来实现自动识别识别码图片上的数字?
   二. 有的网站一进去就会跳出一个欢迎对话框,程序的运行就被暂停。
   三. 对于自动注册和发言来说,加载较慢的图片、Flash、音乐等并不是必需的。

  
              用HttpWebRequest类实现自动发帖

  用HttpWebRequest类实现自动发帖就简单多了。
  我们始终不能忘记,最好的教程是MSDN,在Microsoft Visual Studio .NET 2003“搜索”中敲入HttpWebRequest,抄来一些东东(事实上许多教程书籍都是从MSDN上抄的):
   命名空间: System.Net
   HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。
   不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法初始化 HttpWebRequest 的一个新实例。如果 URI 的方案是 http:// 或 https:// ,则 Create 将返回 HttpWebRequest 实例。
   GetResponse 方法向 RequestUri 属性中指定的 Internet 资源发出同步请求并返回包含该响应的 HttpWebResponse 实例。可以使用 BeginGetResponse 和 EndGetResponse 方法对 Internet 资源发出异步请求。
   当要向 Internet 资源发送数据时, GetRequestStream 方法返回用于发送数据的 Stream 实例。  BeginGetRequestStream 和 EndGetRequestStream 方法提供对发送数据流的异步访问。  
   如果在访问 Internet 资源时发生错误,则 HttpWebRequest 类将引发 WebException 。 WebException.Status 属性是 WebExceptionStatus 值之一,它指示错误源。当 WebException.Status 为 WebExceptionStatus.ProtocolError 时, Response 属性包含从 Internet 资源接收的 HttpWebResponse
  

Shared Sub postData()
  Dim httpUrl As New System.Uri("http://sunhai.tianyablog.com?" & "name=yourName&pass=yourPass&cardnumber=yourCardNumber")
  Dim req As HttpWebRequest
  ''''req.Timeout = 10000 ''''设置超时值10秒
  req = CType(WebRequest.Create(httpUrl2), HttpWebRequest)
  req.Method = "POST"
  req.ContentType = "application/x-www-form-urlencoded"
  Dim bytesData() As Byte =   System.Text.Encoding.ASCII.GetBytes(""name=yourName&pass=yourPass&cardnumber=yourCardNumber")
  req.ContentLength = bytesData.Length
  Dim postStream As Stream = req.GetRequestStream()
  postStream.Write(bytesData, 0, bytesData.Length)   ''''以上向服务器post信息。

  Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse) ''''以下获取服务器返回信息
  Dim reader As StreamReader = _
  New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312"))
  Dim respHTML As String = reader.ReadToEnd()
    MsgBox(respHTML)  ''''这就是向网络服务器post后返回的信息
    MsgBox(res.StatusCode.ToString)  ''''向网络服务器post后返回的状态码
  res.Close() ''''关闭

End Sub

  用AxWebBrowser控件实现自动发帖留有三个问题,用HttpWebRequest类来实现,后二个问题都不复存在。而且,用HttpWebRequest类来实现的速度要快得多。但是,同样的?
  有的网站要填上识别码数字才能注册或发言,如何用程序来实现自动识别识别码图片上的数字?

  我们在主过程里加上线程,因为我们以后要用多线程发帖啊。多线程在VB6中不好实现,在VB.NET中却是轻而易举的事情。
 

Dim threadAdd As System.Threading.Thread ''''定义线程 
Public Sub threadAutoAdd()
  threadAdd= New System.Threading.Thread(AddressOf postData)  ''''创建线程实例
  threadNetsh.Start()  ''''开始线程
  ''''别忘了在Sub postData()的最后加上threadAutoAdd.Abort()来关闭线程
  ''''或者在这里加上判断Sub postData()完毕的代码,如果完毕就关闭线程
End Sub


  Visual Studio .NET 2003 是一个全面的开发工具,用于快速构建面向 Microsoft Windows? 和 Web 并连接 Microsoft .NET 的应用程序,是否极大地提高了我们的开发效率呢?

我的QQ:  26624998
我的网站:http://sunhai.tianyablog.com
本文地址:http://www.csdn.net/Develop/read_article.asp?id=23735


                 2004年1月24日

 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台