VBA中IE.Document.getElementsByTagName可用但getElementsByClassName报438错误
IE自动化VBA运行时错误438的解决方案
错误原因
运行时错误438(对象不支持该属性或方法)的核心原因是:你使用的InternetExplorerMedium对应的IE版本(通常为IE8及以下)的DOM对象原生不支持getElementsByClassName方法——这个方法是HTML5标准新增的,旧版IE并未实现该API。
可行解决方案
方案1:使用querySelectorAll替代
querySelectorAll支持CSS选择器语法,在IE8及以上版本的IE中可以正常使用,用类选择器.textoblanco即可匹配目标元素:
For Each ele In IE.Document.querySelectorAll(".textoblanco") Debug.Print ele.innerHTML If InStr(ele.innerHTML, "Resolver") > 0 Then Debug.Print "OK" Exit For End If Next
方案2:通过getElementsByTagName结合类属性判断
既然你的第一个循环能正常运行,也可以在遍历<a>标签时额外判断元素的className属性,达到和getElementsByClassName相同的效果:
For Each ele In IE.Document.getElementsByTagName("a") ' 先判断元素是否属于目标类 If ele.className = "textoblanco" Then Debug.Print ele.innerHTML If InStr(ele.innerHTML, "Resolver") > 0 Then Debug.Print "OK" Exit For End If End If Next
额外提示
- 确保IE已经完全加载目标网页后再执行DOM操作,可以通过
Do While IE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Loop语句等待页面加载完成。 - VBA中
innerHTML的大小写不影响执行,但建议遵循标准写法使用大写H。
内容的提问来源于stack exchange,提问作者Domingo SC
相关产品推荐
相关产品推荐

