getElementById - возвращает строку вместо объекта

150
08 декабря 2019, 08:20

Постараюсь объяснить наиболее полно. Есть табличка в экселе, есть веб-интерфейс БД. Других возможностей, как только взаимодействовать с бд через веб - нет. Нужно по табличным данным совершать поиск в веб интерфейсе и вытаскивать из него недостающие данные и помещать в табличку. проблема: не могу получить объекты, что бы по ним программно "кликать" веб интерфейс - hpsm (локальная система). версия 9.40.3006-P3 выглядит вот так:

Хочу щелкнуть по терминальным устройствам:

<div class="x-panel-header x-panel-header-noborder x-unselectable icon-micellaneous icon-hp x-accordion-hd" id="ext-gen-top115" tabindex="0" role="tab" aria-expanded="false" style="cursor: pointer;"><span class="x-panel-header-text" id="ext-gen-top119">Терминальные устройства</span></div>

Делаю так:

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate ("http://mos-hpsm-wb.***********/hp/index.do")
 --ожидание загрузки ---
Do While IE.Busy:  Loop
Do While IE.ReadyState <> 4:  Loop
obj = IE.Document.getElementById("ext-gen-top115") 
Do While IsNull(obj) ' это введено потому что предыдущие не отрабатывали, еще грузился контент, видимо из-за этого: "<body onload="cwc.getFrameworkWindow();cwc.setAppMode();"
Sleep (100)
obj = IE.Document.getElementById("ext-gen-top115")
'Debug.Print IsNull(obj)
Loop
'--ожидание загрузки
obj = IE.Document.getElementById("ext-gen-top115")

В результате в obj попадает всего лишь строковое название объекта, который я хочу использовать.

Но если я получают элемент вот так (т.е. тоже самое только по имени класса):

obj = IE.Document.getElementsByClassName("x-panel-header x-panel-header-noborder x-unselectable icon-micellaneous icon-hp x-accordion-hd")

То все хорошо:

Я делаю ему: obj.Click И свиток раскрывается:

Что нужно сделать что бы я получал элементы по ID ? Помогите пожалуйста.

п.с. то что я получил по имени классов этот объект я так понимаю "случайность" потому что мне нужно дальше "кликать" а я уже объекты не могу получить по имени классов. Вообщем нужно по ID.

Заранее большое спасибо!

Answer 1

Структурирование вопроса рождает и решение. :) Ответ:

Dim obj As Object 
Set obj = IE.Document.getElementById("ext-gen-top115") 
obj.Click

Спасибо ресурсу! :)

READ ALSO
Как проверить поля ввода на нужное значение?

Как проверить поля ввода на нужное значение?

У меня есть такая проблема, после одной проверки на соответствие с условием и после изменения я больше не могу вернуться и заново проверитьУ...

169
Как синхронно загрузить статику в nuxt?

Как синхронно загрузить статику в nuxt?

Пытаюсь загрузить статику для nuxt приложенияЕсть файл shakal

155
Таймер обратного отсчета на js

Таймер обратного отсчета на js

Нашел такой код таймера на js:

144