文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
文本框中光标位置的获得
用VB导入导出你的IE收藏夹
VB应用程序访问SQL Server方法探讨
VB访问SQL Server数据库技术全揭密
自动上网抓数据的机器人
自己的IE——用VB制作浏览器
VB中如何保存Webbrowser中的整个页面..
在VB中该如何控制其它程序的弹出窗口..
保存webbrowser中的HTML内容
破译动网验证码的简单方法
轻松获取QQ密码
VB.NET获取硬盘序列号的方法
WEBBROWSER 技巧一(收藏)
VB自动登陆网络站点详解(二):Inet..
获取webbrowser控件网页的源码
WebBrowser控件说明
关于用VB做更漂亮的窗体的思考
VB中访问存储过程的几种办法
VB6中改变屏幕的分辨率和刷新频率
VB编写一个能显示百分比的自定义进度..
公农历转换VB类
VB.NET窗口渐淡关闭
使用VB实现邮箱自动注册(二):修改..
VB.NET轻松实现任务栏程序
VB.NET启动外部程序
利用vb实现图片上传
VB实现局域网内的文件传输
VB 一个Function传回多个值
在VB中实现多线程
VB 手机号码编码程序


技术教程 -> VB教程 ->  
VB实现自动登录论坛并回帖
来源:转载   人气:1014   录入时间: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,这个值的生成规律还不太清楚。)
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987