Очистка сайта с использованием getElementsByClassName -> неверные результаты - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь очистить innerText всех классов с помощью className = "disabled" в следующем фрагменте кода HTML: HTML код

Код, который я пытаюсь реализовать в MS Access (VBA), выглядит следующим образом:

Set IE = CreateObject("InternetExplorer.Application")

claimLink = "https://www.XXXXX.com/"


IE.navigate claimLink
    Do
       DoEvents
    Loop Until IE.ReadyState = 4

Set menuEnabled = IE.Document.getElementsByClassName("disabled")(0)


For Each Item In menuEnabled
    MsgBox (Item.innerText & " --> " & Item.className)
Next

IE.Quit

Set menuEnabled = Nothing
Set searchres = Nothing
Set IE = Nothing

... в результате я получаю все элементы в этом списке, и MS Access также сообщает, что имя класса всех элементов (библиографические данные, описание, утверждения и т. Д.) Отключено.

Может кто-нибудь сказать мне, что не так в моем коде? Все, что я хочу вернуть - это «Описание», «Заявки» и «Цитированные документы».

Эти серые предметы - единственные, на которые я хочу ответить

Спасибо! Корнелиус

1 Ответ

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

Кажется, нужно немного подождать, пока элементы будут обновлены. Я использую комбинацию селектора css для нацеливания на интересующие элементы.

.epoContentNav [class=disabled]

"." является селектором класса. Он выбирает элементы с соответствием имени класса после ".", т.е. epoContentNav. " " - это комбинатор-потомок, означающий, что справа - дети того, что слева. [] - это селектор атрибута, который выбирает элемент по названному атрибуту. В этом случае я использую комбинацию attribute=value, чтобы также указать, что имя класса должно быть disabled. Все это читается как находить элементы с классом disabled, у которых есть родительский элемент с классом epoContentNav. Он выбирает все элементы панели навигации с классом disabled.

Информация об этих селекторах здесь.

Option Explicit    
Public Sub GetInfo()
    Dim IE As New InternetExplorer, i As Long, nodeList

    With IE
        .Visible = True
        .navigate "https://worldwide.espacenet.com/publicationDetails/claims?DB=&ND=&locale=en_EP&FT=D&CC=DE&NR=1952914A&KC=A&tree=false#"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Application.Wait Now + TimeSerial(0, 0, 2)

        Set nodeList = .document.querySelectorAll(".epoContentNav [class=disabled]")
        For i = 0 To nodeList.Length - 1
            Debug.Print nodeList.item(i).innerText, nodeList.item(i).getAttribute("class")
        Next
        Stop
        'Quit '<== Remember to quit application
    End With
End Sub
...