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

Excel VBA使用XMLHTTP下载网页黄金价格表格无有效数据问题咨询

核心问题原因

你请求的目标页面属于前端动态渲染页面,初始静态HTML本身不包含黄金价格表格数据。页面加载完成后会通过JavaScript调用后端数据接口拉取表格内容,再动态插入到页面DOM中。而XMLHTTP只能获取首次GET请求返回的静态源码,没有浏览器的JS执行和渲染能力,不管等待多久都拿不到动态加载的表格数据。

你现有代码的可优化点

  • 等待逻辑无效:ReadyState = 4仅代表XMLHTTP自身的请求动作完成,和页面动态内容加载没有任何关系,这段循环等待的代码没有实际作用。如果不需要异步处理,直接把Open方法的第三个参数改为False即可实现同步阻塞请求,无需自己写等待逻辑。
  • 请求地址错误:你现在请求的是前端页面地址,而非实际返回价格数据的后端接口,自然拿不到需要的内容。

可行的解决方案

方案1(优先推荐):直接请求数据接口

不需要解析页面,直接抓包拿到返回黄金价格数据的后端接口:

  1. 用浏览器打开目标页面,按F12打开开发者工具,切换到「网络」面板,筛选「XHR/提取」类型的请求
  2. 刷新页面后逐一查看请求的响应内容,找到返回黄金价格结构化数据(一般为JSON格式)的接口
  3. 直接用XMLHTTP请求该接口地址,拿到响应后直接解析数据即可,比解析HTML表格效率高很多。

参考代码示例:

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

' 此处替换为你抓包获取到的实际数据接口地址
Const DATA_API_URL As String = "你抓包得到的实际接口地址"

With http
     ' 同步请求,第三个参数设为False,无需额外写等待逻辑
     .Open "GET", DATA_API_URL, False 
     .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
     .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
     .send
     ' 同步请求send执行完成后直接读取响应即可
     Debug.Print .responseText
End With

方案2:使用带渲染能力的自动化工具

如果找不到接口,就放弃XMLHTTP,改用IE自动化、Selenium等带浏览器内核的工具,这类工具会自动执行页面JS完成渲染,等表格渲染完成后直接提取DOM中的表格内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:03