Проблемы с "getElementsByClassName" в 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 (используется эта версия, но она не работает)

Что я делаю неправильно?

2 ответа

Решение

Попробуйте следующий обходной путь, который использует синтаксис селектора CSS для выбора по классу. В современных браузерах это более быстрый метод сопоставления элементов. Это может сработать.

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

Также проверьте, можете ли вы удалить использование составного класса и иметь один класс, например:

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

Вы используете For Loop от 0 в .Length -1 над возвращенным nodeList,

Ваш совет решил проблему.

Список узлов, которые я использовал...

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

... вернул все узлы, которые мне нужны.

Большое спасибо!

Другие вопросы по тегам