Как получить значение по VBA из исходного кода, не используя тег или идентификатор элемента - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь использовать VBA для удаления из Интернета (https://www.booking.com/hotel/in/dream-catcher-home-stay.en-gb.html) и получить числовое значение для строки "b_hotel_id" в коде ниже

<td class="line-number" value="568"></td>
<td class="line-content">b_hotel_id: '554615',</td>

, но я не не знаю, как на него ссылаться, так как нет идентификатора или тега. Эти данные скрыты от веб-сайта и видны только в исходном коде.

Я пытался получить данные, используя этот код VBA:

Public Sub GetValueFromBrowser()
    Dim ie As Object
    Dim url As String
    Dim bkid As String

    url = "https://www.booking.com/hotel/in/dream-catcher-home-stay.en-gb.html"
    Set ie = CreateObject("InternetExplorer.Application")

    With ie
      .Visible = 0
      .navigate url
       While .Busy Or .readyState <> 4
         DoEvents
       Wend
    End With

    Dim Doc As HTMLDocument
    Set Doc = ie.document

    bkid = Trim(Doc.getElementsByName("b_hotel_id:")(0).Value)
    Range("A1").Value = myPoints

End Sub

Не могли бы вы помочь?

1 Ответ

0 голосов
/ 16 января 2020

На самом деле я не смог найти код HTML

<td class="line-number" value="568"></td>
<td class="line-content">b_hotel_id: '554615',</td>

в этом URL

url = "https://www.booking.com/hotel/in/dream-catcher-home-stay.en-gb.html"

, но вы можете извлечь число, как показано ниже:

Dim Doc As HTMLDocument
Set Doc = ie.document

Const find_string As String = "b_hotel_id: '"
Dim find_in As String
find_in = Doc.head.innerText

Dim id_start As Long
id_start = InStr(1, find_in, find_string) + Len(find_string)

Dim id_end As Long
id_end = InStr(id_start, find_in, "'")

MsgBox Mid$(find_in, id_start, id_end - id_start)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...