Попытка получить для поиска широты и долготы мест с помощью VBA с веб-страницы.кнопка поиска нажатием через vba не работает - PullRequest
0 голосов
/ 23 ноября 2018

При выполнении этого кода он заполняет необходимое текстовое поле на веб-сайте, но нажатие кнопки поиска дает вывод «не найден» в окне сообщения.

Впоследствии, если я вручную просто нажимаю на текств поле на заполненное значение, а затем нажмите кнопку поиска, он показывает желаемый результат.

Как я могу заставить эту работу?

Public Sub experiment()

    Dim ie As InternetExplorer
    Set ie = New InternetExplorer
    ie.navigate "https://www.latlong.net/"

     Do
     DoEvents
     Loop Until ie.readyState = READYSTATE_COMPLETE

     Dim doc As HTMLDocument
     Set doc = ie.document
     Dim inputElement As HTMLInputElement

     Set inputElement = doc.getElementsByClassName("width70")(0)     
     inputElement.Value = "Delhi Airport, India"

     ie.Visible = True

     doc.getElementById("btnfind").Click


     Do

     DoEvents

     Loop Until ie.readyState = READYSTATE_COMPLETE

End Sub

1 Ответ

0 голосов
/ 23 ноября 2018

Вместо того, чтобы автоматизировать IE и взаимодействовать со страницей, как это сделал бы пользователь, приведенный ниже код должен эмулировать запрос, запускаемый кнопкой 'Find' на странице, но вам необходимо присвоить значение placeName в коде (в настоящее время это "Delhi Airport, India").

Если вас интересуют только координаты (и никакой другой информации на остальной части страницы), то этот подход может быть вам полезен.

Вам нужно добавить ссылку (Tools > References > Scroll down and tick Microsoft XML, v6.0 > OK), прежде чем пытаться запустить код.

Option Explicit

Private Sub Experiment()
    Dim placeName As String
    placeName = "Delhi Airport, India"

    Dim WebClient As MSXML2.ServerXMLHTTP60
    Set WebClient = New MSXML2.ServerXMLHTTP60

    With WebClient
        .Open "POST", "https://www.latlong.net/_spm4.php", True
        .setRequestHeader ":authority", "www.latlong.net"
        .setRequestHeader ":method", "POST"
        .setRequestHeader ":path", "/_spm4.php"
        .setRequestHeader ":scheme", "https"
        .setRequestHeader "accept", "*/*"
        .setRequestHeader "content-type", "application/x-www-form-urlencoded"
        .setRequestHeader "origin", "https://www.latlong.net"
        .setRequestHeader "referer", "https://www.latlong.net/"
        .setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
        .setRequestHeader "x-requested-with", "XMLHttpRequest"

        Dim bodyToSend As String
        bodyToSend = "c1=" & Application.EncodeURL(placeName) & "&action=gpcm&cp="

        .send bodyToSend
        .waitForResponse

        MsgBox ("Server's response to the request for Place Name '" & placeName & "' is " & _
                vbNewLine & vbNewLine & .responseText)
    End With
End Sub

Вы можете получить доступ к ответу сервера (который будет содержать координаты, если запрос был успешным).) с WebClient.responseText (или просто .responseText внутри оператора With) - и затем сделайте с ним то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...