Невозможно войти на сайт с помощью макроса и VBA - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь войти на веб-сайт, используя следующее, которое работает по другому адресу

Sub Mylogin()

    Dim MyHTML_Element As IHTMLElement
    Dim MyURL As String
    On Error GoTo Err_Clear
    MyURL = "MYURL"
    ie.Silent = True
    ie.Navigate MyURL
    ie.Visible = True
    Do
    Loop Until ie.ReadyState = READYSTATE_COMPLETE
        Set HTMLDoc1 = ie.Document
        HTMLDoc1.all.Email.Value = "MYEMAIL" 'Enter your email id here
        HTMLDoc1.all.Password.Value = "MYPASSWD" 'Enter your password here
        For Each MyHTML_Element In HTMLDoc1.getElementsByTagName("input")
            If MyHTML_Element.Type = "submit" Then MyHTML_Element.Click: Exit For
        Next
        Err_Clear:
        If Err <> 0 Then
            Err.Clear
            Resume Next
        End If

End Sub

Кнопка отправки находится под div, и я не знаю, если это проблема.Html-логин выглядит следующим образом:

<div id="login-area-main">
       <div id="user">
            <div id="username">
            <input name="p$lt$ctl01$LogonFormIndice$loginElem$UserName" type="text" maxlength="50" id="p_lt_ctl01_LogonFormIndice_loginElem_UserName" placeholder="E-mail" />
            <span class="CMSValidator"><span id="p_lt_ctl01_LogonFormIndice_loginElem_rfvUserNameRequired" title="Please enter a user name." class="profile-validator validator error-message" style="display:none;">
            </span></span>
            </div>
            </div>
            <div id="pass">
            <div id="password">
            <input name="p$lt$ctl01$LogonFormIndice$loginElem$Password" type="password" maxlength="20" id="p_lt_ctl01_LogonFormIndice_loginElem_Password" placeholder="Password" />
            <span class="CMSValidator"><span id="p_lt_ctl01_LogonFormIndice_loginElem_rfvPasswordRequired" class="profile-validator validator error-message" style="visibility:hidden;">
            </span></span>
            </div>
            </div>
            <div id="pass-forgot">
            <p><a href="/Special-Pages/ForgotPassword">Forgot Password</a></p>
            </div>
            <div id="submit-button">
            <a id="p_lt_ctl01_LogonFormIndice_loginElem_btnLogon" class="buyBtn button" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;p$lt$ctl01$LogonFormIndice$loginElem$btnLogon&quot;, &quot;&quot;, true, &quot;p_lt_ctl01_LogonFormIndice_MiniLogon&quot;, &quot;&quot;, false, true))"></a>
            </div>

Нужно ли что-то делать с

MyHTML_Element.Type = "submit"

И помещать его в div id?

Я заметил, что HTMLDoc1пустой..!должно ли оно быть пустым?

Я попробовал следующее, но ничего не отображалось или не щелкнул

Const Url$ = "URL"

Dim UserName As String, Password As String, LoginData As Worksheet
Set LoginData = ThisWorkbook.Worksheets("MySheet")
UserName = LoginData.Cells(1, "K").Value
Password = LoginData.Cells(2, "K").Value

Dim iex As Object
Set iex = CreateObject("InternetExplorer.Application")

With iex

    .Navigate Url
    ieBusy iex
    .Visible = True
    Dim oLogin As Object, oPassword As Object
    iex.Document.querySelector(".username [id='p_lt_ctl01_LogonFormIndice_loginElem_UserName']").Focus
    Set oLogin = iex.Document.querySelector(".username [id='p_lt_ctl01_LogonFormIndice_loginElem_UserName']").Value = ""
    Set oPassword = iex.Document.querySelector(".password [type=password]").Value = ""

    oLogin.Value = UserName
    oPassword.Value = Password
    iex.Document.getElementById("submit-button").Click

End With

Он запрашивает объект об

iex.Document.querySelector("id='p_lt_ctl01_LogonFormIndice_loginElem_UserName']").Focus

1 Ответ

0 голосов
/ 14 декабря 2018

Меня смущает, где ваша настоящая проблема.

Существует идентификатор для отправки

ie.document.getElementById("submit-button").click   ' 0r .submit

Для имени пользователя:

ie.document.querySelector("[id='p_lt_ctl01_LogonFormIndice_loginElem_UserName']").value = ""

Для пароля

ie.document.querySelector("[type=password]").value = ""

При вводе значений иногда полезно использовать .Focus на элементе перед присвоением .value.

Public Sub GetInfo()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .navigate URL

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document.querySelector("[id='p_lt_ctl01_LogonFormIndice_loginElem_UserName']")
            .Focus
            .value = ""
        End With
        With .document.querySelector("[type=password]")
            .Focus 
            .value = ""
        End With
        .document.getElementById("submit-button").click

        While .Busy Or .readyState < 4: DoEvents: Wend
        Stop
        'Quit 
    End With

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