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 -1
的 For 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")
...返回了我需要的所有节点。
非常感谢!
仅在使用 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 -1
的 For 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")
...返回了我需要的所有节点。
非常感谢!