请登录[¤ 阳光论坛 ¤]参与讨论


阳光宝宝
90

 □ 主题: VB网络编程(webbrowser+Inet+抓包封包+经验)
 □ 内容: 1楼

      网络的重要性不用我说,所以关于网络的编程对我我们来说也是非常重要,非常实用的! 
       
       但是我在网络上却没有看到多少关于VB网络编程方面的知识,一方面是VB用的人比较少,不会用就说VB不好(个人认为学好VB以后C++、Java一看就会!);另一方面是大家不愿意公开这方面的知识,自己辛辛苦苦探索的,还得靠它吃饭,怎么可能轻易拿出来公布?但是社会要发展,人类要进步,为了让更多的人受益,为了让体现自己价值,我愿意分享自己对于网络编程的经验。我也是刚开始学,所以这篇文章难免有错误之处,而且认识也相对比较浅显,只是作为入门级的文章吧! 
       
       用VB操作网页,主要有两种方法:一是模拟操作,即自动控制。二是POST,也就是发送消息(数据包)。这两种方式涉及到:Webbrowser控件、Inet控件、XMLHTTP对象。其中,Webbrowser控件主要用来模拟操作,让机器自动完成点击、选中、填写等操作;Inet控件和XMLHTTP对象主要是用来POST,即发送数据包,在不加载网页的情况下直接与服务器交互。下面开始讲解它们的应用。注:我在这里仅仅讨论操作网页,像聊天、文件传输在这不作为重点,毕竟这些相对来说还是比较少用的。 
       
       webbrowser,这是一个比较基础的控件,关于它的学习资料,网上还是很多的。用它操作网页是一种看得见,摸得着的过程,基本的任务都能完成。经过半年的使用经验,总结一下它不能完成的任务:1.不能操作JS脚本。如果你操作的网页内容被放在了JS脚本里,那么就不要用这个控件了。2.不能点击Flash按钮。Flash按钮比在网页中较特殊,用webbrowser控件无法找到这个对象。我所遇到的就是这两条,当然肯定还有别的。下面通过一个万能代码来看一下这个控件: 
       
      For lngIndex= 1 To WebBrowser1.Document.All.Length - 1 
       
       If InStr(1, WebBrowser1.Document.All(lngIndex).outerhtml, "替换为你要查找的关键字") > 0 Then ''查找关键字 
       
       If UCase(WebBrowser1.Document.All(lngIndex).tagName) = "INPUT" Then ''如果点击是超链接 把INPUT换成A 
       
       '' WebBrowser1.Document.All(lngIndex).Click ''如果是模拟点击就用这个语句 
       
       WebBrowser1.Document.All(lngIndex).Checked = True ''如果是模拟选中复选框,就用这个语句 
       
       Exit For 
       
       End If 
       
       End If 
       
      Next 
       
      用这个代码,可以灵活的模拟:点击按钮、点击超链接、操作复选框、操作下拉式菜单、填写数据。这个代码大概的意思:最外层循环遍历整个网页中的标签对象,然后用第二个循环去匹配这个对象中是否有我们期望的关键字,如果有的话,再判断这个标签对象的类型,一般情况下,超链接是A,其他的均为INPUT,注意一下一定要大写,因为从webbrowser中获取的网页源码全是大写的,与真实源码有差别。在最里边也就是操作语句了,如果是文本框输入就写成WebBrowser1.Document.All(lngIndex).Text = “期望的字符串”。如果是想点击按钮或者超链接就用WebBrowser1.Document.All(lngIndex).Click。如果是选中复选框WebBrowser1.Document.All(lngIndex).Checked = True。如果是下拉式菜单WebBrowser1.Document.All(lngIndex).Value = “对应的值”。基本的操作就是这些,轻松胜任。当然,用这个万能代码是在迫不得已的情况下才用的。如果网页很简单,按钮,输入框等有ID,那么直接写WebBrowser1.Document.All(“按钮的ID”).Click就可以点击按钮了,其他同理,输入ID即可。 
       
       在实际使用中,我们会遇到一个非常头疼的问题:webbrowser操作网页必须等待网页加载完成,否则会找不到标签对象。网上比较流行的做法是用webbrowser的Busy方法等待网页加载完成,但是根本没有效果。在此我分享一下自己的经验,想想我们人是怎么判断网页是否加载完成的?因为出现了一些新的信息,因为有变化!我们当然也可以让程序这么去判断。我们可以在新网页中找一个固定存在的字符,用while循环不断获取webbrowser的网页源码,直到出现这个固定字符,我们就认为加载完成。例如,在目的网页里会出现123这个字符,那么: 
       
      While Instr(WebBrowser1.Document.All(1).outerhtml,”123”) =0 
       
       Doevents 
       
      Wnd 
       
      这样写可以很好的达到等待网页加载完成的目的。这里WebBrowser1.Document.All(1).outerhtml是webbrowser中所有的标签对象,基本上可以说是获取网页源码。如果用这个语句无法获取就用WebBrowser1.Document.Body.InnerHtml,最好是用第一个,第二个不保险。顺便提一下,WebBrowser1.Document.All(1).outerhtml是获取网页源码,如果我们不想要源码,而想要网页内容,即浏览器展示给我的文字,可以用:WebBrowser1.Document.body.innertext。 
       
       还有一个问题就是有些网站点击链接时会在新的窗口中打开,这时候webbrowser会调用IE浏览器,导致网页跳出程序,那么可以用下面的代码处理NewWindow2事件: 
       
      Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean) 
       
       Dim frmWB As Form1 
       
       Set frmWB = New Form1 
       
        
       
       frmWB.WebBrowser1.RegisterAsBrowser = True 
       
        
       
       Set ppDisp = frmWB.WebBrowser1.Object 
       
       frmWB.Visible = True 
       
       Unload Me 
       
      End Sub 
       
      注意这里的Form1是窗体名称,要根据你的实际情况修改。 
       
       另外,注意一下Silent属性,把它设为Ture,防止弹出一些脚本错误的提示。 
       
       好了,说到这这个控件也就没什么了。常用的都说了,一些注意的问题也说了,其他的就要靠大家自己努力了!多练!(参考资料:webbrowser控件属性、方法大全。) 
       
      
——
      
争分夺秒背单词 → pig  n.猪,小猪,野猪
 □ 发帖时间:2012-11-20|13:30:19 |回复|返回|

 页次:1/1页 每页10  本主题贴数0 分页: 1


你还没有登录论坛,所以不能发表你的意见。你可以选择:

1、我已注册,我要

2、我还没注册,我要

3、太麻烦了,我还是

Go Top

Copyright by(C)2003-2015 http://abc.sy578.cn