Элементы, которые вы хотите, находятся в тегах strong
( полужирный ) и являются первыми двумя на странице, поэтому вы можете использовать более быстрый селектор CSS из strong
и делать
Dim items As Object, i As Long, taxInfo As String, motInfo As String
Set items = ie.document.querySelectorAll("strong")
taxInfo = items.item(0).innerText
motInfo = items.item(1).innerText
только для дат:
taxInfo = Replace$(items.item(0).innerText,"Tax due: ",vbNullString)
motInfo = Replace$(items.item(1).innerText,"Expires: ",vbNullString)
Вот что-то похожее с использованием css-селекторов, для которых современные веб-страницы оптимизированы, поэтому они работают быстрее.# Является селектором идентификатора.Я использовал таймер ожидания, чтобы убедиться, что окно поиска присутствует при регистрации.Существует элементарная проверка в случае, если транспортное средство не найдено.
Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub CheckTax()
Dim ie As InternetExplorer, searchBox As Object, t As Date, ws As Worksheet
Const MAX_WAIT_SEC As Long = 20
Dim inputValues(), i As Long
Set ie = New InternetExplorer
Set ws = ThisWorkbook.Worksheets("INPUT & DATA RESULTS")
inputValues = Application.Transpose(ws.Range("F3:F5").Value) '<=change range here for range containing values to lookup
With ie
.Visible = True
For i = LBound(inputValues) To UBound(inputValues)
.Navigate2 "https://vehicleenquiry.service.gov.uk/"
While .Busy Or .readyState < 4: DoEvents: Wend
t = Timer
Do
On Error Resume Next
Set searchBox = .document.querySelector("#Vrm")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While searchBox Is Nothing
If searchBox Is Nothing Then
Exit Sub
Else
searchBox.Focus
searchBox.Value = inputValues(i)
End If
.document.querySelector(".button").Click
While .Busy Or .readyState < 4: DoEvents: Wend
If .document.querySelectorAll("h3").Length > 0 Then
ws.Cells(i + 2, "G") = "Vehicle details could not be found"
ws.Cells(i + 2, "H") = "Vehicle details could not be found"
Else
t = Timer
Do
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ie.document.querySelectorAll("#Correct_True").Length = 0
ie.document.querySelector("#Correct_True").Click
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector(".button").Click
While .Busy Or .readyState < 4: DoEvents: Wend
Dim items As Object, taxInfo As String, motInfo As String
t = Timer
Do
On Error Resume Next
Set items = ie.document.querySelectorAll("strong")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While items.Length = 0
'taxInfo = items.item(0).innerText
'motInfo = items.item(1).innerText
'Debug.Print taxInfo, motInfo
taxInfo = Replace$(items.item(0).innerText, "Tax due: ", vbNullString)
motInfo = Replace$(items.item(1).innerText, "Expires: ", vbNullString)
ws.Cells(i + 2, "G") = taxInfo
ws.Cells(i + 2, "H") = motInfo
End If
Set searchBox = Nothing: Set items = Nothing
Next
.Quit
End With
End Sub