Как выбрать не немедленные дочерние элементы? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь извлечь значение атрибута из нескольких строк HTML (из этой страницы Reddit ), сделайте это для нескольких элементов для каждого, а затем поместите эти значения в массив. (В основном для подсчета количества наград поста Reddit.)

Код ничего не возвращает; AwardCount равно 0.

Цель: проверить, существует ли класс с названием «награда-ссылка», и сложить # различных наград, чтобы получить общую сумму.

У меня другая проблема : Мне нужно проверить эту "ссылку для награждения", но без области комментариев. Таким образом, они должны быть дочерними элементами идентификатора siteTable. Проблема в том, что я не могу просто использовать другой символ «>», потому что он предназначен для непосредственных дочерних элементов.

Sub GetData2()

Dim IE As InternetExplorer
Dim itemEle As Object, datacountobj As Object, awards As Object
Dim upvote As Integer

Dim postdate As String, upvotepercent As String, awardAdd As String, _
  awardCount As String, animated As String, dates As String, isanimated As String, _
  oc As String, filetype As String, linkurl As String, myhtmldata As String, _
  visiComments As String, totalComments As String, removedComments As String, _
  test As String, tested As String, test2 As String, test3 As String, title As String, _
  deletedComments As String

Dim y As Integer, x As Integer
Dim U As Long, L As Long, j As Long

Set IE = New InternetExplorer
IE.Visible = True

IE.navigate (ActiveCell.Value)
Do While IE.Busy = True Or IE.readyState <> 4: DoEvents: Loop

Dim nodeList As Object, i As Long, urls(), results(), results2()

    Set awards = IE.document.querySelectorAll("span.awardings-bar > awarding-link")
    If Not awards Is Nothing Then
        awardCount = 0
        For x = 0 To awards.Length - 1
            awardAdd = awards.getAttribute("data-count")
            awardCount = awardCount + awardAdd
        Next x
    Else
        awardCount = 0
    End If
    results(i + 1, 14) = awardCount

(результаты представляют собой просто массив на основе 1D 0)

1 Ответ

0 голосов
/ 07 мая 2020

Вы css селектор неверен, поэтому результатов нет.

Переключитесь на более короткий

.awarding-link

или используйте

span.awardings-bar > .awarding-link

Обратите внимание на селектор класса . перед наградной ссылкой.

Чтобы комментарии не извлекались и ограничились только разделом наград вверху, используйте родительский элемент, который ограничивает, например:

.entry .awarding-link
...