L oop через элементы в списке тегов LI - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь узнать о чистке, и я получил html часть, которая мне нужна, чтобы l oop просмотреть элементы списка и получить информацию из каждого заголовка. В html

есть 7 элементов

<ul class="a-unordered-list a-nostyle a-vertical"><li><span class="a-list-item"><span class="a-text-bold">Geschäftsname:</span>Anker Technology (UK) Ltd</span></li><li><span class="a-list-item"><span class="a-text-bold">Geschäftsart:</span>Ltd.</span></li><li><span class="a-list-item"><span class="a-text-bold">Handelsregisternummer:</span>8766135</span></li><li><span class="a-list-item"><span class="a-text-bold">UStID:</span>DE295307777</span></li><li><span class="a-list-item"><span class="a-text-bold">Telefonnummer:</span>+49 69 9579 7960</span></li><li><span class="a-list-item"><span class="a-text-bold">Kundendienstadresse:</span><ul class="a-unordered-list a-nostyle a-vertical"><li><span class="a-list-item">610 Nathan Road, Hollywood Commercial Center</span></li><li><span class="a-list-item">Room 1318-19</span></li><li><span class="a-list-item">Hong Kong</span></li><li><span class="a-list-item">Hong Kong</span></li><li><span class="a-list-item">999077</span></li><li><span class="a-list-item">HK</span></li></ul></span></li><li><span class="a-list-item"><span class="a-text-bold">Geschäftsadresse:</span><ul class="a-unordered-list a-nostyle a-vertical"><li><span class="a-list-item">Suite B, Fairgate House, 205 Kings Road, Tyseley,</span></li><li><span class="a-list-item">Birmingham</span></li><li><span class="a-list-item">B11 2AA</span></li><li><span class="a-list-item">GB</span></li></ul></span></li></ul>

Я пробовал это

post = mhtml.querySelectorAll(".a-list-item .a-text-bold")

, и это не дает мне ошибки, но как l oop через элементы объекта?

Я пробовал такие строки

            For Each e In post
            Debug.Print e.innerText
        Next e

, но выдает ошибку

Когда я отлаживаю внутренний html пост

Debug.Print post.innerHTML

Я получил только это в окне imidate "Gesch? ftsname:" хотя на странице html, когда я проверяю, селектор css .a-list-item .a-text-bold O получил 7 результатов.

1 Ответ

2 голосов
/ 31 марта 2020

querySelectorAll возвращает nodeList, который из-за вероятной ошибки не может быть For Each'd over. Вместо этого вам нужно пройти через свойство .Length

Dim i As Long

For i = 0 To post.Length -1
   Debug.Print post.item(i).innerText
Next

. Вам нужно установить ссылку на объект и проверить nodeType для NextSiblings, если вы хотите sh получить список заголовков и связанных значений:

Option Explicit

Sub GetInfo()
    Dim http As msxml2.XMLHTTP60, html As MSHTML.HTMLDocument, post As Object

    Set http = New msxml2.XMLHTTP60
    Set html = New MSHTML.HTMLDocument

    With http
        .Open "GET", "https://www.amazon.de/sp?_encoding=UTF8&asin=&isAmazonFulfilled=1&isCBA=&marketplaceID=A1PA6795UKMFR9&orderID=&seller=A2PGPJL0BBLHLX&tab=&vasStoreID=", False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .send
        html.body.innerHTML = .responseText
    End With

    Set post = html.querySelectorAll(".a-list-item .a-text-bold")

    Dim i As Long, sibling As Object, val As Variant

    For i = 0 To post.Length - 1
        Set sibling = post.item(i).NextSibling

        Debug.Print post.item(i).innerText, " = "

        Select Case sibling.NodeType
        Case 3
            val = sibling.NodeValue
        Case 1
            val = sibling.innerText
        End Select

        Debug.Print val
    Next

    Stop

End Sub
...