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

VBA网页爬虫获取目标页面指定数值失败问题咨询

问题解决:VBA提取动态页面数值异常修复

根因说明

你请求的两个页面内容属于JavaScript动态渲染数据,直接通过MSXML2.XMLHTTP发起GET请求只能拿到初始的空页面框架,目标数据是页面加载完成后由JS异步请求填充到DOM里的,所以直接解析返回的HTML找不到目标数值。用InternetExplorer.Application仍然出错大概率是没有等待页面完全加载、JS执行完毕就开始提取元素。

可行解决方案

方案1:修正后的InternetExplorer.Application版本

Sub ExtractTargetValue()
    Dim ie As Object
    Dim html As HTMLDocument
    Dim targetElement As Object
    
    ' 创建IE实例
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = False ' 后台运行不显示窗口
    
    ' 打开目标页面
    ie.Navigate "https://fnet.bmfbovespa.com.br/fnet/publico/exibirDocumento?id=233361&cvm=true"
    
    ' 等待页面完全加载、JS执行完毕
    Do While ie.Busy Or ie.readyState <> 4
        DoEvents
        Application.Wait Now + TimeValue("00:00:01")
    Loop
    ' 额外预留1秒加载时间,可根据网络情况调整
    Application.Wait Now + TimeValue("00:00:01")
    
    Set html = ie.document
    
    ' 遍历td元素匹配目标值,比固定索引更稳定,避免页面结构微调就提取失败
    For Each targetElement In html.getElementsByTagName("td")
        If targetElement.innerText = "0,05" Then
            Sheets("Sheet1").Cells(1, 1) = targetElement.innerText
            Exit For
        End If
    Next
    
    ' 清理资源避免后台残留进程
    ie.Quit
    Set ie = Nothing
    Set html = Nothing
End Sub

运行前需要确保VBA引用了Microsoft HTML Object Library

方案2:直接调用数据接口(更高效)

如果不想依赖IE控件,可以通过浏览器开发者工具的网络面板,抓包获取页面异步加载的真实数据接口,直接请求接口解析返回值即可,无需启动浏览器进程,运行速度更快稳定性更高。

内容的提问来源于stack exchange,提问作者Artur Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:04