Получение определенной строки текста через элементы

#excel #xml #vba #element #worksheet

#excel #xml #vba #элемент #рабочий лист

Вопрос:

Как мне получить дату рождения в разделе «разведение» на веб-странице? Появляется сообщение «объект не поддерживает это свойство или метод».

обновление: еще раз спасибо Zwenn за исправление моих ошибок.

       Sub GetADog2()
        
        URL2 = "https://fasttrack.grv.org.au/Dog/Details/-370317"
        Set request = CreateObject("MSXML2.XMLHTTP")
        Dim http As New XMLHTTP60, html As New HTMLDocument
        Dim node1 As HTMLHtmlElement
        Dim Element1 As Object
        Set ws = ThisWorkbook.Worksheets("Sheet1")
        
        With http
            .Open "GET", URL2, False
            .send
            html.body.innerHTML = .responseText
        End With
        
        'Problem starts here
        Set Element1 = html.getElementById("breedingArea").getElementsByClassName("display-value")(0)
        ws.Cells(5, 1) = Trim(Replace(Element1.innerText, "/", "~"))
        
        End Sub
 

Ответ №1:

Используйте всегда Option Explicit в качестве первой строки в каждом модуле и сортируйте свой код. getElementsByClassName() невозможно использовать таким образом, если вы используете раннюю и позднюю привязку. Это не работает с поздней привязкой. Я не знаю, почему это работает в двух строках со смесью.

 Sub GetADog2()
  
  Dim http As New XMLHTTP60
  Dim html As New HTMLDocument
  Dim Element1 As HTMLHtmlElement
  Dim node1 As HTMLHtmlElement
  Dim ws As Worksheet
  Dim url2 As String
  
  url2 = "https://fasttrack.grv.org.au/Dog/Details/-370317"
  Set http = CreateObject("MSXML2.XMLHTTP")
  Set ws = ThisWorkbook.Worksheets("Sheet1")
  
  With http
    .Open "GET", url2, False
    .send
    html.body.innerHTML = .responseText
  End With
  
  'Problem starts here
  Set Element1 = html.getElementById("breedingArea")
  Set node1 = Element1.getElementsByClassName("display-value")(0)
  ws.Cells(5, 1) = Trim(Replace(node1.innerText, "/", "~"))
End Sub