zoukankan      html  css  js  c++  java
  • [收藏]关于用Asp.Net论坛发帖软件的实现


    作者: MSN: king#tuenhai.com

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

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

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

                      不编程实现自动发帖                  

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

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

      是不是不太难?

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

      三.
      的功能也很多。但tuenhai在Windows XP下试用自动发贴时,没有反应。

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


                       用AxWebBrowser控件做论坛自动发贴软件

     
       AxWebBrowser控件即VB6中的WebBrowser控件。
       用AxWebBrowser做论坛批量发贴软件,使用时先添加对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通知tuenhai
                    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("") @# tuenhai的小站为例
      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("?" & "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 的应用程序,是否极大地提高了我们的开发效率呢?

  • 相关阅读:
    大数据集群实验环境搭建
    ORACLE 自治事物
    UNDO内存结构剖析
    事物深度解析
    UNDO
    SCN
    检查点队列
    WPS Excel启用正则表达式
    Python遍历目录下xlsx文件
    Python 字符串指定位置替换字符
  • 原文地址:https://www.cnblogs.com/goody9807/p/411277.html
Copyright © 2011-2022 走看看