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
相关产品推荐
相关产品推荐

