仅当使用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(使用此版本,但不起作用)
我在做什么错了?
答案 0 :(得分:2)
尝试以下使用css选择器语法按类选择的变通办法。对于现代浏览器,这是一种用于元素匹配的更快方法。可能有用。
Dim eleCol As Object
Set eleCol = HTML.querySelectorAll(".listEvent.sro")
另外,测试您是否可以删除复合类用法并使用单个类,例如
Set eleCol = HTML.querySelectorAll(".listEvent")
您在返回的For Loop
上使用从0
到.Length -1
的{{1}}。
答案 1 :(得分:0)
您的提示已解决了问题。
我使用的节点列表...
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")
...返回了我需要的所有节点。
非常感谢您!