|
VB实现自动登录论坛并回帖 |
来源:转载 人气:1038 录入时间:2007-11-8 |
由于某些原因,我们可能需要自动登录到论坛回复一些帖子,比如回复编程家园里指定ID号的帖子。用VB如何来实现呢?
VB中有两个很好的东西,一个就是WebBrowser控件,VB甚至可以自动添加网页浏览的Form,里面代码都写好了的;第二个就是Microsoft HTML Object Library的引用,这个非常好,可以用来分析页面中Object,从而自动输入文本,或选定指定的Object。
有了这两个工具,实现自动法帖就容易了。用WebBrowser装入浏览页面,在Load_Complete事件里分析装载的页面。如是登录页面则查找Username和Password的输入框和登录按钮,实现自动登录。如是回帖页面也同样可查找到回帖的Title和TextArea区实现自动回复。
以下是程序的部分代码,因存在恶意修改的可能,故请大家从学习的角度研究。实验证明此程序的平均回帖速度约为1-6秒,如大家有增加其效率的建议,请回帖探讨。
VB的WebBrowser控件和Microsoft HTML Object Library引用,我以前都没注意过,而且手上也没有资料,网上MSDN居然也没找到参考,因此摸索了数小时才胡乱的写了些代码实现上述功能。不合理之处,敬请指正。
Global UserName As String '用户名
Global Password As String '登录密码
Global Login_Page_Start As String '登录页面
Global Login_Page_Complete As String '登录完成后服务器将自动跳转的页面
Global Jump_Page As String '拟发回复贴的页面
Global Pouring_Article_ID As String '拟发回复的帖子的ID号
Global Pouring_Text As String '拟回复的内容
Global Pouring_Title As String '拟回复帖所采用的标题
Global Pouring_Times As Integer '拟回帖次数
Global Reply_Page As String '回复成功后,服务器会自动跳转的页面
Sub Read_Info()
UserName = "XXXXXX"
Password = "XXXXXX"
Login_Page_Start = "http://club.business.sohu.com/"
Login_Page_Complete = "http://club.business.sohu.com/businessmain.php"
Pouring_Article_ID = "XXXXXX"
Jump_Page = "http://club.XXXXXXX.sohu.com/read-XXXX-" & Pouring_Article_ID & "-0-0.html"
Pouring_Title = "回复机器人工作中..."
Pouring_Text = "大家好,我是XXXX的回复机器人,请多关照!" & vbCrLf
Pouring_Times = 1 '输入数字太大的话,嘿嘿,后果自负哦
Reply_Page = "http://club.XXXXXXX.sohu.com/reply_art_submit.php"
End Sub
Sub Main()
Call Read_Info
Load Form_WebBrowser1
End Sub
Private Sub brwWebBrowser_DownloadComplete()
cboAddress.Text = brwWebBrowser.LocationURL '浏览器的地址栏显示为当前页面
Select Case cboAddress.Text
Case Login_Page_Start ' 当进入登录页面时执行以下程序
' 建议从财经站点登录,因为通行证的那个登录页面比较复杂
'将浏览器内的全部文本赋值为vDoc
Dim vDoc
Set vDoc = brwWebBrowser.Document
Dim i As Integer
Dim Form_ID As Integer
Form_ID = 0 '登录输入框在第1个表单内
For i = 0 To vDoc.Forms(Form_ID).length - 1 '搜索第1表单内所有内容
'找到名称为cn和pw的输入框,自动填入
'输入框的名称可以从Html的源代码上看到,
'由程序自行分析页,得到需要输入焦点的Object名称过于复杂,
'因此,以下为简便起见,均为提前手动查找Object标志
With vDoc.Forms(Form_ID)(i)
If .Name = "cn" Then .Value = UserName ' 填入用户名
If .Name = "pw" Then .Value = Password ' 填入密码
End With
Next i
' 查找提交表单的按钮,在财经论坛登录页面是一个图片链接
' 图片的属性和前面一样也是通过html源代码看出来的
For i = 0 To vDoc.All.length - 1 '搜索全部文档
With vDoc.All(i)
If UCase$(.tagName) = "INPUT" Then ' 查找Object属性为Input的可输入项
'如是,则判断其是否是制定图片链接,并可点击
If UCase$(.Type) = "IMAGE" And .src = "http://image.club.sohu.com/businessimages/but01.gif" Then
.Select '模拟选择图片
.Click '模拟鼠标单击
End If
End If
End With
Next i
Case Login_Page_Complete '如登录页完成后
'跳转到需回复帖子的页面
brwWebBrowser.Navigate Jump_Page
Case Jump_Page '如是需回复的帖子所在的页面,则开始自动回复处理
'以下的注释掉的代码,不看也罢
Dim p As String
p = Pouring_Text
'Static Count As Integer
'Static Last_Time
' Count = Count + 1
' If Count > Pouring_Times Then Exit Sub
' If Count = 1 Then
' Last_Time = Time
' p = Pouring_Text & "Content A here..."
' Else
' p = Pouring_Text & "Content B here..."
' Last_Time = Time
' End If
Set vDoc = brwWebBrowser.Document
For i = 0 To vDoc.All.length - 1 '搜索全部文档
With vDoc.All(i)
Select Case UCase(.tagName) '根据Object属性跳转
Case "TEXTAREA" '回复帖子用的TEXTAREA
.Value = p '输入回复内容
Case "INPUT" '查找Input项
If UCase(.Name) = "TITLE" Then .Value = Pouring_Title '回帖标题
'查找回帖用图片按钮
If UCase$(.Type) = "IMAGE" And .src = "http://image.club.sohu.com/indexpic/b19.gif" Then
.Select '模拟选择图片
.Click '模拟鼠标单击
End If
End Select
End With
Next i
Case Reply_Page '服务器提示回复完成
brwWebBrowser.Navigate Jump_Page '继续跳回原贴,循环
' Case "http://stop/" '停止执行标记
' Count = Pouring_Times + 1
Case Else 'Nothing to do
End Select
Me.Caption = brwWebBrowser.LocationName
End Sub
影响上面程序执行速度的最大因素是等待页面Load_Complete的时间,所以要加速装载,可以关闭页面中图片、动画之类的东西,通过操作注册表完成IE程序的Internet高级选项来实现,程序执行完毕后再恢复原值。
实验证明如此调整后,发帖速度可提高到140帖/分钟,在不对传输数据包进行低级处理的情况下,还是很惊人哦。(再说低级处理也太难啦,每次发帖Sohu都要校验PostKey,这个值的生成规律还不太清楚。)
|
|
|