VBA HTML развернуть код [извлечение <li>значений в раскрывающемся списке <ul>] - PullRequest
0 голосов
/ 27 февраля 2020

Я играл с загрузкой веб-страниц в VBA как XML и перебирал их данные и наткнулся на контрольно-пропускной пункт, пытаясь l oop через теги "li", вложенные в тег "ul" , Теоретически это очень просто, но почему этот конкретный пример не работает? Я также искал ответ на каждом форуме безрезультатно.

enter image description here

По сути, класс 'ul' называется " f-dropdown ", и у него есть sub 'li' с атрибутами, называемыми " данные ti- html -выбор-опция ". Я пытаюсь получить innerHTML / innerText тега 'li', вложенного в 'ul'. Кажется, это просто, но когда я создаю для него for-l oop, который перебирает документ HTML, помечая тег 'ul' и зацикливая дочерние элементы внутри, он не выбирает все элементы 'li' внутри.

Вопрос в том, как мне получить все 7 тегов 'li' внутри тега 'ul'? Исходя из текущего кода, он вытягивает 3 из 7 тегов. Кажется, он извлекает только первый класс « Размер продукта сжатия строки ... » в атрибуте li.

Если это помогает, эта информация находится в раскрывающемся списке и предварительно выбранное значение - «выбрать размер». Добро пожаловать в любые идеи / предложения о том, как очистить эту информацию.

Sub test_parse()

Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument

Dim Products As MSHTML.IHTMLElementCollection
Dim Product As MSHTML.IHTMLElement

'website below is just dummy site
XMLReq.Open "GET", "https://www.testsite.com", False
XMLReq.send

If XMLReq.Status <> 200 Then
    MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
    Exit Sub
End If

HTMLDoc.body.innerHTML = XMLReq.responseText

'setting <ul> tag as a element collection
Set Products = HTMLDoc.getElementsByClassName("f-dropdown")

'looping through the <ul> collection and reading values
'Product --> children of the collection?
For Each Product In Products
    'Do i need to step down further and call another for-loop for Product.children?
    Debug.Print Product.innerHTML, Product.innerText
Next Product

'result of this code:
'<LI class="show-for-small-only takeover-header"><SPAN>Pick a size</SPAN> </LI>
'<LI class="row collapse disclaimer product-size-option" data-ng-show="!available &amp;&amp; available !== undefined">
'<DIV class="small-4 column text-center the-size">No Stock </DIV></LI>
'<LI class="row collapse product-size-option" data-ng-class="{'sold-out invalid': size.quantity === 0, 'selected': size.sku === product.simpleSku}" data-ti-html-select-option="size.sku" data-ng-repeat="size in sizes">
...