用VB.NET做个自动发帖机

    技术2022-05-11  40

    <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>        用VB.NET做个自动发帖机          屠恩海( SunHai )

      题记:如果你经常泡各种论坛发表宏论,如果您想把您的软件在极短时间内提交到有关网站,如果您想把您的网站快速登陆各搜索引擎,本篇文章可能对您有所帮助。   开发工具:Microsoft Visual Studio .NET 2003   操作系统:Windows XP                  不编程实现自动发帖                  

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

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

      是不是不太难?  二. “按键精灵”(http://www.vrbrothers.com/cn/qmacro)  相对来说,按键精灵容易使用,但只有NET/">PCWorker的少部分功能。比如NET/">PCWorker可输出随机数,按键精灵就不行。  按键精灵的脚本代码不太容易看懂,比如  KeyPress 82 1   您看得出按的是哪个键吗?  三. EzScript(http://ezscript.seed.cx/)  EzScript的功能也很多。但我在Windows XP下试用自动发贴时,没有反应。   初学者建议使用按键精灵,进阶则用NET/">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 formBrow NETsh.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)  '创建线程实例   thread NETsh.Start()  '开始线程   '别忘了在Sub postData()的最后加上threadAutoAdd.Abort()来关闭线程   '或者在这里加上判断Sub postData()完毕的代码,如果完毕就关闭线程 End Sub

      Visual Studio .NET 2003 是一个全面的开发工具,用于快速构建面向 Microsoft Windows? 和 Web 并连接 Microsoft .NET 的应用程序,是否极大地提高了我们的开发效率呢?我的QQ:  26624998我的网站:http://sunhai.tianyablog.com本文地址:NET/Develop/read_article.asp?id=23735">http://www.csdn.NET/Develop/read_article.asp?id=23735NET/Develop/read_article.asp?id=23735">                 2004年1月24日

     

    <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

    最新回复(0)