VB操作网页代码_第1页
VB操作网页代码_第2页
VB操作网页代码_第3页
VB操作网页代码_第4页
VB操作网页代码_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 防止新窗口里头翻开网页代码1:Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)Dim frm As Form1Set frm = New Form1frm.Visible = TrueSet ppDisp = frm.WebBrowser1.objectEnd Sub代码2:有这段代码, 有许多网页会出错,经常提示脚本错误,可以用silent属性为True来屏蔽,不过也有些缺乏!Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel

2、 As Boolean)Cancel = TrueWebBrowser1.Navigate2 WebBrowser1.Document.activeElement.hrefEnd Sub代码3:Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)On Error Resume NextDim frmWB As Form1Set frmWB = New Form1frmWB.WebBrowser1.RegisterAsBrowser = TrueSet ppDisp = frmWB.WebBrowser1.

3、objectfrmWB.Visible = TruefrmWB.Top = Form1.TopfrmWB.Left = Form1.LeftfrmWB.Width = Form1.WidthfrmWB.Height = Form1.HeightEnd Sub功能差不多,任选一个。2、 去掉滚动条Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)WebBrowser1.Document.Body.Scroll = "no"End Sub实际上上面的效果不咋地,如果懂得H

4、TML知识, 你可以在读取网页的时候,读取HTML源码, 查找替换, 再写入只需在 <body> </body> 之间插入代码: <body style= "overflow-x:hidden;overflow-y:hidden "> 即可。其中x表示水平滚动条,将其改为y的话就可以隐藏垂直滚动条。当然也有其他方法, 比方修改网页的尺寸呀? 有的时候局部元素的居中改为左对齐也能有效果将WebBrower放在PictureBox控件中,用PictureBox的边框挡住WebBrower的边框。例如,将WebBrowser1放大点,将Pict

5、ureBox变小点.PictureBox的appearance设置为0-flat,呵呵,OK3、 禁止鼠标右键Private Function M_Dom_oncontextmenu() As BooleanWebbrowser1.Document.oncontextmenu = FalseEnd Function'引用Microsoft HTML OBject LibraryDim WithEvents M_Dom As MSHTML.HTMLDocumentPrivate Function M_Dom_oncontextmenu() As BooleanM_Dom_oncontex

6、tmenu = FalseEnd FunctionPrivate Sub Webbrowser1_DownloadComplete()Set M_Dom = Webbrowser1.DocumentEnd Sub4、 如何获得网页的内容先给个例子:innerHTML:设置或获取位于对象起始和结束标签内的 HTML测试一下:<div id="d" style="background-color:#ff9966">这是一个层</div><input type="button" value="获取in

7、nerHTML" onclick="getinnerHTML()"><input type="button" value="设置innerHTML" onclick="setinnerHTML()"><script language="javascript">function getinnerHTML()alert(document.getElementById("d").innerHTML)function setinnerHTML(

8、)document.getElementById("d").innerHTML="<div id='d' style='background-color:#449966'>这是一个层,嘿嘿</div>"</script>5、 多框架框架页面访问'下面两句可以访问到多框架内容'.Document.ParentWindow.Frames.Length'.Document.ParentWindow.Frames(1).Document.all.tags("a&

9、quot;)'等待多框架网页全部加载完毕, 否那么出错 While .Busy Or .ReadyState <> 4 Or .Document.ParentWindow.Frames.Length = 0 DoEvents Wend6、 获得浏览器信息Private Sub Command1_Click() WebBrowser1.Navigate " :/ applevb " End Sub Private Sub Command2_Click() Dim oWindow Dim oNav Set oWindow = WebBrowser1.Docu

10、ment.parentWindow Set oNav = oWindow.navigator Debug.Print oNav.userAgent Set oWindow = Nothing Set oNav = Nothing End Sub7、 弹出Webbrowser消息窗口Dim oWindowSet oWindow = WebBrowser1.Document.parentWindowoWindow.confirm "abcd"VB调用webbrowser技巧集28、 向Webbrowser中写入HTML内容的几种方法向Webbrowser中写入HTML内容的几种

