【问题标题】:problems with "getElementsByClassName" in MSHTML.HTMLDocumentMSHTML.HTMLDocument 中的“getElementsByClassName”问题
【发布时间】:2019-02-24 20:49:04
【问题描述】:

只有在使用 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(使用此版本但不起作用)

我做错了什么?

【问题讨论】:

    标签: vba web-scraping vb6 microsoft.mshtml


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      您的提示解决了问题。

      我使用的节点列表...

      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")
      

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

      非常感谢!

      【讨论】:

      • 您遇到异常了吗?它显示什么错误?
      猜你喜欢
      • 2020-10-18
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多