在 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
,而您要查找的 id
是 imageDiv
。
所以,如果你想获取 id
为 imageDiv
的元素,然后获取它的 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:
使用的参考文献:Microsoft HTML Object Library
除了给定的答案之外,使用 css 选择器更高效、更快速,其中 returns 单个节点
Debug.Print objIE.document.querySelector("#imageDiv img").src
我正在尝试使用 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
,而您要查找的 id
是 imageDiv
。
所以,如果你想获取 id
为 imageDiv
的元素,然后获取它的 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:
使用的参考文献:Microsoft HTML Object Library
除了给定的答案之外,使用 css 选择器更高效、更快速,其中 returns 单个节点
Debug.Print objIE.document.querySelector("#imageDiv img").src