Соскрести "Alt" с IMG с Excel VBA - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь очистить walkscore от www.walkscore.com, потому что их API не поддерживает мою страну. Проблема, с которой я сталкиваюсь; представляемая ими прогулочная зона хранится в img со значением, которое я хочу очистить в разделе «alt». Поскольку я совершенно новичок в изучении Excel VBA, я застрял.

Для одного поиска необходим только один результат, находящийся в «alt», и сохранить его в указанной ячейке c. Сейчас я просто использовал A10 в качестве примера, но исправлю это позже.

См. Код, который у меня сейчас есть:

Dim ws As Worksheet: Set ws = Blad1


Dim IE As New InternetExplorer
IE.Visible = True
IE.navigate "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
Do
    DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE

Dim Doc As HTMLDocument
Set Doc = IE.document

Set ClassCol = Doc.getElementsByClassName("blok-header-badge.score-info-link")
Set ElementCol = ClassCol.getElementsByTagName("img")

For Each Link In ElementCol

    ws.Range("A10").Value = Link.getAttritube("alt")

Next

Спасибо!

1 Ответ

1 голос
/ 21 апреля 2020

Вы можете использовать запрос XMLHttpRequest для получения необходимого контента вместо пилотирования IE, что является громоздким. Вот как вы можете go:

Используя XMLHttpRequest:

Sub FetchAlt()
    Const Url$ = "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
    Dim HTML As New HTMLDocument, sAlt$

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .send
        HTML.body.innerHTML = .responseText
        sAlt = HTML.querySelector(".score-info-link > img").getAttribute("alt")
        MsgBox sAlt
    End With
End Sub

Используя IE:

Sub FetchAlt()
    Dim oWalk As Object

    With CreateObject("InternetExplorer.Application")
        .Visible = False
        .navigate "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set oWalk = .document.querySelector(".score-info-link > img")
        Debug.Print oWalk.getAttribute("alt")
    End With
End Sub

Они оба выдают следующий вывод:

97 Walk Score of 18 Lindegracht Alkmaar NH Netherlands
...