Я попробовал код, который вы разместили в моем собственном скрипте, и думаю, что нашел решение.Чтобы проверить, существует ли элемент, вы должны использовать функцию IsObject
;однако, если вы попытаетесь использовать его до того, как DOM
будет готово (т. е. IE.ReadyState
равно 4
), оно выдаст неопределенную ошибку (типично для вещей, связанных с IE, много-много причуд).
Итак, вместо того чтобы использовать бесконечный цикл для ожидания существования элемента, я изменил его на ожидание, пока DOM
не будет готово;Таким образом, к тому времени, когда я вызываю IsObject
, он больше не должен выдавать ошибку, что дает надлежащий результат, что позволяет выполнить проверку, как и ожидалось.
Пример ниже открывает окно IE и переходит к https://stackoverflow.com; ждет готовности DOM и затем нажимает на меню «Теги» на левой боковой панели (#nav-tags
);следовательно, перейдите на страницу «Метки», как и ожидалось.Очень похоже на ваш пример, так что вы можете легко использовать это в качестве руководства для определения вашего дела.
Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
IE.Navigate "https://stackoverflow.com"
IE.Visible = True
'Wait til DOM is ready
Do Until IE.ReadyState = 4 : Loop
If IsObject(IE.Document.GetElementById("nav-tags")) Then
IE.Document.GetElementById("nav-tags").Click()
End If
Set IE = Nothing