Excel与VBA - XmlHttp使用div

时间:2013-07-18 19:50:19

标签: vba excel-vba excel

我正在使用excel和VBA打开一个页面并提取一些信息并将其放入我的数据库中。经过一些研究,我发现打开IE显然需要更多时间,可以使用XmlHTTP来实现。我正在使用XmlHTTP打开另一个question中建议的网页。但是,在使用IE时,我能够浏览div标签。如何在XmlHTTP中完成相同的操作?

如果我使用IE打开页面,我正在做类似下面的操作来浏览多个div元素。

Set openedpage1 = iedoc1.getElementById("profile-experience").getElementsbyClassName("title")
For Each div In openedpage1
---------

但是,使用XmlHttp,我无法在下面执行此操作。

For Each div In html.getElementById("profile-experience").getElementsbyClassName("title")

我收到错误,因为对象不支持此属性或方法

3 个答案:

答案 0 :(得分:0)

请查看我发布的另一个问题的this answer,因为这与您正在寻找的内容相近。总之,您将:

  1. 创建Microsoft.xmlHTTP对象

  2. 使用xmlHTTP对象打开您的网址

  3. 将响应作为XML加载到DOMDOcument对象

  4. 从那里,您可以从XMLNodes

    获取一组DOMDocument,选择元素,属性等

答案 1 :(得分:0)

XMLHttp对象以responseText中的字符串形式返回页面内容。您需要解析此字符串以查找所需的信息。正则表达式是一种选择,但它会非常麻烦。

This page使用字符串函数(Mid,InStr)从html文本中提取信息。

有可能从已检索的HTML中创建一个DOMDocument(我相信它),但我没有追求这个。

答案 2 :(得分:0)

如上述答案所述,将.responseText放入HTMLDocument,然后使用该对象,例如。

Option Explicit
Public Sub test()
    Dim html As HTMLDocument
    Set html = New HTMLDocument

    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        .Open "GET", "http://www.someurl.com", False
        .send
        html.body.innerHTML = .responseText
    End With

    Dim aNodeList As Object, iItem As Long
    Set aNodeList = html.querySelectorAll("#profile-experience.title")
    With ActiveSheet
        For iItem = 0 To aNodeList.Length - 1
            .Cells(iItem + 1, 1) = aNodeList.item(iItem).innerText
            '.Cells(iItem + 1, 1) = aNodeList(iItem).innerText '<== or potentially this syntax
        Next iItem
    End With
End Sub

注意:

我从字面上将您的getElementById("profile-experience").getElementsbyClassName("title")转换为CSS selectorquerySelectorAll("#profile-experience.title"),所以假设您已正确完成此操作。