Вытяните одно значение идентификатора диапазона за iFrame - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь получить одно значение с рабочего веб-сайта, который обновляется каждые 5 минут. Для этого я использую HTTP-запрос Get. Однако у меня возникают проблемы с получением нужного мне числа. Это идентификатор диапазона, который находится за элементом iFrame. FlowWidget - это идентификатор iframe. Вот мой код, который у меня уже есть. Я новичок в VBA, так что это было сделано после большого количества исследований, но теперь я застрял. Я получаю код ошибки «объектная переменная или переменная блока не установлена» в строке «Установить номер». Спасибо всем, кто готов помочь.

        H.SetAutoLogonPolicy 0
        H.SetTimeOuts 0, 0, 0, 0
        H.Open "GET", URL, False
        H.send
        H.WaitForResponse


        If H.Status <> 200 Then
        MsgBox H.Status & " - " & H.statusText
        Exit Sub
        End If

        Debug.Print H.responseText

        doc.Body.innerHTML = H.responseText

       Dim elemCollection As IHTMLElementCollection

       Set elemCollection = doc.frames("FlowWidget").document.all
       Set Number = elemCollection.Item("force_induct_count_value").innerText

       Dim inductAmount As String

       If Not Number Is Nothing Then inductAmount = Number.innerText

       Set doc = Nothing

      Range("A1").Value = inductAmount

      End Sub

Идентификатор диапазона, который мне нужен из Интернета, выглядит следующим образом:

<span id="force_induct_count_value" class="boson-text-size-4">19201</span>

1 Ответ

0 голосов
/ 12 июля 2020

Это должно сработать. Я сделал предположение, что идентификатор всегда будет force_induct_count_value. И если это так, это должно сработать. Но вы, вероятно, можете просто взять функцию «Разделить» и подключить ее к своей подпрограмме.

 Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
Url = ""
objHTTP.Open "POST", Url, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("NA")
yourAnswer = Split(objHTTP.responseText, "force_induct_count_value")
yourAnswer = Split(yourAnswer(1), ">")
yourAnswer = Split(yourAnswer(1), "<")
Debug.Print yourAnswer(0)

Или в вашем коде, например,

Попробуйте добавить это в свой код вот так. После того, как вы получите свой H.repsonseText

Debug.Print H.responseText

yourAnswer = Split(H.responseText, "force_induct_count_value")
yourAnswer = Split(yourAnswer(1), ">")
yourAnswer = Split(yourAnswer(1), "<")
...