使用VBA更新/提取网站源代码中不断变化的元素

时间:2020-09-16 11:42:14

标签: html excel vba

我目前正在处理VBA代码,该代码是从网站上提取每天更新的图表。我将每周运行这段代码来获取这张图。

最初,我通过引用图表的元素源代码将图形提取到Excel工作簿中:

Sheets("Chart").Shapes.AddPicture "https://charts.website.com/c/422/charts/ClearChart_2054_980961381630.jpg" _
                      , msoFalse, msoTrue, 100, 100, 500, 600

我的问题是_980961381630.jpg每天都在变化。

我试图了解如何使用VBA更新_980961381630,以便在运行代码时获得最新的更新表。

现在,我正尝试使用Extracting Specific Elements VBAExtracting Varying Element Source Code作为资源。

HTML元素源代码为:

<img chart-id="2672" alt="Chart ID 2672" class="chart-img" 
src="https://charts.website.com/c/422/charts/ClearChart_2054_758170607617.jpg" 
diagnostic-id="chart-img-2" style="max-height: 150px;">

1 个答案:

答案 0 :(得分:0)

您可以抓取当前网址。如果没有要加载的动态内容,则可以使用http xml请求来完成。否则,您必须使用IE。

尝试此操作以获取http xml请求:

Sub ImportChart()

Const url As String = "https://charts.website.com/c/422/charts/" 'Page with chart

Dim xhr As Object
Dim htmlDoc As Object
Dim nodeChartLink As Object
Dim chartLink As String

  'Initialize variables
  Set htmlDoc = CreateObject("htmlfile")
  Set xhr = CreateObject("MSXML2.ServerXMLHTTP.6.0")
  
  '"Open" page
  xhr.Open "GET", url, False
  xhr.send
  'Build html document for DOM operations
  htmlDoc.body.innerHTML = xhr.responseText
  
  'Get chart url
  Set nodeChartLink = htmlDoc.getElementByID("2672")
  chartLink = nodeChartLink.src
  
  'Place chart in excel sheet
  Sheets("Chart").Shapes.AddPicture chartLink, msoFalse, msoTrue, 100, 100, 500, 600
End Sub