11、方法首先在Form_Load中参加WebBrowser1.Navigate "about:blank"确保Webbrowser1可用方法1:Dim s As StringDim stream As IStreams = ""s = s + ""s = s + ""s = s + "hello world"s = s + ""s = s + "WebBrowser1.Document.Write s方法2:Dim oSet o = WebBrowser1.Docume

12、nt.selection.createrangeDebug.Print oIf (Not o Is Nothing) Theno.pasteHTML "哈哈"Set o = NothingEnd If方法3:'插入文本框Dim oSet o = WebBrowser1.Document.selection.createrangeo.execCommand "InsertTextArea", False, "xxx"9、 控制页面滚动WebBrowser1.Document.parentwindow.scrollby 0, 30

13、10、 判断页面是否可以前进后退Private Sub Command1_Click()WebBrowser1.GoForwardEnd SubPrivate Sub Command2_Click()WebBrowser1.GoBackEnd SubPrivate Sub Form_Load()WebBrowser1.Navigate " :/ applevb "End SubPrivate Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)If (Comman

14、d = CSC_NAVIGATEBACK) ThenCommand2.Enabled = EnableEnd IfIf (Command = CSC_NAVIGATEFORWARD) ThenCommand1.Enabled = EnableEnd IfEnd Sub11、 如何获得网页中被选中局部的HTMLPrivate Sub Command1_Click()Dim objSelectionDim objTxtRangeSet objSelection = WebBrowser1.Document.selectionIf Not (objSelection Is Nothing) Then

15、Set objTxtRange = objSelection.createRangeIf Not (objTxtRange Is Nothing) ThenDebug.Print objTxtRange.htmlTextSet objTxtRange = NothingEnd IfSet objSelection = NothingEnd IfEnd Sub12、 Navigate的参数调用请问:在WebBrwoser控件里提供的Navigate或者Navigate2方法中提供了传递数据的参数,调用方式为:WebBrowser1.Navigate2(URL,Flags,TargetFrameN

16、ame,PostData,Headers)其中PostData参数就是一个提交参数字符串,例如"name=aaa&password=123",但问题是为什么这个方法并不是有效的,效劳器端不能取得数据?如果这个方法是有效的话就不需要用一段html代码模拟这种调用了。下面代码能检测出程序post出去的消息Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData A

17、s Variant, Headers As Variant, Cancel As Boolean)MsgBox PostDataEnd Sub13、 WebBrowser的方法、属性、事件WebBrowser的8个方法和13个属性,以及它们的功能:方法 说明GoBack 相当于IE的“后退按钮,使你在当前历史列表中后退一项GoForward 相当于IE的“前进按钮,使你在当前历史列表中前进一项GoHome 相当于IE的“主页按钮,连接用户默认的主页GoSearch 相当于IE的“搜索按钮,连接用户默认的搜索页面Navigate 连接到指定的URLRefresh 刷新当前页面Refresh2 同

18、上,只是可以指定刷新级别,所指定的刷新级别的值来自RefreshConstants枚举表,该表定义在ExDisp.h中,可以指定的不同值如下:REFRESH_NORMAL 执行简单的刷新,不将 pragma: no-cache头发送给效劳器REFRESH_IFEXPIRED 只有在网页过期后才进行简单的刷新REFRESH_CONTINUE 仅作内部使用。在MSDN里写着DO NOT USE! 请勿使用REFRESH_COMPLETELY 将包含pragma: no-cache头的请求发送到效劳器Stop 相当于IE的“停止按钮,停止当前页面及其内容的载入属性 说明Application 如果该

