我正在尝试使用Excel VBA刮取使用ASP.NET Ajax开发的网站。我正在使用Microsoft HTML对象库和Microsoft XML v6.0库。我想做的是,当我在第一个文本框中选择一个项目时,将第二个文本框中的所有项目都放在表中。
在第一个文本框中选择一个项目时,将自动加载第二个文本框中的项目。因此,首先我向website发出了GET
请求,然后我将所有带有类aspNetHidden
的元素都刮掉了。我向未出现在第一个抓取中的POST
字符串中添加了两个元素:ctl00$ctl18
,__ASYNCPOST
,以及它们各自的值。我还为第一个文本框ctl00$MainContent$cboDenominacionSocial
添加了值。
Sub Macro1()
'
' Macro1 Macro
'
' Declare variables
Dim xmlhttp As New MSXML2.XMLHTTP60
Dim urlMF As String
'
urlMF = "https://www.smv.gob.pe/Frm_EVCP?data=5A959494701B26421F184C081CACF55BFA328E8EBC"
'
'
xmlhttp.Open "GET", urlMF, False
'xmlhttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3842.0 Safari/537.36"
'xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
xmlhttp.send
Dim bodySMV As New HTMLDocument
bodySMV.body.innerHTML = xmlhttp.responseText
Dim topicsSMV As Object
Dim topicElem As Object
Set topicsSMV = bodySMV.getElementsByClassName("aspNetHidden")
Dim postReq As String
postReq = ""
i = 1
For Each topic In topicsSMV
Set topicElem = topic.getElementsByTagName("input")
For Each dataTopic In topicElem
Cells(i, 1) = dataTopic.Name
Cells(i, 2) = dataTopic.Value
temp = dataTopic.Name & "=" & dataTopic.Value
If i = 1 Then postReq = "ctl00%24ctl18=ctl00%24MainContent%24UpdatePanel1%7Cctl00%24MainContent%24cboDenominacionSocial"
If i > 1 Then postReq = postReq & Chr(38) & temp
i = i + 1
Next dataTopic
Next topic
postReq = postReq & "ctl00%24MainContent%24cboDenominacionSocial=156429&__ASYNCPOST=true&"
Cells(i, 1).Value = postReq
xmlhttp.Open "POST", urlMF, False
xmlhttp.send postReq
bodySMV.body.innerHTML = xmlhttp.responseText
'
End Sub
我想从第二个文本框中获取所有可能的元素列表,具体取决于第一个文本框的选择。 POST
请求中我缺少什么?