Комментарии:
Вот пример с селеном базовым, который должен легко адаптироваться к циклу или даже переписывать для Internet Explorer.
Вы можете поиграть с добавлением явного времени ожидания, если пожелаете (спасибо @Topto за напоминание об этом).Примеры показаны ниже.Единственный случай, когда явное ожидание в стиле селена, похоже, не работает, - это Passport #.Здесь я добавил цикл, чтобы убедиться, что он отображается перед попыткой обновления.
Ссылки:
Оболочка selenium basic свободно.После установки вы идете VBE> Инструменты> Ссылки> Библиотека типов Selenium
TODO:
Это должно было продемонстрировать принципы.Вы можете легко запустить драйвер, а затем заставить ваш цикл выбрать переменные из листа и выдать новые запросы GET.
Код:
Option Explicit
Public Sub MOLScraping()
'Tools > references > selenium type library
Dim d As New ChromeDriver '<== can change to other supported driver e.g. IE
Const URL = "https://eservices.mol.gov.ae/SmartTasheel/Complain/IndexLogin?lang=en-gb"
With d
.Start
.Get URL
.FindElementByCss("button[ng-click='showEmployeeSearch()']").Click
Do
DoEvents
Loop Until .FindElementById("txtPassportNumber").IsDisplayed
.FindElementById("txtPassportNumber", timeout:=20000).SendKeys "123456"
.FindElementById("Nationality").SendKeys "ALBANIA"
.FindElementByCss("td.ng-binding").Click
.FindElementById("txtBirthDate", timeout:=20000).SendKeys "12/01/20009"
.FindElementByCss("td.active.day").Click
.FindElementByCss("button[onclick*='SearchEmployee']").Click
Stop
'QUIT
End With
End Sub
РЕДАКТИРОВАТЬ
Нет ответа на основе селена (на основе ответа @ SIM, на который вы ссылались)
Option Explicit
Public Sub GetData()
Dim res As Variant, QueryString As String, Permit As Long, Name As String, i As Long
Dim passportNumber As String, personNationality As Long, birthdate As String
Dim sht As Worksheet, lastRow As Long
Set sht = ActiveSheet
With sht
lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
End With
For i = 2 To lastRow
QueryString = "{""PersonPassportNumber"":""" & sht.Cells(i, 3) & """,""PersonNationality"":""" & sht.Cells(i, 4) & """,""PersonBirthDate"":""" & sht.Cells(i, 5) & """}"
With CreateObject("MSXML2.serverXMLHTTP") 'New XMLHTTP60
.Open "POST", "https://eservices.mol.gov.ae/SmartTasheel/Dashboard/GetEmployees", False
' .setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Content-Type", "application/json"
.send QueryString
res = .responseText
Debug.Print res
End With
Permit = Replace(Split(Split(s, """OtherData"":""")(1), ",")(0), Chr$(34), vbNullString)
Name = Split(Split(Split(res, "Employees"":")(1), "OtherData2"":""")(1), """}")(0)
sht.Cells(i, 1) = Permit: sht.Cells(i, 2) = Name
Next i
End Sub