19、对象有效,那么返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch)。如果在宿主对象中自动化对象无效,这个程序将返回WebBrowser控件的自动化对象Parent 返回WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口Container 返回WebBrowser控件容器的自动化对象。通常该值与Parent属性返回的值相同Document 为活动的文档返回自动化对象。如果HTML当前正被显示在WebBrowser中,那么Document属性提供对DHTML Object Model的访问途径TopLevelContainer 返回一个Bool

20、ean值,说明IE是否是WebBrowser控件顶层容器,是就返回trueType 返回已被WebBrowser控件加载的对象的类型。例如:如果加载.doc文件,就会返回Microsoft Word DocumentLeft 返回或设置WebBrowser控件窗口的内部左边与容器窗口左边的距离Top 返回或设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离Width 返回或设置WebBrowser窗口的宽度,以像素为单位Height 返回或设置WebBrowser窗口的高度,以像素为单位LocationName 返回一个字符串,该字符串包含着WebBrowser当前显示的资源的名称

21、,如果资源是网页就是网页的标题;如果是文件或文件夹,就是文件或文件夹的名称LocationURL 返回WebBrowser当前正在显示的资源的URLBusy 返回一个Boolean值,说明WebBrowser当前是否正在加载URL,如果返回true就可以使用stop方法来撤销正在执行的访问操作事件 说明Private Events DescriptionBeforeNavigate2 导航发生前激发,刷新时不激发CommandStateChange 当命令的激活状态改变时激发。它说明何时激活或关闭Back和Forward菜单项或按钮DocumentComplete 当整个文档完成是激发,刷新页

22、面不激发DownloadBegin 当某项下载操作已经开始后激发,刷新也可激发此事件DownloadComplete 当某项下载操作已经完成后激发,刷新也可激发此事件NavigateComplete2 导航完成后激发,刷新时不激发NewWindow2 在创立新窗口以前激发OnFullScreen 当FullScreen属性改变时激发。该事件采用VARIENT_BOOL的一个输入参数来指示IE是全屏显示方式(VARIENT_TRUE)还是普通显示方式(VARIENT_FALSE)OnMenuBar 改变MenuBar的属性时激发,标示参数是VARIENT_BOOL类型的。VARIANT_TRUE

23、是可见,VARIANT_ FALSE是隐藏OnQuit 无论是用户关闭浏览器还是开发者调用Quit方法,当IE退出时就会激发OnStatusBar 与OnMenuBar调用方法相同,标示状态栏是否可见。OnToolBar 调用方法同上,标示工具栏是否可见。OnVisible 控制窗口的可见或隐藏,也使用一个VARIENT_BOOL类型的参数StatusTextChange 如果要改变状态栏中的文字,这个事件就会被激发,但它并不理会程序是否有状态栏TitleChange Title有效或改变时激发14、 本地文件收藏夹操作根本上用 specialfolder(6 ) 就可以得到收藏夹的路径, 然

24、后你可以用dir去循环读入每个目录,然后dir里面的file, file的名字就是你要的收藏的名字, 路径可以自己根据从上面得到的路径去得到.如果你不用dir也可以用vb的dir控件.Private Type SHITEMIDcb As LongabID As ByteEnd TypePublic Type ITEMIDLISTmkid As SHITEMIDEnd TypePublic Function SpecialFolder(ByRef CSIDL As Long) As Stringlocate the favorites folderDim R As LongDim sPath A

25、s StringDim IDL As ITEMIDLISTConst NOERROR = 0Const MAX_LENGTH = 260R = SHGetSpecialFolderLocation(MDIMain.hwnd, CSIDL, IDL)If R = NOERROR ThensPath = Space$(MAX_LENGTH)R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)If R ThenSpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)End IfEnd

26、 IfEnd Function15、 让Webbrowser全屏是的,webbrowser本生是一个控件, 你要它全屏,就是要它所在的窗体全屏, 可以用setwindowlong取消窗体的 title, 用Call ShowWindow(FindWindow(Shell_traywnd, ), 0) 隐藏tray,就是下边那个包含开始那一行. 用Call ShowWindow(FindWindow(Shell_traywnd, ), 9) 恢复. 够详细了吧.然后在form1.windowstate = 2 就可以了.16、 选择网页上的内容Private Sub Command1_Click

