Активируйте кнопку на веб-странице с помощью VBA на MsAccess - PullRequest
0 голосов
/ 10 января 2020

Привет! Я пытаюсь написать утилиту для получения данных с этого веб-сайта (www.coned.com/tcisng) и выгрузить данные в свой бэкэнд Ms Access. Когда я перехожу к нему и ввожу свои учетные данные (имя пользователя и пароль), он не активирует кнопку «Вход в систему», которую я хочу нажать далее, поскольку это следующий шаг на моем скребке. Также эта кнопка «Войти» не имеет имени или идентификатора. Как активировать и заставить его щелкнуть, используя VBA в Ms Access 2016.

Обновлен фрагмент кода -

Dim ie As Object

Set ie = CreateObject("internetexplorer.application")

ie.Visible = True

ie.Navigate "www.coned.com/tcisng"

While ie.Busy

DoEvents

Wend

Do

DoEvents

Loop Until ie.ReadyState = READYSTATE_COMPLETE

ie.Document.all("LoginEmail").Value = "myemail"

ie.Document.all("LoginPassword").Value = "myPassword"

Do

DoEvents

Loop Until ie.ReadyState = READYSTATE_COMPLETE


While ie.Busy

DoEvents

Wend

'ie.Document.all(48).Click

'ie.Document.querySelector("[type=submit]").Click

ie.Document.querySelector("button[title*='Log in']").Click

В последней 3 строке я пытаюсь выбрать кнопку «Войти», но он отключен, также у него нет имени или идентификатора, вы также можете помочь, какой именно код заменить, чтобы активировать кнопку и щелкнуть ее позже.

1 Ответ

0 голосов
/ 15 января 2020

Вместо того, чтобы пытаться «нажать» кнопку, попробуйте отправить форму. Javascript для этой страницы ConEdison было бы:

document.getElementById("form-login-email").form.submit()

В «старые времена», с простой формой, это будет работать нормально.

Но на этом сайте есть много чего еще происходит. К этому элементу ввода электронной почты прикреплено девять событий. Просто заполняя значение, вы не запускаете ни одно из этих событий.

Например, для форм, созданных с использованием ReactJS, отслеживается взаимодействие пользователя с элементом Input, а значение извлекается и сохраняется в неотображаемом объекте в дереве DOM. При нажатии кнопки «Отправить» видимые элементы ввода формы могут вообще не использоваться. Чтобы вводить данные в такие формы, вам необходимо понимать ReactJS структуры данных и напрямую ими манипулировать.

Недавно я создал скребок на основе Chromedriver, который позволяет управлять окном браузера Chrome. из внешней программы, такой как Access VBA. После запуска Chromedriver запускается как мини-веб-сервер на локальном хосте, и команды, отправляемые ему из Access VBA (через объект ServerXMLHTTP60), заставляют его запускать Chrome, посещать URL-адреса, отправлять нажатия клавиш элементам ввода и т. Д. c. В браузере нажатия клавиш запускают все события, которые будут совершать нажатия клавиш человеком. Целевой веб-сайт был основан на ReactJS, но я смог игнорировать всю внутреннюю сложность ReactJS.

Поскольку веб-сайт работает в обычном браузере Chrome, я смог использовать F12 Инструменты разработчика в процессе разработки.

Технология Webdriver, разработанная для создания инструментов тестирования веб-сайтов. Также существуют версии Firefox и MS Edge Chromium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...