Я бы использовал буфер обмена и синхронизированные циклы.Существует возможность для повторного факторинга, который я сделаю позже.
На странице выполняется запрос POST xhr для результатов, поэтому используйте инструменты разработчика, которые вы сможете скопировать.Он использует этот URL: http://hydro.imd.gov.in/hydrometweb/(S(yir33wzdcp5kls450czjmh45))/DistrictRaifall.aspx. См. Комментарий в конце.
Option Explicit
'VBE > Tools > References:
' Microsoft Internet Controls
Public Sub MakeSelections()
Dim ie As InternetExplorer, commodity As String, iDate As String, clipboard As Object, arr()
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Set ie = New InternetExplorer
commodity = "MADHYA PRADESH"
iDate = "REWA"
With ie
.Visible = True
.Navigate2 "http://hydro.imd.gov.in/hydrometweb/(S(3qitcijd521egpzhwqq3jk55))/DistrictRaifall.aspx"
While .Busy Or .readyState < 4: DoEvents: Wend
.document.querySelector("[value='" & commodity & "']").Selected = True
.document.querySelector("[name=listItems]").FireEvent "onchange"
arr = ElementFound(.document, "[value='" & iDate & "']")
If Not arr(0) Then Exit Sub
arr(1).Selected = True
.document.querySelector("#GoBtn").Click
arr = ElementFound(.document, "#GridId")
If Not arr(0) Then Exit Sub
clipboard.SetText arr(1).outerHTML
clipboard.PutInClipboard
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).PasteSpecial
.Quit
End With
End Sub
Public Function ElementFound(ByRef document As Object, ByVal selector As String) As Variant
Dim ele As Object, t As Date, arr(0 To 1)
Const MAX_WAIT_SEC As Long = 5
t = Timer
Do
On Error Resume Next
Set ele = document.querySelector(selector)
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ele Is Nothing
If Not ele Is Nothing Then
arr(0) = True
Else
arr(0) = False
End If
Set arr(1) = ele
ElementFound = arr
End Function
XHR:
Тело POST включает параметры
__ EVENTTARGET:vbNullString
__ EVENTARGUMENT: vbNullString
__ LASTFOCUS: vbNullString
__ VIEWSTATE: будет получено.В моем случае, по крайней мере, получение этого из предыдущего GET не работало
__ VIEWSTATEGENERATOR: 6C290774 '<статическое, но его можно получить из предыдущего GET </p>
listItems: MADHYA PRADESH' замените пробелы на +
DistrictDropDownList: REWA
GoBtn: GO