VBscript Создать объект из элемента IE - PullRequest
0 голосов
/ 01 февраля 2019

Я пытался найти ответ, но безрезультатно.Я бью стену каждый раз.Может быть, кто-то может помочь?

Я пытаюсь нажать на элемент с VBscript на веб-сайте.Это работает.Однако сначала я хочу проверить, существует ли элемент с помощью цикла.Это сработало бы, если бы не ошибка «Недопустимое использование нуля», которую я получаю с кодом ниже.

Как создать объект, чтобы проверить, существует ли он из элемента IE?

Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
IE.Navigate "url"
With IE.Document

Do
if not CreateObject(.getElementByID("formButton2343255")) is nothing then            
.getElementByID("formButton2343255").Click()
Exit Do
End if
WScript.Sleep 500 
Loop

SET objWshShell = Nothing
End With
End Function

Я ожидаю, что кнопка будет нажата.Но либо мой объект не существует, либо я получаю недопустимое использование null в этом случае.

1 Ответ

0 голосов
/ 01 февраля 2019

Я попробовал код, который вы разместили в моем собственном скрипте, и думаю, что нашел решение.Чтобы проверить, существует ли элемент, вы должны использовать функцию 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
...