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

熟悉爬虫但使用VBA GET方法抓取Revolut EUR转BHD汇率遇阻

解决VBA抓取Revolut EUR转BHD汇率的问题

我太懂这种明明熟门熟路搞爬虫,却在这么个小问题上卡壳的憋屈了!核心问题出在Revolut的汇率页面是JavaScript动态渲染的——你用MSXML2.XMLHTTP发GET请求拿到的只是页面的初始静态HTML骨架,根本没加载出实际的汇率数据,自然抓不到你要的内容。

下面给你两个可行的解决方案,按需选择:

方案1:用IE控件渲染完整页面(快速上手)

IE控件会像真实浏览器一样执行页面里的JS,能拿到渲染后的完整内容,适合快速验证和实现:

Sub ScrapeRevolutRate_IE()
    Dim ie As Object
    Dim rateElement As Object
    Dim eurToBhdRate As String
    
    ' 初始化IE对象
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = False ' 调试时可以改成True,直观查看页面加载情况
    
    ' 打开目标汇率页面
    ie.Navigate "https://www.revolut.com/converter/EURBHD"
    
    ' 等待页面完全加载(包括JS渲染完成)
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    
    ' 定位汇率元素——这里需要你用浏览器F12查真实的CSS选择器
    ' 比如Revolut的汇率通常在带"converterResult__value"类的元素里,需自行确认
    On Error Resume Next
    Set rateElement = ie.Document.querySelector(".converterResult__value")
    On Error GoTo 0
    
    If Not rateElement Is Nothing Then
        eurToBhdRate = rateElement.innerText
        MsgBox "1 EUR = " & eurToBhdRate & " BHD"
    Else
        MsgBox "没找到汇率元素!快用F12检查页面的CSS选择器,替换代码里的参数~"
    End If
    
    ' 清理资源
    ie.Quit
    Set ie = Nothing
End Sub

小提示:

一定要用浏览器开发者工具(F12)定位显示汇率的元素,复制它的CSS选择器或XPath替换代码中的参数,否则大概率找不到目标内容。

方案2:直接调用后台API(高效又稳定)

抓页面不如抓接口靠谱!打开Revolut汇率页面,按F12切到「网络」标签,刷新页面后找XHR/fetch类型的请求——你会发现页面其实是通过调用某个API获取汇率数据的,直接请求这个接口,返回的JSON格式数据解析起来比抓页面方便多了。

示例代码(需自行抓包找到真实API地址):

Sub GetRevolutRate_API()
    Dim oXHTTP As Object
    Dim jsonResponse As String
    Dim rate As Double
    
    Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
    ' 替换成你抓包获取的真实API地址
    oXHTTP.Open "GET", "https://api.revolut.com/exchange/rates?base=EUR&target=BHD", False
    ' 添加User-Agent模拟浏览器请求,避免被网站拦截
    oXHTTP.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"
    
    oXHTTP.send
    jsonResponse = oXHTTP.responseText
    
    ' 解析JSON需要导入VBA-JSON库,需提前添加到VBA项目中
    Dim json As Object
    Set json = JsonConverter.ParseJson(jsonResponse)
    
    ' 按API返回的JSON结构提取汇率,需根据真实返回内容调整
    rate = json("rates")("BHD")
    MsgBox "1 EUR = " & rate & " BHD"
    
    ' 清理资源
    Set oXHTTP = Nothing
    Set json = Nothing
End Sub

注意事项:

  • 调用API前请确认Revolut的使用条款,避免违反平台规定;
  • API地址可能会随网站更新变化,若失效需重新抓包获取新地址;
  • 部分API需要额外请求头,抓包时注意复制完整的请求头信息。

最后给你个排查小技巧:把MSXML2.XMLHTTP拿到的html内容打印出来查看,如果完全找不到汇率相关数字,那100%是动态渲染的问题,直接用上面的方案解决即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:44