vb中用webbrowser编程模拟浏览器自动访问某个网页中的链接
比如访问http://www.95557.com/svote.htm中的链接
我是指在事先不知道的情况下根据页面里的链接访问,怎么样才能获得页面里的链接呢

解决方案 »

  1.   

    将种子URL的Source得到再通过<A HREF= 与Space之间分离贝。
      

  2.   

    将种子URL的Source得到再通过<A HREF= 与Space之间分离贝。
      

  3.   

    用WebBrowser的Document属性访问HTML文档,用document.all.tags("a").item(index)访问第Index-1个链接,当然index也可以是链接的ID
      

  4.   

    控制网页的FORMS行为Private Sub Command2_Click()
        With WebBrowser1.Document.Forms(0)
            .c2.Checked = 1
            .r1(1).Checked = 1
        End With
    End Sub
    Private Sub Command2_Click()
        With WebBrowser1.Document.Forms(0)
            .d1.Options(1).Selected = 1
        End With
    End Subweb.Document.getElementsByName("D1").Item(0).selectedIndex = 1==============================================
    <input type="radio" value="n" checked name="notecome">普通
    <input type="radio" value="c" name="notecome">原创
    <input type="radio" value="z" name="notecome">转帖
    <input type="button" value="发送提交" name="button"比如一个网页里有如上代码
    我想选择原创
    webbrowser中怎么写
    Private Sub Command1_Click()
        WebBrowser1.Navigate "c:\ggg.html"
    End SubPrivate Sub Command2_Click()
        Dim x
        
        For Each x In WebBrowser1.Document.All("notecome")
            If x.Value = "c" Then
                x.Checked = True
            End If
        Next
    End Sub============================================================================================
    假设你的HTML代码如下:<html>
    <script>
      function abcd(){
        alert("haha");
        return false;
      }
    </script><body>
      <a id = 'xxx' href=# onclick="abcd()">ggggg</a>
    </body>
    </html>VB代码如下:
    Private Sub Command1_Click()
        WebBrowser1.Navigate "http://www.applevb.com/script_test.html"
    End SubPrivate Sub Command2_Click()
        Dim a, b
        Dim d As IHTMLDocument2
        
        For Each a In WebBrowser1.Document.All
            Debug.Print a.tagName
            If (a.tagName = "SCRIPT") Then        End If
            If (a.tagName = "A") Then
                If a.Id = "xxx" Then
                    a.FireEvent ("onclick")
                End If
            End If
        Next点击Command1浏览这个网页,点击Command2运行其中的脚本abcd。
    ==============================================怎么编程把用户名,密码提交到网页上的登录页?
    首先在程序中加入Webbrowser控件并加入引用 Microsoft HTML Object Library。
    假设你的HTML页面表单代码如下:
    <form method="POST" action="http://chen/dll/chat/chatmain.exe/RegUser">
      <p>请填写下面表单注册(*项为必添项)</p>
      <p>*姓名<input type="text" name="Name" size="20"></p>
      <p>*昵称<input type="text" name="NickName" size="20"></p>
      <p>电子邮件<input type="text" name="EMail" size="20"></p>
      <p>*密码<input type="text" name="Password" size="20"></p>
      <p><input type="submit" value="提交" name="B1"><input type="reset" value="全部重写" name="B2"></p>
    </form>
    注意其中元素的type、Name、value属性。然后VB中的代码如下:
    Private Sub Command1_Click()
        WebBrowser1.Navigate "http://chen/chat/newuser.htm"
    End SubPrivate Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
        Dim vDoc, vTag
        Dim i As Integer
          
        Set vDoc = WebBrowser1.Document
        List1.Clear
        For i = 0 To vDoc.All.length - 1
            If UCase(vDoc.All(i).tagName) = "INPUT" Then
                Set vTag = vDoc.All(i)
                If vTag.Type = "text" Or vTag.Type = "password" Then
                    List1.AddItem vTag.Name
                    Select Case vTag.Name
                        Case "Name"
                            vTag.Value = "IMGod"
                        Case "NickName"
                            vTag.Value = "IMGod"
                        Case "Password"
                            vTag.Value = "IMGodpass"
                        Case "EMail"
                            vTag.Value = "[email protected]"
                    End Select
                ElseIf vTag.Type = "submit" Then
                    vTag.Click
                End If
            End If
        Next i
    End Sub
    点击Command1就可以自动填表并提交了。 
    =====================================================================================
    调用forms下的Submit控件的Click事件,我会做,但我不想这么做.有没有办法直接调用类似于:web1.document.forms.submit,这句语句我怎么写都不成功
    是这个
    Webbrowser1.document.formName.submit()不能用,formname为form1所以我调用Webbrowser1.document.form1.submit
    出错类型:对象不支持该属性或方法,
    然后调用Webbrowser1.document.forms(0).submit()
    出错类型同上
    Private Sub Command1_Click()
        WebBrowser1.Navigate "http://localhost/webapplication2/MyLogonPage.aspx"
    End SubPrivate Sub Command2_Click()
        WebBrowser1.Document.All("Form1").submit
    End Sub
    <form name="form1" method="post" action="aa.asp">
    ......
    <input name="reset" type="reset" vlaue="reset" class="button">
    </form>
    我本想把reset的type改成submit 再提交,可出错,type是只读属性,不能修改,我只要有办法把这页面递交出去就行,当然,用POST也不行,参数太多,组合方式太多
    你用下面的代码试一下你的页面:
    Private Sub Command1_Click()
        WebBrowser1.Navigate "http://oakhome.xicp.net/webapplication2/MyLogonPage.aspx"
    End SubPrivate Sub Command2_Click()
        Dim x
        
        On Error Resume Next
        For Each x In WebBrowser1.Document.All
            List1.AddItem x.Name
        Next
    End Sub看看在List1里面列出来的页面元素的名字有没有Form1
    找到原因了,你的页面是这样的:
    <input language="javascript" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " name="Submit1" id="Submit1" type="submit" value="Submit" />
    你把name="Submit1" 改成name="Submit"肯定就不会成功了,很不幸的是我要提交的页面中就有这样一句,现在可有办法解决吗???=======================================================================
    使用WebBrowser_V1接受消息Private WithEvents WebMessage As WebBrowser_V1Private Sub Form_Load()
      Set WebMessage = WebBrowser1.Object
    End SubPrivate Sub WebMessage_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)'这里有Flags变量可以取得窗体应有的状态End Sub具体值需要你自己去试试看。对象浏览器里面没有=======================================================================================================通过下面的方法遍历页面中的IFrame:Sub EnumFrames(ByVal wb As WebBrowser)
    Dim pContainer As olelib.IOleContainer
    Dim pEnumerator As olelib.IEnumUnknown
    Dim pUnk As olelib.IUnknown
    Dim pBrowser As SHDocVw.IWebBrowser2   Set pContainer = wb.Object.Document
       
       ' Get an enumerator for the frames
       If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then
       
          Set pContainer = Nothing
          
          ' Enumerate and refresh all the frames
          Do While pEnumerator.Next(1, pUnk) = 0
             
             On Error Resume Next
             
             ' Clear errors
             Err.Clear
             
             ' Get the IWebBrowser2 interface
             Set pBrowser = pUnk
       
             If Err.Number = 0 Then
                Debug.Print "Frame: " & pBrowser.LocationURL
             End If
       
          Loop
          
          Set pEnumerator = Nothing
       
       End If
       
    End Sub
    =======================================================================================
      

  5.   

    我在网上找到使用rft控件保存webbrowse文本  txtHtml是RichTextBox
    txtHTML.Text = WebBrowser1.document.body.innerText
    'flag :rsftext 保存为txt文件,strtmp文件路径
    txtHTML.saveFile strtmp, rtfText
    将其name属性设置为webPrivate Sub Command1_Click()
        web.Navigate "www.google.com"
    End SubPrivate Sub web_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set doc = web.Document
    For Each i In doc.All
        msgbox typename(i)
        Text1.Text = Text1.text & vbclrf & i.innertext
    Next
    End sub===========================================================================================
    转载'引用 Microsoft HTML Object Library    Dim oDoc As HTMLDocument
        Dim oElement As Object
        Dim oTxtRgn As Object
        Dim sSelectedText As String
        
        Set oDoc = WebBrowser1.Document'获得文档对象
        Set oElement = oDoc.getElementById("T1")'获得ID="T1"的对象
        Set oTxtRgn = oDoc.selection.createRange'获得文档当前正选择的区域对象
       
        sSelectedText = oTxtRgn.Text'选择区域文本赋值    oElement.Focus'"T1"对象获得焦点    oElement.Select'全选对象"T1"    Debug.Print "你选择了文本:" & sSelectedText
    上面这段儿还附送了其他功能,呵呵。精简一下是这样:
        Dim oDoc As Object
        Dim oTxtRgn As Object
        Dim sSelectedHTML As String
        
        Set oDoc = WebBrowser1.Document '获得文档对象
        Set oTxtRgn = oDoc.selection.createRange '获得文档当前正选择的区域对象
       
        sSelectedHTML = oTxtRgn.htmlText '选择区域文本赋值    Text1.Text=sSelectedHTML '文本框显示抓取得HTML源码
        ......'或者继续分析源码==================================================================================================我用WebBrowser取得网页源码,直接运行正常,但在编译后出错
    Private Sub Command1_Click()
    WebBrowser1.Navigate "http://www.sdqx.gov.cn/sdcity.php"
    End SubPrivate Sub WebBrowser1_DownloadComplete()
    '页面下载完毕
    Dim doc, objhtml
    Set doc = WebBrowser1.DocumentSet objhtml = doc.body.createtextrange()
    If Not IsNull(objhtml) Then
    Text1.Text = objhtml.htmltext
    End IfEnd Sub我用WebBrowser取得网页源码,直接运行正常,但在编译后出错提示:实时错误“91”    Object 变量或 with 块变量没有设置
    可能是没有下载完所致,Private Sub WebBrowser1_DownloadComplete()
    if webbrowser.busy=false then
    Dim doc, objhtml
    Set doc = WebBrowser1.DocumentSet objhtml = doc.body.createtextrange()
    If Not IsNull(objhtml) Then
    Text1.Text = objhtml.htmltext
    End If
    end if
    End Sub你要得网页源码用 xmlhttp比较好先引用 msxmlDim x As New MSXML2.XMLHTTP
     x.open "get", "http://www.sina.com", False
     x.sendMsgBox StrConv(x.responseBody, vbUnicode)===============================================================================================
    我在网上找到使用rft控件保存webbrowse文本  txtHtml是RichTextBox
    txtHTML.Text = WebBrowser1.document.body.innerText
    'flag :rsftext 保存为txt文件,strtmp文件路径
    txtHTML.saveFile strtmp, rtfText
    =====================================================================================
    Private Sub WebBrowser1_DownloadComplete()
        Dim objHtml As Object
        '下载完成时状态栏显示“Link Finished”
        Set objHtml = Me.WebBrowser1.Document.Body.Createtextrange()
        If Not IsNull(objHtml) Then
            Text1.Text = objHtml.htmltext
        End If
    End Sub
    使用inet控件
    Source1 = Inet1.OpenURL("www.csdn.net")
    If Source1 <> "" Then
    RichTextBox1.Text = Source1
    Me.Inet1.Cancel
    Else
    Source = MsgBox("Source code is not available.", vbInformation, "Source Code")
    End IfPrivate Sub Command1_Click()
        Text1.Text = WebBrowser1.Document.body.innerHTML
    End Sub
    ==================================================================================
    加入timer,commandbutton,text
    private sub command1_click()
    webbrowser1.navigate http://www.sohu.com/
    timer1.enabled=true
    end subprivate sub timer1_timer()
    dim doc,objhtml as object
    dim i as integer
    dim strhtml as stringif not webbrowser1.busy then
    set doc=webbrowser1.document
    i=0
    set objhtml=doc.body.createtextrange()
    if not isnull(objhtml) then
    text1.text=objhtml.htmltext
    end if
    timer1.enabled=false
    end if
    end sub
    Dim doc, objhtml As Object
    If Not webbrowser1.Busy Then
             Set doc = webbrowser1.Document
             Set objhtml = doc.body.createtextrange()
             If Not IsNull(objhtml) Then
                text1.text=objhtml.htmltext
             End If
             Set doc = Nothing
             Set objhtml = NothingEnd If===================================================================================================
    或者试试用InternetReadFile,效果也可以:
    Option ExplicitPrivate Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
                        ByVal sAgent As String, ByVal lAccessType As Long, _
                        ByVal sProxyName As String, ByVal sProxyBypass As String, _
                        ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" ( _
                        ByVal hInternetSession As Long, ByVal sUrl As String, _
                        ByVal sHeaders As String, ByVal lHeadersLength As Long, _
                        ByVal lFlags As Long, ByVal lContext As Long) As Long
    Private Declare Function InternetReadFile Lib "wininet.dll" ( _
                        ByVal hFile As Long, ByVal sBuffer As String, _
                        ByVal lNumBytesToRead As Long, _
                        lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "wininet.dll" ( _
                        ByVal hInet As Long) As Integer
    Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
    Dim sPrivate Function GetUrlFile(stUrl As String) As String
        Dim lgInternet As Long, lgSession As Long
        Dim stBuf As String * 1024
        Dim inRes As Integer
        Dim lgRet As Long
        Dim stTotal As String
        stTotal = vbNullString
        lgSession = InternetOpen("VBTagEdit", 1, vbNullString, vbNullString, 0)
        If lgSession Then
            lgInternet = InternetOpenUrl(lgSession, stUrl, vbNullString, _
                                         0, INTERNET_FLAG_NO_CACHE_WRITE, 0)
            If lgInternet Then
                Do
                    inRes = InternetReadFile(lgInternet, stBuf, 1024, lgRet)
                    stTotal = stTotal & Mid$(stBuf, 1, lgRet)
                Loop While (lgRet <> 0)
            End If
            inRes = InternetCloseHandle(lgInternet)
        End If
        GetUrlFile = stTotal
    End FunctionPrivate Sub Command1_Click()
        Text1.Text = GetUrlFile("http://adsl.tsee.net/teleplay/view.asp?id=143")
    End Sub=====================================================================================================Set vDoc = WebBrowser1.Document
    '获取网页的源码
    For Each o In vDoc.All
       DoEvents
       htmlpage = htmlpage & o.innerHTML
    Next
    然后用写二进制文件的方法将htmlpage的内容写入到.html文件中如果这个网页中含有框架那么要对框加进行处理。=======================================================================================================================
      

  6.   

    转载看到很多关于WebBrowser控件禁止右键的提问,回复的方法很多,其中有提到使用微软提供的Webbrowser扩展COM服务器对象(WBCustomizer.dll),但是该方法在我们想使用Webbrowser编辑网页(Webbrowser1.Document.execCommand "editMode")的时候有很多弊端,比如不能显示选中的文本等。另有些方法也就不用一一列举了。这儿我想提到的是关于MSHTML.HTMLDocument引用Microsoft HTML OBject LibraryRem #窗体代码#Dim WithEvents M_Dom As MSHTML.HTMLDocument 
    Private Function M_Dom_oncontextmenu() As Boolean
            M_Dom_oncontextmenu = False
    End Function Private Sub Webbrowser1_DownloadComplete()
          Set M_Dom = Webbrowser1.Document
     End SubRem 好了,右键菜单没有了===============================================================================控件调用和获得收藏夹里面基本上用 specialfolder(6 ) 就可以得到收藏夹的路径, 然后你可以用dir去循环读入每个目录,然后dir里面的file, file的名字就是你要的收藏的名字, 路径可以自己根据从上面得到的路径去得到.
    如果你不用dir也可以用vb的dir控件.
    Private Type SHITEMID
        cb As Long
        abID As Byte
    End TypePublic Type ITEMIDLIST
        mkid As SHITEMID
    End Type
    Public Function SpecialFolder(ByRef CSIDL As Long) As String
        'locate the favorites folder
        Dim R As Long
        Dim sPath As String
        Dim IDL As ITEMIDLIST
        Const NOERROR = 0
        Const MAX_LENGTH = 260
        R = SHGetSpecialFolderLocation(MDIMain.hwnd, CSIDL, IDL)
        If R = NOERROR Then
            sPath = Space$(MAX_LENGTH)
            R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
            If R Then
                SpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)
            End If
        End If
    End Function
    ===================================================================================================
    全屏是的,webbrowser本生是一个控件, 你要它全屏,就是要它所在的窗体全屏, 可以用setwindowlong取消窗体的 title, 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 0) 隐藏tray,就是下边那个包含开始那一行. 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 9) 恢复. 够详细了吧.然后在form1.windowstate = 2 就可以了.==============================================================================================================
    选择网页上的内容。
    Private Sub Command1_Click()
    '请先选中一些内容
    Me.WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
    MsgBox Clipboard.GetText
    End Sub==============================================================================================================
    用IE来下载文件
    Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long
    Private Sub Command1_Click()
       
       Dim sDownload As String
       
       sDownload = StrConv(Text1.Text, vbUnicode)
       Call DoFileDownload(sDownload)
       
    End SubPrivate Sub Form_Load()
    Text1.Text = "http://www.chat.ru/~softdaily/fo-ag162.zip"
    Form1.Caption = "Audiograbber 1.62 Full"
    Text2.Text = "http://www6.50megs.com/audiograbber/demos/cr-ag161.zip"
    End Sub
    ================================================================================================================我要动态加载和删除WebBrowser控件应该怎么做?Private Sub Command1_Click()
       Form1.Controls.Add "shell.explorer.2", "NewWeb", Form1
        With Form1!NewWeb
            .Visible = True
            .Width = 10000
            .Height = 10000
            .Left = 0
            .Top = 0
            .Navigate2 "www.csdn.net"
        End With
    End SubPrivate Sub Command2_Click()
         Controls.Remove Form1!newweb
    End SubForm1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1
        With Form1!newweb(newweb.Count)
            .Visible = True
            .Width = 1000
            .Height = 1000
            .Left = newweb(newweb.Count - 1).Left + newweb(newweb.Count - 1).Width
            .Top = 0
            '.Navigate2 "www.csdn.net"
        End With
    为什么他说我
    Form1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1
    这一行错误13 类型不匹配?
    ps:我在form中已经有了一个newweb(0)控件先为一个WebBrowser
    Dim i As Integer
    Private Sub AddWeb_Click()
        For i = 1 To 10
            Load NewWeb(i)
            NewWeb(i).Top = i * 100
            NewWeb(i).Left = i * 100
            NewWeb(i).Visible = True
        Next i
    End SubPrivate Sub DelWeb_Click()
        For i = 1 To 10
            Unload NewWeb(i)
        Next i
    End Sub=============================================================================================================
    一个把页面保存为MHT(即MHTML)文件
    1、谢谢楼上几位大侠!我现在将 pcwak(书剑狂生[MS MVP]) 大侠提供的资料贴出来,以供大家参考:
     我终于找到一个把页面保存为MHT(即MHTML)文件的方法了!
    首先,在工程中必须要引用一个库:
    Library CDO
    D:\WINNT\System32\cdosys.dll
    Microsoft CDO for Windows 2000 Library
    其次,需要Stream对应的接口的支持,如果你一时找不到就使用支持这个的较新的ADO就行了,如
    Library ADODB
    D:\Program Files\Common Files\system\ado\msado15.dll
    Microsoft ActiveX Data Objects 2.5 Library
    代码如下,十分简单(同时由于流的特点,显示在实际应用中没必要象本例中那样把文件保存到磁盘上就可直接转换为字符串或字节数组什么的处理的。另,对于Microsoft CDO for Windows 2000 Library这个库,在WIN98中要怎么使用还没试过,感兴趣的朋友可以试试并跟帖,以丰富完善其内容:)Private Sub Command1_Click()
    ' Reference to Microsoft ActiveX Data Objects 2.5 Library
    ' Reference to Microsoft CDO for Windows 2000 Library
    Dim iMsg As New CDO.Message
    Dim iConf As New CDO.Configuration
    Dim objStream As ADODB.StreamWith iMsg
    .CreateMHTMLBody "http://www.163.com/";, , _
    "domain\username", _
    "password"
    Set objStream = .GetStream
    Call objStream.SaveToFile("f:\test.mht", adSaveCreateOverWrite)
    End With
    End Sub2、
    '首先加入对ADODB和CDO(Microsoft CDO for Windows 2000 Library,对应文件名为CDOSYS.dll)的引用
    Private Sub Command1_Click()
        Dim message As New CDO.message
        Dim Outstream As ADODB.Stream
        On Error GoTo myerr1
        Call message.CreateMHTMLBody("http://www.csdn.net", CDO.CdoMHTMLFlags.cdoSuppressNone, "", "")
        Set Outstream = message.GetStream
        Call Outstream.SaveToFile("c:\test.mht", ADODB.SaveOptionsEnum.adSaveCreateOverWrite)
        MsgBox "完成"
        
        Exit Sub
    myerr1:
        Set message = Nothing
        Set Outstream = Nothing
    End Sub=================================================================================================================
    请问高手们怎样在WebBrowser控件调用收藏夹和在收藏夹里添加收藏
    Option ExplicitPrivate Sub Command1_Click()
        Dim ObjSUH As New ShellUIHelper
        ObjSUH.AddFavorite "http://www.csdn.net", "CSDN"
        Set ObjSUH = Nothing
    End Sub=================================================================================================================