Как определить, есть ли в конкретном теге <div>тег <img>, вложенный в него, с помощью Excel VBA? - PullRequest
0 голосов
/ 09 ноября 2018

Я извлекаю данные из источника с помощью запроса xmlHttp и ищу определенную ошибку, в которой конкретный тег <div> не содержит данных между открывающим и закрывающим тегом. Если бы имя класса было уникальным, я мог бы использовать getElementsByClassName для поиска, но страница, к которой я пытаюсь получить доступ, использует несколько тегов <div> с одним и тем же классом.

Пример 1 (<div> без данных):

<div class="text-right-image-left-container">
<div class="col-xs-12 col-sm-6 imageleftpadding centered">

</div>
</div>

Пример 2 (<div> с данными):

<div class="text-right-image-left-container">
<div class="col-xs-12 col-sm-6 imageleftpadding centered">
    <img alt="Testing" class="img-responsive lazy" src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png" title="">
</div>
</div>

Второй пример содержит <img> внутри div <div class="col-xs-12 col-sm-6 imageleftpadding centered">.

Есть ли способ найти все <div> с помощью class="col-xs-12 col-sm-6 imageleftpadding centered" и проверить, содержат ли они какие-либо данные или нет?

1 Ответ

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

Вы можете собрать все div с этим именем класса, а затем выполнить циклическое тестирование, если у них есть дочерний тег img. В моем примере я печатаю outerHTML элементов, у которых нет дочернего элемента img.

К сожалению, реализация VBA не поддерживает : не селектор псевдокласса CSS , иначе вы могли бы просто сделать html.querySelectorAll(".col-xs-12.col-sm-6.imageleftpadding.centered:not(img)").

С XMLHTTP вы бы использовали следующее:

Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "URL", False
    .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    .send
    html.body.innerHTML = StrConv(.responseBody, vbUnicode)
End With
Dim nodeList As Object, i As Long, ele As Object
Set nodeList = html.querySelectorAll(".col-xs-12.col-sm-6.imageleftpadding.centered")

For i = 0 To nodeList.Length - 1
    On Error Resume Next
    Set ele = nodeList.item(i).getElementsByTagName("img")
    If ele.Length = 0 Then Debug.Print nodeList.item(i).outerHTML
    On Error GoTo 0
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...