VBscript Создание объекта из элемента IE

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

Я пытаюсь щелкнуть элемент с помощью 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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
829
1

Ответы 1

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

Спасибо за ответ lenilsondc! Ну, когда я это делаю, я получаю сообщение об ошибке «Требуется объект». Извините, позвольте мне отредактировать исходный пост, указав полную процедуру, включая WITH. Может я что-то там не так сделал?

MushroomKing 01.02.2019 15:55

@MushroomKing вы запускаете файл vbs или запускаете VBScript внутри html-страницы в теге сценария?

lenilsondc 01.02.2019 17:15

Я использую файл vbs.

MushroomKing 01.02.2019 17:37

@MushroomKing Я обновил свой ответ, думаю, на этот раз я его понял. Проверьте это.

lenilsondc 01.02.2019 18:42

Здорово! Это лучшее решение, чем то, что я придумал! Я буду использовать его. Большое спасибо. Я использовал "If IsNull(IE.Document.getElementByID("...") Then..." Который также работает в этом случае без ошибок.

MushroomKing 03.02.2019 20:03

@MushroomKing да, IsNull также должен работать после того, как DOM будет готов. В любом случае, не стесняйтесь принять ответ, если он был полезен, ура :{D

lenilsondc 04.02.2019 11:19

Это точно было :). Работает отлично. Спасибо. В настоящее время я действительно застрял на чем-то связанном. Не знаю создавать ли новую тему. Но когда я нажимаю кнопку загрузки, я получаю всплывающее окно от интернет-безопасности и должен нажать «Разрешить». Я попытался обратиться к всплывающему окну с помощью PID, но оно встроено в IE. :S не уверен, как сфокусироваться на нем и как "ждать" его загрузки....

MushroomKing 06.02.2019 09:20

Я не уверен, возможно ли это, но это был бы совершенно новый вопрос, который нужно задать на SO.

lenilsondc 06.02.2019 11:26

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