Вот очень уродливый код, который нуждается в улучшении, использующий IE и продолжающий нажимать кнопку «Далее» для ожидаемого количества страниц на основе 20 результатов на страницу.
Если есть способ создать как POST XMLHTTPRequestЯ бы пошел по этому пути.Еще лучше было бы, если бы API существовал.
Option Explicit
Public Sub LoopPages()
Dim IE As New InternetExplorer, t As Date, num As String, i As Long
Const MAX_WAIT_SEC As Long = 5
Const RESULTS_PER_PAGE = 20
With IE
.Visible = True
.navigate "https://www.rigzone.com/oil/jobs/search/"
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
.getElementById("txtSearch").Value = "Health"
.getElementById("txtLocation").Value = "Paris, France"
.getElementById("btnBasicSearch").Click
End With
While .Busy Or .readyState < 4: DoEvents: Wend
Application.Wait Now + TimeSerial(0, 0, 4)
t = Timer
Do
On Error Resume Next
num = Split(Split(.document.querySelector(".rz-table-dd-sm + div").innerText, "of ")(1), Chr$(32))(0)
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While num = vbNullString
'do stuff with initial page
On Error GoTo errhand
num = Round(CLng(num) / RESULTS_PER_PAGE, 0)
num = IIf(num < 1, 1, num)
For i = 1 To num
.document.querySelector(".next").Click
While .Busy Or .readyState < 4: DoEvents: Wend
'other code with new page
Next
Stop '<== Delete me later
errhand:
.Quit
End With
End Sub
Комбинация селектора CSS:
.rz-table-dd-sm + div
. При этом используется селектор соседних сестер "+"
для выбораdiv
рядом с элементом с классом rz-table-dd-sm
."."
является селектором класса.