Excel VBA извлекает значение метки арии - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь извлечь текст внутри атрибута aria-label, но то, что у меня, похоже, не работает.Я могу извлечь значения href, используя тот же код, поэтому я подумал, что это также может сработать.Буду признателен за любую помощь.

Я использовал URL-адрес https://www.facebook.com/marketplace/item/328932021226229 Screenshot:

<div class="_3-8z">
  <div>
    <span class="_3ziq">Seller Information</span>
    <div class="clearfix" direction="left">
      <div class="_ohe lfloat">
        <div>
          <a class="img _8o _8t" aria-label="John Smith, View seller profile"
      href="#" data-hovercard="/ajax/hovercard/user.php?id=100002935356728&amp;extragetparams=%7B%22hc_location%22%3A%22marketplace_hovercard%22%2C%22existingThreadID%22%3Anull%2C%22forSaleItemID%22%3A%22328932021226229%22%2C%22name%22%3A%22Zsigmond%20Lali%22%7D" 
      modalProps="[object Object]" 
      profileID="100002935356728" resource="[object Object]">
    Sub Macro2()

marker = 0
Set objShell = CreateObject("Shell.Application")
IE_count = objShell.Windows.Count
For x = 0 To (IE_count - 1)
    On Error Resume Next    ' sometimes more web pages are counted than are open
    my_url = objShell.Windows(x).document.Location
    my_title = objShell.Windows(x).document.Title

    If my_title Like "Marketplace" & "*" Then 'compare to find if the desired web page is already open
        Set IE = objShell.Windows(x)
        marker = 1
        Exit For
    Else
    End If
Next

        Dim aNodeList As Object, i As Long
        Set aNodeList = IE.document.querySelectorAll(".img _8o _8t[aria-label]")
        For i = 0 To aNodeList.Length - 1
            ActiveSheet.Cells(i + 2, 2) = aNodeList.Item(i)
        Next

End Sub

1 Ответ

0 голосов
/ 28 октября 2018

Ваш фрагмент ссылки HTML не отображается в ссылке, по крайней мере, как я ее вижу.Кроме того, ваш CSS-селектор имеет неправильный селектор классов для показанного фрагмента, если вы после показанного aria-label.

Этот

._3cgd[aria-label]

ищет элемент с именем класса ._3cgd, имеющий атрибут aria-label.В вашем фрагменте нет ни одного присутствующего.

Я ожидаю, но не могу должным образом проверить по вышеуказанным причинам, что вы можете использовать getAttribute, в противном случае разделите .outerHTML целевого элемента.

Ниже приведен более обобщенный селектор, основанный на показанном вами фрагменте.Возможно, вам придется настроить для вашего HTML.getAttribute произвел null только с вашим фрагментом, но я не уверен, будет ли вести себя иначе с живой страницей, так как синтаксис правильный.outerHTML разделение возвращает John Smith, View seller profile

With IE.document.querySelector("a[class='img _8o _8t'][profileid='100002935356728']")
   Debug.Print .getAttribute("aria-label")
   Debug.Print Split(Split(.outerHTML, "aria-label=" & Chr$(34))(1), Chr$(34))(0)
End With

Я использую только querySelector и нацеливаюсь с profileid, чтобы быть более общим для всех подходящих классов с меткой aria:

Dim eles As Object, i As Long
Set eles = IE.document.querySelectorAll("a[class='img _8o _8t'][aria-label]")
For i = 0 To eles.Length - 1
    With eles.item(i)
        Debug.Print .getAttribute("aria-label")
        Debug.Print Split(Split(.outerHTML, "aria-label=" & Chr$(34))(1), Chr$(34))(0)
    End With
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...