Использование getElementsBy - имя в Excel VBA - PullRequest
2 голосов
/ 22 июня 2019

Я пытаюсь использовать VBA для очистки ссылки на файл .gif из этого фрагмента HTML:

        <div class="row">
            <div class="col-md-12">
                <div id='imageDiv' style='width:99%'>
 <img style='width:99% !important; border:5px solid silver;' src="http://www.[rest of link].gif" alt="" />
  </div>

Мой код ниже:

parent_url = "http://www.[webpage url]" 
objIE.navigate parent_url
        While objIE.Busy Or objIE.readyState <> 4
            DoEvents
        Wend
        For Each ele In objIE.document.getElementsByTagName("imageDiv")
           If InStr(ele.Style, "width") > 0 Then
              ws1.Cells(2, 2) = ele.innerText: Exit For
           End If
        Next
objIE.Quit

Это ненаписать что-нибудь в электронную таблицу, даже если я попробую несколько различных типов элементов.Любые указатели о том, что я делаю не так здесь?ТИА

Ответы [ 3 ]

0 голосов
/ 22 июня 2019

Во-первых, как указал Тим Уильямс, imageDiv - это id, а не тег, поэтому его можно получить с помощью метода .getElementById(), который возвращает уникальный HTML-элемент, в отличие от .getElementsByTagName(), который возвращает коллекцию элементов HTML.

Тег в HTML в простейшем виде выглядит как <TagName>Inner Text</>.

Итак, в вашем случае имя тега, которое вы ищете, это img, а id, который вы ищете, это imageDiv.

Итак, если вы хотите получить элемент, чей id равен imageDiv, а затем получить его элементы img, а точнее, его элемент first img, вам придется это сделать. вот так:

Dim img As HTMLImg
Set img = objIE.document.getElementById("imageDiv").getElementsByTagName("img")(0)

Во-вторых, innerText это не то, что вы ищете. Что вам нужно, это src.

Это может быть достигнуто так:

Debug.Print img.src

Чтобы воспользоваться преимуществом свойства .src, мы сохраняем элемент в переменной HTMLImg.

Приведенный выше код выведет следующее сообщение:

http://www.[rest%20of%20link].gif/

Использованные ссылки: Microsoft HTML Object Library

0 голосов
/ 22 июня 2019

В дополнение к данным ответам более эффективно и быстрее использовать css-селектор, который возвращает один узел

Debug.Print objIE.document.querySelector("#imageDiv img").src
0 голосов
/ 22 июня 2019

Попробуйте:

For Each ele In objIE.document.getElementById("imageDiv").getElementsByTagName("img")
...