Получить предыдущий брат для CSS селектора - PullRequest
0 голосов
/ 24 ноября 2018

В коде для QHarr по этой ссылке Получение всех ссылок на файлы Excel с веб-страницы в Excel VBA

Public Sub Links()
Dim sResponse As String, html As HTMLDocument, list As Object, i As Long

With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "https://www.jpx.co.jp/markets/public/short-selling/index.html", False
    .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    .send
    sResponse = StrConv(.responseBody, vbUnicode)
End With

Set html = New HTMLDocument
With html
    .body.innerHTML = sResponse
    Set list = html.querySelectorAll("[href$='.xls']")
End With
For i = 0 To list.Length - 1
    Debug.Print Replace$(list.item(i), "about:", "https://www.jpx.co.jp")
Next
End Sub

Я пытаюсь использовать селектор CSS другим способом ... иЯ использовал это img [title = 'Excel'], но это возвращает объекты, а не ссылку, предшествующую этому селектору. Вопрос в том, как ссылаться на предыдущий тег, который является тегом?enter image description here

1 Ответ

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

Вы не можете делать выбор родительского элемента с помощью селекторов css в vba (вы смотрите на родительские дочерние отношения, а не на родного брата).CSS каскадом вниз.Кроме того, в игру входит нечто, называемое специфичность .

Вам нужно написать селектор, который нацеливается на то, что вы хотите, или переключиться на селен и использовать xpath (хотя и не уверен, какая функциональность поддерживается в базовой реализации xpath для selenium).Ниже показаны подходящие два метода выбора CSS и опция XPath.

Вы можете использовать один и тот же принцип атрибута и оператора $ и нацелиться на src

[src$='xls.png']

Итак,

Set list = html.querySelectorAll("[src$='xls.png']")
Debug.Print list.item(0).src

Вы также можете использовать:

img[title=Excel]

Использование xpath и selenium basic для поиска родителей

Option Explicit
Public Sub GetParents()
    Dim d As WebDriver, elements As Object, element As Object
    Set d = New ChromeDriver
    Const URL = "https://www.jpx.co.jp/markets/public/short-selling/index.html"
    With d
        .get URL

        Set elements = .FindElementsByXPath("//img[@title='Excel']/parent::a")
        For Each element In elements
            Debug.Print element.Attribute("href")
        Next
         Stop
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...