1

该问题仅在使用 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 上进行

视窗 8.1

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

Windows 8.1 上的错误

mshtml.dll 11.00.9600.18860

mshtml.tlb 11.0.9600.16518

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

视窗

甚至在 IDE 中也没有工作,出现以下错误消息:

在此处输入图像描述

mshtml.dll 8.0.6001.23588

mshtml.tlb 8.0.6001.18702(旧版本,没有getElementsByClassName)

mshtml.tlb 11.0.9600.16518(使用此版本但不起作用)

我究竟做错了什么?

4

2 回答 2

2

尝试以下使用 css 选择器语法按类选择的解决方法。对于现代浏览器,它是一种更快的元素匹配方法。它可能会起作用。

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

另外,测试您是否可以删除复合类的用法并拥有一个类,例如

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

For Loop0返回.Length -1nodeList.

于 2019-02-24T21:46:00.377 回答
0

你的提示解决了这个问题。

我使用的节点列表...

Dim eleMen As MSHTML.IHTMLElement

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

...它工作得很好,不使用时的方式相同 HTML.getElementsByClassName How much do I usegetElementsByTagName也正常工作,只是 getElementsByClassName在可执行文件中显示此错误,而不是在 IDE 中。

它是 MSHTML 中的错误吗?

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

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

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

非常感谢!

于 2019-02-24T22:58:45.920 回答