• [收藏]关于用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 的应用程序,是否极大地提高了我们的开发效率呢?

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/goody9807/p/411277.html
Copyright © 2020-2023  润新知