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

使用VBA抓取HTML嵌套类内容的技术求助

VBA IE9 抓取航班舱位及座位可用性数据解决方案

核心实现思路

针对无唯一ID、类名动态变化的问题,通过CSS选择器定位父容器,再在每个父容器内精准查找子元素,完全适配IE9环境:

  1. 用querySelectorAll匹配所有包含flightCabin3和cabin-block类的父元素(忽略中间动态变化的colmn[i]/flightCabinOption_[j]类名)
  2. 遍历每个父容器,分别提取:
    • 舱位类型:子元素.travel-class的文本内容
    • 座位状态:优先查找.noAvlbl(标记无可用),若不存在则取.message-number-of-seats的座位数文本

完整VBA代码示例

Sub 抓取航班舱位数据()
    Dim ie As Object
    Dim parentElements As Object
    Dim parentElem As Object
    Dim travelClassElem As Object
    Dim seatStatusElem As Object
    Dim rowNum As Integer
    
    ' 初始化IE对象
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True ' 调试时可设为True,发布后改为False
    
    ' 打开目标页面(替换为你的目标URL)
    ie.Navigate "你的目标网页URL"
    
    ' 等待页面加载完成(IE9兼容版)
    Do While ie.Busy Or ie.ReadyState <> 4
        DoEvents
    Loop
    
    ' 定位所有符合条件的父容器
    Set parentElements = ie.Document.querySelectorAll(".flightCabin3.cabin-block")
    
    ' 初始化输出行号
    rowNum = 1
    
    ' 遍历每个父容器
    For Each parentElem In parentElements
        ' 提取舱位类型
        Set travelClassElem = parentElem.querySelector(".travel-class")
        If Not travelClassElem Is Nothing Then
            Cells(rowNum, 1).Value = travelClassElem.innerText
        Else
            Cells(rowNum, 1).Value = "未找到舱位类型"
        End If
        
        ' 提取座位可用性
        Set seatStatusElem = parentElem.querySelector(".noAvlbl")
        If Not seatStatusElem Is Nothing Then
            Cells(rowNum, 2).Value = "无可用座位"
        Else
            Set seatStatusElem = parentElem.querySelector(".message-number-of-seats")
            If Not seatStatusElem Is Nothing Then
                Cells(rowNum, 2).Value = seatStatusElem.innerText
            Else
                Cells(rowNum, 2).Value = "状态未知"
            End If
        End If
        
        rowNum = rowNum + 1
    Next parentElem
    
    ' 关闭IE并释放资源
    ie.Quit
    Set ie = Nothing
    Set parentElements = Nothing
    Set parentElem = Nothing
    MsgBox "数据抓取完成!"
End Sub

关键步骤解释

  1. CSS选择器说明:

    • .flightCabin3.cabin-block:匹配同时拥有flightCabin3和cabin-block类的元素,自动忽略动态变化的中间类名,完美适配目标HTML结构
    • 子元素选择器.travel-class/.noAvlbl/.message-number-of-seats:在当前父容器内查找,确保舱位和状态一一对应
  2. IE9兼容性处理:

    • 使用querySelectorAll和querySelector:IE9完全支持这两个方法,比getElementsByClassName更稳定,也避开了你遇到的getElementsByTagName问题
    • 页面等待逻辑:标准的Busy+ReadyState判断,确保页面加载完成后再抓取数据
  3. 容错处理:

    • 每个元素查找后都添加Is Nothing判断,避免因页面结构异常导致代码崩溃
    • 异常情况标记为“未找到舱位类型”或“状态未知”,方便后续排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20