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

如何用VBA定位网页深层div.tg中的超链接及链接文本

解决VBA获取指定网页div.tg下超链接的问题

你的问题出在**getElementsByTagName(".tg")的用法错误**——这个方法是按HTML标签名(比如div、a)查找元素,不能直接用类选择器.tg。另外目标超链接是嵌套在div.tg内部的<a>标签,需要逐层定位。

修正后的代码如下:

Sub GetLinksFromTgDivs()
    Const Url = "https://cdl.demosphere.com/"
    Dim Html As HTMLDocument, tgDivs As IHTMLElementCollection, tgDiv As IHTMLElement
    Dim linkEle As IHTMLElement, rowNum As Integer
    
    ' 初始化HTML文档对象
    Set Html = New HTMLDocument
    
    ' 发送HTTP请求获取网页内容
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .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"
        .send
        Html.body.innerHTML = .responseText
    End With
    
    ' 获取所有class为tg的div元素
    Set tgDivs = Html.getElementsByClassName("tg")
    
    rowNum = 1 ' 初始化写入的行号
    ' 遍历每个tg div
    For Each tgDiv In tgDivs
        ' 查找当前div下的所有a标签
        For Each linkEle In tgDiv.getElementsByTagName("a")
            ' 写入链接地址到A列,链接文本到B列
            Cells(rowNum, 1).Value = linkEle.href
            Cells(rowNum, 2).Value = linkEle.innerText
            rowNum = rowNum + 1
        Next linkEle
    Next tgDiv
    
    Set Html = Nothing
    Set tgDivs = Nothing
    MsgBox "提取完成!"
End Sub

关键说明:

  • getElementsByClassName("tg"):正确获取所有class为tg的div元素,这是定位目标容器的核心
  • 逐层查找:先找到div.tg容器,再在内部遍历<a>标签,确保只提取目标区域的链接
  • 添加User-Agent头:部分网站会拦截无标识的HTTP请求,添加浏览器标识可以避免请求被拒绝
  • 结果写入:将链接地址和对应文本分别写入A、B列,方便查看对应关系

注意:使用前需要确保VBA编辑器中已引用Microsoft HTML Object Library(可通过工具>引用勾选),如果不想引用,也可以将HTMLDocument、IHTMLElementCollection、IHTMLElement替换为Object实现后期绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:15:10