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

VBA网页抓取:如何精准定位包含特定文本的目标div元素

精准识别包含呼叫区域信息的目标DIV元素

问题背景

需要从URL https://www.rebtel.com/en/international-calling-guide/phone-codes/us/ 中定位包含呼叫区域信息的div元素,以「Alabama」为锚点识别,但现有代码会输出所有嵌套层级中包含该文本的div类名,仅需获取类名为「gap-xl-bottom gap-l-top」的特定div。

原代码(需添加引用:Tools->Reference 勾选「Microsoft XML, v3.0」)

Public Sub Main()
Dim url As String
Dim oHttp As New MSXML2.XMLHTTP
Dim divs As IHTMLElementCollection, div As HTMLDivElement
    
    url = "https://www.rebtel.com/en/international-calling-guide/phone-codes/us/"
    oHttp.Open "GET", url, False
    oHttp.send
    
    Dim html As New HtmlDocument
    html.body.innerHTML = oHttp.responseText

    Set divs = html.body.getElementsByTagName("div")
    
    For Each div In divs
        If div.innerHTML Like "*Alabama*" Then
            Debug.Print div.className
        End If
    Next div
End Sub

当前问题

代码输出所有包含「Alabama」文本的嵌套div类名:

content-wrapper
codes_show_view
container
row gap-l
gap-xl-bottom gap-l-top
pull-left
pull-left
pull-left
pull-left

解决方案:精准定位目标DIV

修改判断逻辑,同时检查div的类名和内容,或者直接筛选目标类名的div再验证内容:

修改后的代码

Public Sub Main()
Dim url As String
Dim oHttp As New MSXML2.XMLHTTP
Dim divs As IHTMLElementCollection, div As HTMLDivElement
    
    url = "https://www.rebtel.com/en/international-calling-guide/phone-codes/us/"
    oHttp.Open "GET", url, False
    oHttp.send
    
    Dim html As New HtmlDocument
    html.body.innerHTML = oHttp.responseText

    Set divs = html.body.getElementsByTagName("div")
    
    For Each div In divs
        ' 同时验证类名和包含目标文本
        If div.className = "gap-xl-bottom gap-l-top" And div.innerHTML Like "*Alabama*" Then
            Debug.Print "目标DIV类名:" & div.className
            ' 找到后退出循环,避免重复输出
            Exit For
        End If
    Next div
End Sub

逻辑说明

  • 直接匹配目标类名「gap-xl-bottom gap-l-top」,同时验证该div包含「Alabama」文本,确保精准定位
  • 添加Exit For在找到目标后终止循环,提升执行效率

更灵活的适配方式(应对类名顺序变动)

如果网页类名的空格分隔顺序可能发生变化,可改用类名包含判断:

If InStr(div.className, "gap-xl-bottom") > 0 And InStr(div.className, "gap-l-top") > 0 And div.innerHTML Like "*Alabama*" Then
    Debug.Print "目标DIV类名:" & div.className
    Exit For
End If

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:40