科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件vb.net实现自动发贴

vb.net实现自动发贴

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

vb.net实现自动发贴

作者:newhong 来源:赛迪网技术社区 2007年11月27日

关键字: 自动发贴

  • 评论
  • 分享微博
  • 分享邮件
用AxWebBrowser控件实现自动发帖 BM@PS^&eV@  
rZL:&jL  
  I i8X& Y@  
   AxWebBrowser控件即VB6中的WebBrowser控件。 v>E!/ZjHQ  
   使用时先添加对AxWebBrowser控件和MSHTML的引用。 FOc^)"-  
  先Navigate到指定网址。然后用以下代码等待网页加载完毕: Do While brow.Busy x <a 4O#mH  
  Application.DoEvents() ;Zk Q8_  
Loop d*e) "FR@  
然后调用发帖过程。 Zbu-C}  
npzbBaz4Vz  
EHfa?^N  
Public Sub fill() yBWYojW  
  On Error Resume Next )N`;j_yA  
  Do While brow.Busy V9Tiv  
  Application.DoEvents() L"wzHUMr  
  Loop *Fto C  
f,DcsKU?  
  Dim webDoc As Object = brow.Document.all X*tk;u652  
  Dim webTag As Object a,8'^G(  
  Dim lengthTag As Integer = webDoc.length - 1 $P=cUVB  
Mi,dyZ5   
  For countTag As Integer= 0 To lengthTag #2w:wFv  
  webTag = webDoc.item(countTag) oP,9/34a  
  Select Case Strings.LCase(webDoc.item(countTag).tagname) )Exe Gc)  
  Case "textarea"     '网页中的文本框 8B-/h%*  
  Select Case webTag.name _\K\sQ\2  
  Case "body"   '"body"来自网页源代码,不同网站很可能不同,你根据实际修改。下同。 PwBT~E%T2]  
  webTag.value = strBody   '这是预先定义的值,下同。 2E\|nb|THi  
         End Select 4N8W:B  
ypKW1*u  
  Case "select"       '网页中的下拉选择框 v*$S r-mR  
  Select Case webTag.name $cw=@25g_u  
  Case "month"   '选择月份,这里略去年、日的选择,因为原理相同。 Glgzv"OIp  
  webTag.all.item(1).selected = True  '选择第一个值 %wu*E[J  
         End Select X QTXb{5)  
W$[')"Wr  
       Case "input"  '网页中的输入框 CdGtsSc3  
  Select Case Strings.LCase(webTag.type) C`M:fi  
  Case "text"     '文本 /8bH=Fh  
  Select Case webTag.name -Az$'Q7  
  Case "name", "userid", "nickname" '用户名 #:WC WhY>  
  webTag.value = strName *;NW_-Nc  
              Case "subject" '标题 5}OXUV  
  webTag.value = strSubject 8yIA1eh  
  Case "regid" '注册码 Mj33m @  
  webTag.value = strRegid e UN$5 i  
  Case "username", "realname" L|;o|{8n  
  webTag.value = strUsername RMu+v>;j  
  Case "cardnumber" .,l}WD^  
  webTag.value = strCardNumber g\7Z  
  Case "homephone" >U8 4~B-m  
  webTag.value = strHomephone '电话号 zE@}|{x[  
  Case "url_title" '链接名称 3J;|7mD  
  webTag.value = urlTitle 8M<y+ f  
  Case "url"  '链接 I,[>IeEZ  
  webTag.value = url v2l "@Zc  
  Case "email" 'email地址 aJNOH C&(W  
  webTag.value = email |Y,@L_:h  
  Case "img"  '图片   g~uJ(oOa9  
  webTag.value = img b)C|l "PQ  
  Case "midi"  '音乐 R`B]=l)  
  webTag.value = midi }Ph|J '  
  Case "year"  '年 :]LY.Un~  
  webTag.value = strYear j<B/+  
  Case "prompt" '找回密码提示问题 a5:K0E'a[  
  webTag.value = strPrompt 9ndITxm  
  Case "answer" '找回密码答案 ?Dl9/j  
  webTag.value = strAnswer ce GIV  
  End Select g\ r I  
  Case "password"  '密码 9d P?]&2  
  Select Case webTag.name 4D8q(/.E  
  Case "passwd", "password", "confirm", "repasswd" '密码,确认密码 7U };W{r  
  webTag.value = strPass k%$GApI2  
  End Select b\A-(6m  
          Case "checkbox"  '单选框 8>G "  
  Select Case webTag.name ~Sq!m  
  Case "emailme"  'email通知我 E .<F'4  
  webTag.checked = True   @sR;l 5i.  
  End Select CunqDpE|  
JEM$~}  
  End Select x3`3;K.B  
?.OQn}4/!  
     End Select A[Wll`ny  
   Next Yxe fw/  
0N]gUeg<  
  brow.Document.forms(0).submit()  '许多网页表单,这一句简单代码即实现自动提交 "{adPu4p  
~}O|WDI0p*  
End Sub q:.pA-F  
"qMF;~/z  
 72|^Rl!  
