在 Excel VBA 中使用 getElementsBy??Name

Using getElementsBy??Name in Excel VBA

我正在尝试使用 VBA 从这个 HTML 片段中将 link 抓取到 .gif 文件:

        <div class="row">
            <div class="col-md-12">
                <div id='imageDiv' style='width:99%'>
 <img style='width:99% !important; border:5px solid silver;' src="http://www.[rest of link].gif" alt="" />
  </div>

我的代码如下:

parent_url = "http://www.[webpage url]" 
objIE.navigate parent_url
        While objIE.Busy Or objIE.readyState <> 4
            DoEvents
        Wend
        For Each ele In objIE.document.getElementsByTagName("imageDiv")
           If InStr(ele.Style, "width") > 0 Then
              ws1.Cells(2, 2) = ele.innerText: Exit For
           End If
        Next
objIE.Quit

即使我尝试了多种不同的元素类型,也不会向电子表格写入任何内容。 关于我在这里做错了什么的任何指示? TIA

尝试:

For Each ele In objIE.document.getElementById("imageDiv").getElementsByTagName("img")

首先,正如 Tim Williams 所指出的,imageDiv 是一个 id 而不是标签,因此可以通过 .getElementById() 方法到达,returns一个独特的 HTML 元素,与 .getElementsByTagName() 形成对比,后者 returns 是 HTML 元素的集合。

HTML 中的一个标签,其最简单的形式类似于 <TagName>Inner Text</>

因此,在您的情况下,您要查找的标签名称是 img,而您要查找的 idimageDiv

所以,如果你想获取 idimageDiv 的元素,然后获取它的 img 元素,更具体地说,它的 first img 元素你必须这样做:

Dim img As HTMLImg
Set img = objIE.document.getElementById("imageDiv").getElementsByTagName("img")(0)

其次,innerText 不是您要查找的内容。你需要的是 src.

可以这样实现:

Debug.Print img.src

为了利用 .src 属性,我们将元素存储在 HTMLImg 变量中。

上面的代码会将以下内容打印到您的即时 window:

http://www.[rest%20of%20link].gif/

使用的参考文献:Microsoft HTML Object Library

除了给定的答案之外,使用 css 选择器更高效、更快速,其中 returns 单个节点

Debug.Print objIE.document.querySelector("#imageDiv img").src