【问题标题】:Extract Website Images From HTML Alt Element VBA从 HTML Alt 元素 VBA 中提取网站图像
【发布时间】:2021-01-07 02:41:26
【问题描述】:

我希望从订阅网站中提取图像。图片的html代码如下:

<img chart-id="2669" alt="Chart ID 2669" class="chart-img" 
  src="https://website.com/img_2054_569134694870.jpg"
  diagnostic-id="chart-img-1" style="max-height: 150px;">

查看我认为引用 alt id 的代码是我最好的选择。所以我的代码看起来像这样。

Sub ImportImage()

    Dim Cell As Integer
    Dim ItemNbr As String

    Dim AElement As Object
    Dim AElements As IHTMLElementCollection

    Dim IE As MSXML2.XMLHTTP60
    Set IE = New MSXML2.XMLHTTP60

    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLBody As MSHTML.HTMLBody

    Set HTMLDoc = New MSHTML.HTMLDocument
    Set HTMLBody = HTMLDoc.body

       
        IE.Open "GET", "https://app.website.com/22920", False
        IE.send

        While IE.readyState <> 4
            DoEvents
        Wend

        HTMLBody.innerHTML = IE.responseText

        Set pImg = HTMLDoc.getElementById("Chart ID 2669")
        ThisWorkbook.Worksheets("Sheet1").Range("B7") = pImg.getAttribute("alt")

        Application.Wait (Now + TimeValue("0:00:2"))


End Sub

这段代码很弱,但我正在尝试构建它,以便将网站图像导入我的工作簿。有什么建议吗?谢谢!

  Sub NEWUPDATEDImportImage()

   Set IE = CreateObject("InternetExplorer.Application")
  strURL = "https://website.com/chartbooks/22920"
  IE.navigate strURL
  IE.Visible = True
  
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLBody As MSHTML.HTMLBody

Set HTMLDoc = New MSHTML.HTMLDocument
Set HTMLBody = HTMLDoc.body
HTMLBody.innerHTML = IE.responseText
    

        Worksheets("Sheet1").Range("A1") = HTMLDoc.querySelector("img[alt='Chart ID 2669']").getAttribute("src")


End Sub

【问题讨论】:

  • 我去掉了PHP标签,都是vba代码
  • alt 属性不是alt ID。所以你不能通过属性'alt id'使用getElementById
  • 循环文档中的所有元素并检查if tempElement.getAttribute("alt") = "Chart ID 2669"
  • 谢谢@Sacru2red,你能多解释一下你最后的评论吗?如果我包含这一行而不是 Set pImg = HTMLDoc.getElementById("Chart ID 2669") 我应该如何将该图像放入单元格中?
  • @Sacru2red 我有这样的东西,但它不起作用。 For Each Elem In IE.document.getElementsByTagName("img") If IE.tempElement.getAttribute("alt") = "Chart ID 2669" Then Worksheets("Sheet1").Range("A1") = IE.document.getElementsByTagName("img").getAttribute("src")

标签: html css excel vba


【解决方案1】:

看起来您正在混合使用 XML 和 IE 方法的代码。此外,您应该在继续之前检查以确保页面已完成加载。请尝试以下方法...

Option Explicit

Sub ImportImage()

    Dim IE As Object
    Dim HTMLDoc As Object
    Dim HTMLImg As Object
    Dim strURL As String
    
    strURL = "https://website.com/chartbooks/22920"
    
    Set IE = CreateObject("InternetExplorer.Application")
    
    With IE
        .Visible = True
        .navigate strURL
        Do While .Busy Or .readyState <> 4 '4 = READYSTATE_COMPLETE
            DoEvents
        Loop
        Set HTMLDoc = .document
    End With
    
    On Error Resume Next
    Set HTMLImg = HTMLDoc.querySelector("img[alt='Chart ID 2669']")
    On Error GoTo 0
    
    With Worksheets("Sheet1").Range("A1")
        If Not HTMLImg Is Nothing Then
            .Value = HTMLImg.getattribute("src")
        Else
            .Value = "Image not found"
        End If
    End With
    
    Set IE = Nothing
    Set HTMLDoc = Nothing
    Set HTMLImg = Nothing
    
End Sub

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多