熟悉爬虫但使用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
相关产品推荐
相关产品推荐

