Возможно, ознакомьтесь с css-селекторами , где вы можете указать шаблон для сопоставления с узлом в виде строки, которую вы затем передаете функции. Просто немного воспользуйтесь функцией и убедитесь, что вы используете последовательное именование. В настоящее время вы не возвращаетесь из своей функции из-за того, что переменная конца присваивания имеет другое имя. Для большей гибкости также передайте время ожидания как параметр.
Непосредственными преимуществами является то, что вам не нужно беспокоиться обо всех различных цепочечных методах (getElementsBy ....), и вы используете метод, который современенбраузеры оптимизированы для.
Option Explicit
Public Sub test()
Dim ie As New InternetExplorer, url As String, result As Boolean
Dim strMessageContent As String, compareString As String
Const MAX_WAIT_SEC As Long = 10
url = "https://example.com"
With ie
.Visible = True
.Navigate2 "url"
While .Busy Or .readyState < 4: DoEvents: Wend
cssSelector = ".container.centered-form.single-column.clearfix"
result = checkLoginUrl(ie, cssSelector, strMessageContent, compareString, MAX_WAIT_SEC) 'you might consider renaming 'result' as 'found' _
and move the final If statement out the function and have it following here ......
Stop
.Quit
End With
End Sub
Public Function checkLoginUrl(ByVal ie As Object, ByVal cssSelector As String, ByVal strMessageContent As String, compareString As String, ByVal MAX_WAIT_SEC As Long) As Boolean
Dim t As Date, ele As Object, dd As String, found As Boolean
t = Timer
Do
On Error Resume Next
Set ele = ie.document.querySelector(cssSelector)
dd = ele.innerText
found = InStr(dd, compareString) > 0
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop Until found
If found Then
Printlog strMessageContent & " loaded successfully"
Else
Printlog "Tried to log on for " & MAX_WAIT_SEC & " seconds without success"
Printlog strMessageContent & " failed to load"
End If
checkLoginUrl = found
End Function