在Excel VBA中使用getElementsBy ?? Name

时间:2019-06-22 06:35:57

标签: html excel vba web-scraping queryselector

我正在尝试使用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

3 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

首先,正如蒂姆·威廉姆斯(Tim Williams)指出的,imageDivid而不是标签,因此可以通过.getElementById()方法来访问它,该方法返回一个唯一的HTML元素。与.getElementsByTagName()相反,后者返回HTML元素的集合。

最简单的HTML标记形式类似于<TagName>Inner Text</>

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

因此,如果要获取idimageDiv的元素,然后获取其img元素,更具体地说,为其 first {{1 }}元素,您必须这样做:

img

第二,Dim img As HTMLImg Set img = objIE.document.getElementById("imageDiv").getElementsByTagName("img")(0) 不是您想要的。您需要的是innerText

可以这样实现:

src

要利用Debug.Print img.src 属性,我们将元素存储在.src变量中。

上面的代码会将以下内容打印到您的直接窗口中:

  

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

使用的参考:HTMLImg

答案 2 :(得分:0)

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

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