IE скрипт для управления формами на основе данных Excel - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь:

  1. открыть определенный URL и пройти регистрационную информацию
  2. получить данные из Excel и выполнить поиск по указанным данным
  3. после завершения поиска манипулируйте полем данных для сопоставления данных Excel и выполняйте несколько команд в приложении
  4. закрыть IE или цикл поиска следующей ячейки в данных

Я пытался использовать формы и модули VBA.

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

Эти объекты all.email & all.password будут найдены в исходном коде на веб-странице как идентификатор?

HTMLDoc.all.Email.Value = "email@example.com"
HTMLDoc.all.Password.Value = "ex5566"

Dim HTMLDoc As HTMLDocument
Dim oBrowser As InternetExplorer

Sub Login_2_Website() 
    Dim oHTML_Element As IHTMLElement
    Dim sURL As String

    On Error GoTo Err_Clear
    sURL = "example.com"
    Set oBrowser = New InternetExplorer
    oBrowser.Silent = True
    oBrowser.timeout = 60
    oBrowser.navigate sURL
    oBrowser.Visible = True

    Do
    ' Wait till the Browser is loaded
    Loop Until oBrowser.readyState = READYSTATE_COMPLETE

    Set HTMLDoc = oBrowser.Document

    HTMLDoc.all.Email.Value = "email@example.com"
    HTMLDoc.all.Password.Value = "ex5566"

    For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
        If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
    Next

    ' oBrowser.Refresh ' Refresh If Needed
Err_Clear:
    If Err <> 0 Then
        Err.Clear
        Resume Next
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Веб-разработчик может назвать свои входы, кнопки, формы, идентификаторы, как они хотят. Адрес электронной почты может называться Email, ID или Имя пользователя, или XYZ, поэтому вы должны проверить элементы на веб-сайте, чтобы вы могли соответствующим образом создать свой код. Возьмем, к примеру, твиттер.

<input class="js-username-field email-input js-initial-focus" type="text" name="session[username_or_email]" autocomplete="on" value="" placeholder="Phone, email or username">

Тег является тегом input, с именем класса js-username-field email-input js-initial-focus на нем нет идентификатора, поэтому вы не можете использовать HTMLDoc.getElementByID, вам нужно использовать HTMLDoc.getElementsByClassName или вы можете использовать HTMLDoc.getElementsByTagName но если имеется более 1 входа, вы должны зациклить их и правильно определить тот, который вам нужен.

Это проще, чем кажется, но вы должны иметь базовые знания HTML. Продолжая с твиттером, тег для пароля:

<input class="js-password-field" type="password" name="session[password]" placeholder="Password">

Другой класс и другое имя, чтобы различать их. И, наконец, кнопка входа в систему / отправки:

<button type="submit" class="submit EdgeButton EdgeButton--primary EdgeButtom--medium">Log in</button>

Используя эти 3 части HTML-элементов, вы можете войти в систему следующим образом:

HTMLDoc.getElementsByClassName("js-username-field email-input js-initial-focus")(0).Value = "email@example.com"
HTMLDoc.getElementsByClassName("js-password-field")(0).Value = "ex5566"
HTMLDoc.getElementsByClassName("submit EdgeButton EdgeButton--primary EdgeButtom--medium")(0).Click

Что означает (0)? в HTML вы можете иметь много тегов с одним и тем же именем класса, и все они находятся в массиве, когда вы вызываете getElementsByClassName, так как на сайте входа в систему есть только 1 тег с этими именами классов, позиция массива "0" - это то, что вы ищу.

Опять же, разработчик может назвать класс, идентификатор, что угодно, поэтому вы хотите проверить сайт на предмет правильного кодирования вашего скрипта.

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

Я думаю, вы можете использовать тот же код, который вы используете для поиска кнопки отправки, чтобы найти элементы электронной почты и пароля. Если вы знаете, какое имя или идентификатор имеют эти элементы (проверяя HTML-код страницы), вы можете использовать, например, If oHTML_Element.Name = "password" then oHTML_Element.Value = "ex5566"

Если конкретные элементы имеют идентификатор, вы также можете перейти к ним напрямую, используя oHTML_Element = document.getElementById("[id of element]") oHTML_Element.Value = "password" Это также можно сделать, если у них нет идентификатора, а только имя, но тогда вам нужно выяснить, имя используется несколько раз.

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