27、()请先选中一些内容Me.WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULTMsgBox Clipboard.GetTextEnd Sub17、 用IE来下载文件Private Declare Function DoFileDownload Lib shdocvw.dll (ByVal lpszFile As String) As LongPrivate Sub Command1_Click()Dim sDownload As StringsDownload = StrConv(Text1.Text, vbUnicode)Call

28、 DoFileDownload(sDownload)End Sub保存webbrowser中的HTML内容Dim oPF As IPersistFileSet oPF = WebBrowser1.DocumentoPF.Save "TheFileNameHere.htm", FalseWebBrowser1.ExecWB怎么用 下面是我测试的参数WB.ExecWB(4,1)4,1 保存网页4,2 保存网页(可以重新命名)6,1 直接打印6,2 直接打印7,1 打印预览7,2 打印预览8,1 选择参数8,2 选择参数10,1 查看页面属性10,2 查看页面属性17,1 全选1

29、7,2 全选22,1 重新载入当前页22,2 重新载入当前页18、 Webbrowser确定窗口对话框某些网页出于各种考虑会弹出对话框要求信息确认,往往会中断我们的webbrowser过程,可以使用如下方法:1.参加Microsoft Html Object2.参加语句Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)Dim obj As HTMLDocumentSet obj = pDisp.Documentobj.parentWindow.execScript "func

30、tion showModalDialog()return;" '对showModalDialog引起的对话框进行确定End Sub而confirm引发的对话确定框可用confirm替换showModalDialog即可,Alert等同理WebBrowser取得网页源码Private Sub Command1_Click()WebBrowser1.Navigate " :/ /sdcity.php"End SubPrivate Sub WebBrowser1_DownloadComplete()'页面下载完毕Dim doc, obj

31、htmlSet doc = WebBrowser1.DocumentSet objhtml = doc.body.createtextrange()If Not IsNull(objhtml) ThenText1.Text = objhtml.htmltextEnd IfEnd Sub19、 取得源码调试正常运行错误我用WebBrowser取得网页源码,直接运行正常,但在编译后出错提示:实时错误“91 Object 变量或 with 块变量没有设置可能是没有下载完所致,Private Sub WebBrowser1_DownloadComplete()if webbrowser.busy=fa

32、lse thenDim doc, objhtmlSet doc = WebBrowser1.DocumentSet objhtml = doc.body.createtextrange()If Not IsNull(objhtml) ThenText1.Text = objhtml.htmltextEnd Ifend ifEnd Sub20、 页面元素操作1.根据标记名(tagname)的和元素名name来找到元素, 2.给元素赋值或是执行相关的事件. 例0: 查看网页元素 dim a for each a in wbr.document.all text1.text=text1.text &

