Проверьте, вошел ли пользователь в систему, и пропустите, если это правда

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

Вот мой код:

Sub ChechAutomate()
    Dim ie As New InternetExplorer, url As String, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Other Data")

    url = "https://infra.com/"

    With ie
        .Visible = True
        .Navigate2 url

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

        With .Document
            .querySelector("[name=userName]").Value = "username"
            .querySelector("[name=password]").Value = "password123"
            .querySelector("[type=submit]").Click

            'While .Busy Or .ReadyState < 4: DoEvents: Wend

            .querySelector("[id=companySearchKeyData]").Value = ws.Range("T24").Value
            .querySelector("[type=submit]").Click
        End With

    End With

End Sub

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

Greg Viers 27.05.2019 17:33

id = "login-bis-id-btn" присутствует на странице входа, а не на других.

hatman 27.05.2019 17:49
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
2
569
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете создать условный оператор, чтобы проверить, на какой странице вы находитесь. В этом случае может помочь следующая логика:

Sub ChechAutomate()
    Dim IE As New InternetExplorer, url As String, ws As Worksheet
    Dim Html As HTMLDocument, idCheck As Object

    Set ws = ThisWorkbook.Sheets("Other Data")

    url = "https://infra.com/"

    With IE
        .Visible = True
        .Navigate2 url
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set Html = .document
    End With

    Set idCheck = Html.querySelector("#login-bis-id-btn")
    If Not idCheck Is Nothing Then
        Html.querySelector("[name=userName]").Value = "username"
        Html.querySelector("[name=password]").Value = "password123"
        Html.querySelector("[type=submit]").Click
        While IE.Busy Or IE.readyState < 4: DoEvents: Wend
    Else:
        Debug.Print "You are already logged-in"
    End If

    'I don't know the role of the following two lines, though

    Html.querySelector("[id=companySearchKeyData]").Value = ws.Range("T24").Value
    Html.querySelector("[type=submit]").Click
End Sub

Тоже хороший способ обрамления +

QHarr 27.05.2019 20:31
Ответ принят как подходящий

Самая простая проверка — использовать querySelectorAll для возврата списка узлов и проверки его длины IMO. Внутри With .document...

If .querySelectorAll("#login-bis-id-btn").length > 0 Then
    'present ....do login page stuff
Else
    'do other stuff
End If

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