于是,主过程是这样: i,k}ZOL:  
E>[:`~R  
Public Sub autoAdd() CIFy.Aj  
  brow.Silent = True '不弹出窗口 PZH]yf  
  brow.Navigate("http://sunhai.tianyablog.com") '打开指定页 mA)" S \-  
  Do While formBrowNetsh.brow.Busy  '等待网页加载完毕 %MP +1ec  
  Application.DoEvents() a*XVI7eHH  
  Loop 7 k*e  
  Call fill() ^|L.,v~eh  
End Sub BQ|/ rsJ  
GUZP:h (  
  以上代码可实现可视化自动注册和发帖。 +FU'}ysKy  
   还有几个问题有待解决: '\u=.B?H  
   一. 有的网站要填上识别码数字才能注册或发言,如何用程序来实现自动识别识别码图片上的数字? )%)>>o]BRD  
   二. 有的网站一进去就会跳出一个欢迎对话框,程序的运行就被暂停。 I!2K\VnO'  
   三. 对于自动注册和发言来说,加载较慢的图片、Flash、音乐等并不是必需的。 >XNt*1y  
s#>u1!o  
   e> j{  
  用HttpWebRequest类实现自动发帖 2wp>cW*:  
gl-pwi  
  用HttpWebRequest类实现自动发帖就简单多了。 S,~X}V  
  我们始终不能忘记,最好的教程是MSDN,在Microsoft Visual Studio .NET 2003“搜索”中敲入HttpWebRequest,抄来一些东东(事实上许多教程书籍都是从MSDN上抄的): HX9NAMI2  
   命名空间: System.Net ?Ng*-1$hY  
   HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。 W'ob/:y:  
   不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法初始化 HttpWebRequest 的一个新实例。如果 URI 的方案是 http:// 或 https:// ,则 Create 将返回 HttpWebRequest 实例。 AGooLx~TZ  
   GetResponse 方法向 RequestUri 属性中指定的 Internet 资源发出同步请求并返回包含该响应的 HttpWebResponse 实例。可以使用 BeginGetResponse 和 EndGetResponse 方法对 Internet 资源发出异步请求。 F'f UD\m  
   当要向 Internet 资源发送数据时, GetRequestStream 方法返回用于发送数据的 Stream 实例。  BeginGetRequestStream 和 EndGetRequestStream 方法提供对发送数据流的异步访问。   q3k#x46dn  
   如果在访问 Internet 资源时发生错误,则 HttpWebRequest 类将引发 WebException 。 WebException.Status 属性是 WebExceptionStatus 值之一,它指示错误源。当 WebException.Status 为 WebExceptionStatus.ProtocolError 时, Response 属性包含从 Internet 资源接收的 HttpWebResponse 。 s?fe9q  
   o8P7RA4o  
re5, Ev  
Shared Sub postData() h\QYSO,_2  
  Dim httpUrl As New System.Uri("http://sunhai.tianyablog.com?" & "name=yourName&pass=yourPass&cardnumber=yourCardNumber") K9ev=b  
  Dim req As HttpWebRequest "aw<M=  
  'req.Timeout = 10000 '设置超时值10秒 YVw"'?L\  
  req = CType(WebRequest.Create(httpUrl2), HttpWebRequest)  7ojT,s  
  req.Method = "POST" /RdwLH  
  req.ContentType = "application/x-www-form-urlencoded" *2-h$ G  
  Dim bytesData() As Byte =   System.Text.Encoding.ASCII.GetBytes(""name=yourName&pass= yourPass&cardnumber=yourCardNumber") s2Hd*Uq  
  req.ContentLength = bytesData.Length @w=4O\UMn  
  Dim postStream As Stream = req.GetRequestStream() ^`"p51"l  
  postStream.Write(bytesData, 0, bytesData.Length)   '以上向服务器post信息。 Cu}W$7$Nl  
  Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse) '以下获取服务器返回信息 VLW1mf  
  Dim reader As StreamReader = _ 7(t*5.Y  
  New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312")) sX|Ww5"l  
  Dim respHTML As String = reader.ReadToEnd() 5x.u1J>%  
  MsgBox(respHTML)  '这就是向网络服务器post后返回的信息 |>KT<Y_[p  
  MsgBox(res.StatusCode.ToString)  '向网络服务器post后返回的状态码 a]s-}1>  
  res.Close() '关闭 :IicMC]:,  
4uMN|(v  
End Sub yb)%Y2_x7  
,})*OB\-H  
n!iN @  
  用AxWebBrowser控件实现自动发帖留有三个问题,用HttpWebRequest类来实现,后二个问题都不复存在。而且,用HttpWebRequest类来实现的速度要快得多。但是,同样的? 1.B$|i*Sr;  
  有的网站要填上识别码数字才能注册或发言,如何用程序来实现自动识别识别码图片上的数字? I gJ09Z|e  
QUx k20  
  我们在主过程里加上线程,因为我们以后要用多线程发帖啊。多线程在VB6中不好实现,在vb.net中却是轻而易举的事情。 5(F81$!G  
  FH"HjA1K  
5CIpB,gv  
Dim threadAdd As System.Threading.Thread '定义线程  `?*' v}]  
Public Sub threadAutoAdd() }fKO*hgj,R  
  threadAdd= New System.Threading.Thread(AddressOf postData)  '创建线程实例 GBH_A !:R  
  threadNetsh.Start()  '开始线程 2J yduU<  
  '别忘了在Sub postData()的最后加上threadAutoAdd.Abort()来关闭线程 ,cn @Qh  
  '或者在这里加上判断Sub postData()完毕的代码,如果完毕就关闭线程 Q  *bx  
End Sub Ow<1FCJ
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
      邮件订阅

      如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

      重磅专题
      往期文章
      最新文章