Web Scraping с использованием библиотек VBA и MSXML2.XMLHTTP - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь удалить данные с веб-сайта, используя объект 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 Ответ

0 голосов
/ 14 мая 2018

Попробуйте следующий подход. Он должен получить вам контент, который вы ищете. Дело в том, что вам нужно предоставить 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 
...