2

我正在尝试使用 VBA 从这个 HTML 片段中抓取指向 .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

4

3 回答 3

0

尝试:

For Each ele In objIE.document.getElementById("imageDiv").getElementsByTagName("img")
于 2019-06-22T07:17:48.153 回答
0

首先,正如 Tim Williams 所指出的,imageDiv它是一个id而不是一个标签,所以它可以通过.getElementById()返回一个唯一的 HTML 元素的方法来访问,而它返回一个 HTML 元素.getElementsByTagName()的集合。

HTML 中的标记,最简单的形式看起来像<TagName>Inner Text</>.

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

所以,如果你想获取idis的元素,imageDiv然后获取它的img元素,更具体地说是它的第一个 img元素,你必须这样做:

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

其次,这innerText不是你要找的。你需要的是src.

可以这样达到:

Debug.Print img.src

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

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

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

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

于 2019-06-22T07:40:46.263 回答
0

除了给出的答案之外,使用返回单个节点的 css 选择器更高效、更快

Debug.Print objIE.document.querySelector("#imageDiv img").src
于 2019-06-22T10:50:10.830 回答