如何用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
相关产品推荐
相关产品推荐

