Предполагая, что вы захотите зациклить все страницы (но также и показать, как выбрать данную страницу), вам нужно проверить, какая в данный момент активная страница, а затем зациклить другие страницы. Условия ожидания требуются наряду с обработкой ошибок, чтобы избежать пузырей исключений устаревших элементов, так как разрешение отклонено, а элемент не найден.
Пояснение:
Это
currentPage = CLng(.querySelector(".active").innerText)
находит текущую активную страницу. Текущая активная страница имеет атрибут класса со значением active
. .
- это селектор класса css .
Это
If page <> currentPage Then
игнорирует текущую активную страницу в цикле по всем страницам.
Это
cssSelector = ".setPage[data-value='" & page & "']"
определяет селектор для выбора любой данной страницы путем объединения номера страницы в атрибут data-value
. Он комбинируется с селектором класса, .
, из setPage
для ограничения соответствующими элементами для выбора страницы:
Пример страницы [data-value='pageNumber']
, pageNumber
, например 2, является атрибутом css attribute = value .
Если вы изучите HTML ниже:
Вы можете видеть, что если текущая активная страница равна 1, то есть значение атрибута класса = active
и атрибута data-value
нет. Для выбора второй страницы вы можете видеть, что значение класса в настоящее время setPage
, а data-value
равно 2
.
Это
.querySelector(cssSelector).Click
выбирает следующую страницу в цикле.
Это
Do
On Error Resume Next
num = CLng(.querySelector(".active").innerText)
On Error GoTo 0
Loop Until num = page
повторяется до тех пор, пока для выбранного номера страницы не будет активно значение атрибута класса, а его значение innerText = = на нужную страницу, т.е. с выбором страницы 2, когда num = 2, так что html изменяется на:
Вы можете переписать этот цикл несколькими способами с различными условиями, но этот работает просто отлично.
VBA:
Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub GetData()
Dim ie As Object, numberOfPages As Long, currentPage As Long, page As Long
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate2 "https://cebra.com.ar/category/73/Juego-de-Construccion.html"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
numberOfPages = .querySelectorAll(".setPage").Length
currentPage = CLng(.querySelector(".active").innerText)
Dim cssSelector As String, num As Long
For page = 1 To numberOfPages
If page <> currentPage Then
cssSelector = ".setPage[data-value='" & page & "']"
.querySelector(cssSelector).Click
Do
On Error Resume Next
num = CLng(.querySelector(".active").innerText)
On Error GoTo 0
Loop Until num = page
While ie.Busy Or ie.readyState < 4: DoEvents: Wend
End If
Next
End With
.Quit
End With
End Sub