Я создаю код очистки веб-страниц для входа на веб-сайт и ввода некоторых данных. Перед переходом на фактическую страницу есть форма входа. Мой код работает, сначала нужно войти в систему. Однако веб-сайт не просит войти в систему, если вы уже вошли в систему. Есть ли способ проверить, нужен ли вход в систему или нет?
Вот мой код:
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
id = "login-bis-id-btn" присутствует на странице входа, а не на других.


Вы можете создать условный оператор, чтобы проверить, на какой странице вы находитесь. В этом случае может помочь следующая логика:
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
Тоже хороший способ обрамления +
Самая простая проверка — использовать querySelectorAll для возврата списка узлов и проверки его длины IMO. Внутри With .document...
If .querySelectorAll("#login-bis-id-btn").length > 0 Then
'present ....do login page stuff
Else
'do other stuff
End If
Это будет зависеть от веб-сайта, но я знаю, что во многих веб-приложениях в правом верхнем углу есть текст, который говорит «логин» или что-то подобное, но затем, если вы вошли в систему, он говорит что-то другое, например «моя учетная запись». . Вы можете просто сначала очистить эту область, чтобы увидеть, требуется ли вход в систему или нет.