MSHTML.HTMLDocument 中 "getElementsByClassName" 的问题

problems with "getElementsByClassName" in MSHTML.HTMLDocument

仅在使用 getElementsByClassName 时出现此问题

Dim HTTP As New MSXML2.XMLHTTP60

HTTP.open "POST", strWWW, False
HTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0;     Windows NT 5.0)"
HTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
HTTP.send ("obj=" & strID)

Dim HTML As New MSHTML.HTMLDocument

HTML.body.innerHTML = HTTP.responseText

Dim eleCol As MSHTML.IHTMLElementCollection

Set eleCol = HTML.getElementsByClassName("listEvent sro") '<-- The problem is happening here.

正在 Windows 8.1 和 Windows XP

上进行测试

Windows 8.1

虽然在IDE一切正常, 但是当编译时只出现错误:

mshtml.dll 11.00.9600.18860

mshtml.tlb 11.0.9600.16518

该方法存在,但现在为什么它在 IDE 中有效,但在编译时却无效?

Windows XP

甚至 IDE 都没有工作,呈现 以下错误消息:

mshtml.dll 8.0.6001.23588

mshtml.tlb 8.0.6001.18702(老版本且没有getElementsByClassName)

mshtml.tlb 11.0.9600.16518(用这个版本不行)

我做错了什么?

尝试以下解决方法,它使用 css select 或 class 的 select 语法。对于现代浏览器,这是一种更快的元素匹配方法。可能有用。

Dim eleCol As Object
Set eleCol = HTML.querySelectorAll(".listEvent.sro")

此外,测试是否可以删除复合 class 用法并使用单个 class,例如

Set eleCol = HTML.querySelectorAll(".listEvent")

您在返回的 nodeList 上使用了从 0.Length -1For Loop

你的提示解决了问题。

我使用的节点列表...

Dim eleMen As MSHTML.IHTMLElement

For Each eleMen In eleCol
    debug.print eleMen.innerText
Next eleMen

...而且效果很好,不使用时也是如此 HTML.getElementsByClassName 我用多少getElementsByTagName也能正常使用,只是 getElementsByClassName 在可执行文件中显示此错误, 而不是 IDE.

这是 MSHTML 中的错误吗?

另一个细节是,这也没有问题......

Set eleCol = HTML.querySelectorAll(".listEvent.sro").Item(0).getElementsByTagName("td")

...返回了我需要的所有节点。

非常感谢!