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

VBA通过XMLHTTP60替代IE实现BOM气象站点带参数查询方案咨询

解决方案

完全可以仅通过XMLHTTP60实现带参数的查询请求,无需依赖Selenium等浏览器自动化工具,实现逻辑如下:

核心原理

前端页面输入区域码、点击查询按钮的交互,本质是浏览器向服务端发送带查询参数的HTTP请求,无需模拟前端交互,只需抓包拿到实际请求的规则,直接用XMLHTTP60模拟对应请求即可。

操作步骤

  1. 打开Edge/Chrome浏览器访问目标站点,按F12打开开发者工具,切换到「网络」面板,勾选「保留日志」选项
  2. 在页面搜索框输入测试区域码(示例为20),点击查询按钮
  3. 在网络面板的请求列表中筛选类型为document的请求,即可找到查询触发的实际请求,记录该请求的请求URL、请求方法、查询参数、必要请求头

修改后的XMLHTTP60示例代码

(以下为GET请求示例,适配绝大多数搜索场景,你可根据实际抓包结果调整参数)

' 引用:Microsoft XML, v6.0、Microsoft HTML Object Library
Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim queryKeyword As String
queryKeyword = "20" ' 替换为实际需要查询的区域码

' 拼接带参数的请求URL,可根据抓包结果调整参数名和其他固定参数
Dim reqURL As String
reqURL = "https://www.bom.gov.au/aviation/forecasts/taf/?keyword=" & VBA.EncodeURL(queryKeyword)

XMLPage.Open "GET", reqURL, False
' 增加必要请求头,避免被反爬拦截
XMLPage.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
XMLPage.setRequestHeader "Referer", "https://www.bom.gov.au/aviation/forecasts/taf/"
XMLPage.send

' 处理响应内容
If XMLPage.Status = 200 Then
    HTMLDoc.body.innerHTML = XMLPage.responseText
    Call ProcessHTMLPage(HTMLDoc)
Else
    Debug.Print "请求失败,状态码:" & XMLPage.Status
End If

POST请求适配(若抓包发现是POST请求)

如果查询是POST表单提交,修改代码如下即可:

XMLPage.Open "POST", "https://www.bom.gov.au/aviation/forecasts/taf/", False
XMLPage.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
' 其他请求头同上
XMLPage.send "keyword=" & VBA.EncodeURL(queryKeyword) ' 按抓包结果拼接表单参数

注意事项

  • 若返回内容出现乱码,可通过ADODB.Stream组件处理响应的UTF-8编码
  • 请遵守站点使用条款,控制请求频率,避免对站点服务造成不必要的压力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:02