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

使用MSXML2.ServerXMLHTTP的.responsetext无法获取目标网页数值求助

问题分析与解决思路

为什么responseText里找不到目标数值

这个网站是动态加载内容的:你用MSXML2.ServerXMLHTTP获取的是服务器返回的原始静态HTML,而浏览器里看到的970.15是页面加载后通过JavaScript动态渲染出来的,静态源码里根本没有这个数值,所以自然搜不到。

解决方案

方案1:用支持JS渲染的浏览器控件(VBA环境)

如果是在VBA里操作,可以用InternetExplorer对象模拟浏览器加载页面,等JS执行完成后再获取渲染后的HTML:

Sub GetDynamicValue()
    Dim ie As Object
    Dim targetValue As String
    
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = False ' 可设为True查看加载过程
    ie.Navigate "https://www.spglobal.com/spdji/en/indices/equity/sp-euro-50-equal-weight-50-point-decrement-index/#overview"
    
    ' 等待页面加载完成
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    
    ' 替换为实际元素选择器(从浏览器检查工具中获取)
    targetValue = ie.Document.querySelector(".index-value").innerText 
    
    MsgBox "获取到的数值:" & targetValue
    ie.Quit
    Set ie = Nothing
End Sub

注意:需要右键浏览器里的目标数值→检查,确认元素的类名/ID,替换querySelector里的参数。

方案2:直接调用网站的API接口(更高效)

打开浏览器开发者工具(F12)→切换到「网络」面板,刷新页面后筛选「XHR」或「Fetch」请求,找返回指数数据的JSON接口(通常地址包含api、index等关键词)。找到后直接用MSXML2.ServerXMLHTTP请求该接口,就能拿到包含目标数值的结构化数据,无需处理复杂的HTML。

关于单元格需删除前50字符的问题

这大概率是responseText开头包含了UTF-8 BOM头或其他编码相关的不可见前缀。可以直接用VBA的Mid函数截取有效内容:

Dim rawText As String
rawText = xmlHttp.responseText
Dim cleanText As String
cleanText = Mid(rawText, 51) ' 从第51位开始截取有效内容

也可以在请求时指定编码,避免前缀问题:

xmlHttp.setRequestHeader "Accept-Charset", "utf-8"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:45:29