Web Scraping с использованием библиотеки VBA и MSXML2.XMLHTTP
Я пытаюсь удалить данные с веб-сайта, используя объект MSXML2.XMLHTTP в среде VBA (Excel), и не могу понять, как решить эту проблему! Веб-сайт выглядит следующим образом:
http://www.detran.ms.gov.br/consulta-de-debitos/
Ребята, вы можете использовать следующие тестовые данные для заполнения формы:
- Placa: oon5868
- Renavam: 1021783231
Я хочу получить данные типа "chassi", с данными выше, которые будут " 9BD374121F5068077".
У меня нет проблем с синтаксическим анализом HTML-документа, трудно получить информацию в ответ! Код ниже:
Sub SearchVehicle()
Dim strPlaca As String
Dim strRenavam As String
strPlaca = "oon5868"
strRenavam = "01021783231"
Dim oXmlPage As MSXML2.XMLHTTP60
Dim strUrl As String
Dim strPostData As String
Set oXmlPage = New MSXML2.XMLHTTP60
strUrl = "http://www2.detran.ms.gov.br/detranet/nsite/veiculo/veiculos/retornooooveiculos.asp"
strPostData = "placa=" & strPlaca & "&renavam=" & strRenavam
oXmlPage.Open "POST", strUrl, False
oXmlPage.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXmlPage.send strPostData
Debug.Print oXmlPage.responseText
End Sub
StrURL, используемый в методе POST ".../retornooooveiculos.asp", - это один из инструментов Google для разработчиков, и fiddler показал мне, что это был правильный адрес, который веб-сайт публиковал.
При ручном доступе веб-сайт получает правильную информацию, но, используя мой код, я всегда получаю следующий ответ на.responseText:
<html>Acesse: <b><a href='http://www.detran.ms.gov.br target='_parent'>www.detran.ms.gov.br</a></b></html>
ПОМОГИТЕ ПОЖАЛУЙСТА, я схожу с ума, пытаясь решить эту головоломку! Почему меня так перенаправляют?
Мне нужна информация "CHASSI" и я не могу найти правильный http Запрос для этого!
1 ответ
Попробуйте следующий подход. Это должно принести вам контент, который вы ищете. Дело в том, что вам нужно поставить Cookie
скопированы с вашего Request Headers
поля для работы вашего скрипта, которые вы можете найти с помощью devtools.
Sub SearchVehicle()
Const URL As String = "http://www2.detran.ms.gov.br/detranet/nsite/veiculo/veiculos/retornooooveiculos.asp"
Dim HTTP As New ServerXMLHTTP60, HTML As New HTMLDocument
Dim elem As Object, splaca$, srenavam$, qsp$
splaca = "oon5868"
srenavam = "01021783231"
qsp = "placa=" & splaca & "&renavam=" & srenavam
With HTTP
.Open "POST", URL, False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "Cookie", "ISAWPLB{07D08995-E67C-4F44-91A1-F6A16337ECD6}={286E0BB1-C5F9-4439-A2CE-A7BE8C3955E0}; ASPSESSIONIDSCSDSCTB=AGDPOBEAAPJLLMKKIGPLBGMJ; 69137927=967930978"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send qsp
HTML.body.innerHTML = .responseText
End With
For Each elem In HTML.getElementsByTagName("b")
If InStr(elem.innerText, "Chassi:") > 0 Then MsgBox elem.ParentNode.NextSibling.innerText: Exit For
Next elem
End Sub
Еще раз: заполните Cookie
поле, собирая его, используя ваши devtools (из Request Headers
раздел), если по какой-то причине мой предоставлен Cookie
не работает для вас Благодарю.
Вывод получаю:
9BD374121F5068077