Excel with VBA - XmlHttp to use div



我使用excel和VBA打开一个页面,提取一些信息并将其放入数据库。经过一番研究,我发现打开IE显然需要更多的时间,而且可以使用XmlHTTP来实现。我正在使用XmlHTTP打开另一个问题中提出的网页。然而,在使用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")

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

看看我为另一个问题发布的这个答案,因为这接近你想要的。总之,您将:

  1. 创建Microsoft.xmlHTTP对象

  2. 使用xmlHTTP对象打开您的url

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

从那里您可以获得一组XMLNodes,从DOMDocument 中选择元素、属性等

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

此页面使用字符串函数(Mid、InStr)从html文本中提取信息。

也许可以从检索到的HTML中创建DOMDocument(我相信是这样),但我还没有追求这一点。

如上所述,将.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选择器querySelectorAll("#profile-experience.title"),所以假设你做得正确。

相关内容

最新更新