33、amp; typename(a) & vbcrlf next例1: 给username文本框内填充内容: Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim doc Dim tg Set doc = WebBrowser1.Document For i = 0 To doc.All.length - 1 If (LCase(doc.All(i).tagname) = "input" Then if (LCase(doc.All(i).name) = &

34、quot;username" then Set tg = doc.All(i) tg.value=text1.text end if End If Next i End Sub 例2: 找到提交按钮并点击 Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) Dim doc Dim tg Set doc = WebBrowser1.Document For i = 0 To doc.All.length - 1 If (LCase(doc.All(i).tagname) = &q

35、uot;input" Then if (LCase(doc.All(i).type) = "submit" then Set tg = doc.All(i) tg.click end if End If Next i End Sub上面在MSDN2找到个答案还没试.IFRAME内的网页的方法不同,可能要用到窗口.试验后再说吧.例3: 难度的INPUT onclick="this.disabled=true;this.value='登录中请稍候'document.form1.submit();" type=submit value

36、=" 登 录 "For i = 0 To vDoc.All.length - 1 用 i 来判断submit 为第几个,再点击它例4: 模拟鼠标点击来点击按钮Private Declare Function GetMessageExtraInfo Lib "user32" () As LongPrivate Declare Sub mouse_event Lib "user32" _ (ByVal dwFlags As Long, _ ByVal dx As Long, _ ByVal dy As Long, _ ByVal cBut

37、tons As Long, _ ByVal dwExtraInfo As Long)Private Const MOUSEEVENTF_LEFTDOWN As Long = &H2Private Const MOUSEEVENTF_LEFTUP As Long = &H4sub clk()'至于按钮的坐标值就是x,y,这个你得自己找了,因为窗口放在不同的位置,坐标是不一样的,你可以用getcursorpos取得,'不过,就算你点了,又有什么用呢?点完了还是要验证码的!mouse_event MOUSEEVENTF_LEFTDOWN, x, y, 0, GetMe

38、ssageExtraInfomouse_event MOUSEEVENTF_LEFTUP, x, y, 0, GetMessageExtraInfoend sub21、 网页按钮的终极控制'一般来说,最简单最直接的操作网页表单提交方法就是WebBrowser1.Document.All("Namd").Value="xxxx" '填表WebBrowser1.Document.All("DengLu").Click '按钮点击'不过此方法需要知道该表单的各个元素的ID.一般来说,普通的网页都能直接从网页源

39、文件中找到这些东西.'假设整个表单都没能在源文件中找到的,那可以用 Text1 = WebBrowser1.Document.getElementById("BiaoID").innerHTML '"BiaoID"为表单所在表格的ID'这样Text1显示出来的就是你所要的表单的代码了.'不过即使是得到隐藏的代码了,还是有可能碰到没ID没NAME没类型的按钮,这怎么办呢?'不怕,通用方法来了.'没ID我们就给它个ID嘛.'在DocumentComplete里网页完全翻开后'处理网页源码,给你要

40、点击的按钮起个名(加上ID)'例如: Text1 = <BUTTON style='PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN-LEFT: 3px; LINE-HEIGHT: 100%; PADDING-TOP: 2px; HEIGHT: 20px' onclick=javascript:btnSeedFetcherClick.call(this)>确定</BUTTON>'将其变为: Text1 = <BUTTON ID=abc style=&

41、#39;PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN-LEFT: 3px; LINE-HEIGHT: 100%; PADDING-TOP: 2px; HEIGHT: 20px' onclick=javascript:btnSeedFetcherClick.call(this)>确定</BUTTON>'然后用 WebBrowser1.Document.body.innerHTML = Text1.Text '将处理完的网页装入WebBrowser1'然后就可以

42、用回一开始说的最简单的方法来点击了 WebBrowser1.Document.All("abc").Click '按钮点击'怎么样,是不是很爽丫,这样就不用去思考还有没什么条件可以来定位这个按钮然后再点击了.'当然,还有中方法是: Dim OButton OButton = WebB.Document.getElementsByTagName("BUTTON") OButton.Click '这样就点击了前边例子中的那个按钮了.'这方法通用性也是很强,自己研磨一下你就能运用自如了.22、执行网页中的脚本Functi

43、on js(scripts) On Error GoTo 1 If scripts = "" Then Exit FunctionSet document = WebBrowser1.document document.parentWindow.execScript scripts, "javascript"Exit Function1 MsgBox "运行js脚本时发生错误!"End Functionjavascript:function findNode(findString,obj)var findId=true;var fin

44、dStrings=findString.split('');for(var i=0;i<obj.childNodes.length;i+)findId=true;if(obj.childNodes.length>0)var objs=findNode(findString,obj.childNodesi);if(objs!=null)return objs;for(var k=0;k<findStrings.length;k+)var temp=findStringsk.split('=');eval("var temp2=obj.childNodesi."+temp0)if(temp2!=temp1)findId=f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论