使用VBA爬取<img alt src="address">标签src属性失败的问题求助
解决VBA爬取
<img>标签src属性的问题 我帮你梳理下这段代码里的几个关键问题,以及修正后的可行方案:
代码里的核心错误
- 拼写错误:
getElementsBytagName是笔误,正确的DOM方法名是getElementsByTagName(注意Tag的首字母大写) - 循环变量不匹配:你用
j作为循环计数器,但获取img元素时却用了i,这会导致每次循环都取同一个img元素,完全没用到循环变量j的遍历作用 - 逻辑混乱的循环上限:你用
opt.getElementsByTagName("img").Length - 2作为循环终点,但实际要处理的是doc1里cont类下的img标签,两者的img数量可能完全不一致,应该以目标元素集合的长度为循环依据 - 未做对象存在性检查:如果
doc1.getElementsByClassName("cont")(0)不存在(比如页面里没有class为cont的元素),代码直接运行会触发运行时错误
修正后的代码示例
Dim contElement As Object Dim imgElements As Object Dim j As Integer ' 先获取class为cont的元素集合,避免直接访问不存在的对象报错 Set contElement = doc1.getElementsByClassName("cont") If contElement.Length > 0 Then ' 获取cont元素下的所有img标签 Set imgElements = contElement(0).getElementsByTagName("img") ' 循环遍历所有找到的img标签 For j = 0 To imgElements.Length - 1 ' 将对应img的src属性写入指定单元格 Cells(35 + i, 25 + j) = imgElements(j).src Next j Else MsgBox "页面中未找到class为cont的元素" End If
关键说明
- 先判断
cont元素是否存在,避免空对象引用错误 - 循环时直接使用目标img集合的长度作为上限,确保遍历到所有找到的img标签
- 循环变量
j和获取img元素的索引保持一致,保证每个循环都取到对应的img标签 - 修正了方法名拼写错误,确保VBA能正确识别DOM操作方法
内容的提问来源于stack exchange,提问作者Robert james
相关产品推荐
相关产品推荐

