You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA爬取CNN股票价格预测数据报错,求代码修正方案

问题分析与解决代码

错误原因

  1. 方法名称错误:HTMLDocument对象不存在getElementByClassName方法,正确写法是getElementsByClassName(复数形式),该方法返回匹配类名的元素集合,而非单个元素。
  2. 动态内容加载限制:CNN股票页面的预测数据是通过JavaScript动态渲染的,MSXML2.XMLHTTP获取的是原始静态HTML,其中并不包含目标元素,因此即使修正方法名也无法拿到数据。

可行代码(使用IE自动化获取动态内容)

以下代码通过IE浏览器加载页面,等待动态内容渲染完成后提取数据:

Sub CNN_Stock_Prediction()
    Dim ie As Object
    Dim html As HTMLDocument
    Dim stock As String
    Dim targetElement As IHTMLElement
    Dim predictionPrice As String
    
    ' 初始化IE对象
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True ' 设为False可隐藏浏览器
    
    stock = "TSLA"
    ' 打开目标页面
    ie.Navigate "https://edition.cnn.com/markets/stocks/" & stock
    
    ' 等待页面加载完成
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    
    ' 等待动态内容渲染(可根据网络速度调整等待时长)
    Application.Wait Now + TimeValue("00:00:03")
    
    Set html = ie.Document
    
    ' 尝试获取目标元素(以"high-price"类为例,需确认页面实际元素类名)
    On Error Resume Next
    Set targetElement = html.getElementsByClassName("high-price")(0)
    On Error GoTo 0
    
    If Not targetElement Is Nothing Then
        predictionPrice = targetElement.innerText
        MsgBox "预测高价:" & predictionPrice
    Else
        MsgBox "未找到目标元素,请检查页面元素类名是否正确"
    End If
    
    ' 关闭IE并释放资源
    ie.Quit
    Set ie = Nothing
    Set html = Nothing
End Sub

注意事项

  • 需确保VBA项目引用了Microsoft HTML Object Library(打开VBA编辑器 → 工具 → 引用 → 勾选该选项)。
  • 页面元素类名可能随CNN网站更新变化,若代码无法找到元素,需通过浏览器开发者工具重新确认实际HTML结构。
  • 等待时间可根据网络状况调整,保证动态内容完全加载。

内容的提问来源于stack exchange,提问作者Rafi Hour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:23:11