Вы можете использовать CSS селекторы, которые являются шаблонами, используемыми для выбора элемента (ов).Для вашего примера примеров HTML используются следующие шаблоны:
- Первый столбец с:
.vsp-item.highlightsCard:first-child
- Второй столбец с:
.vsp-item.highlightsCard:nth-child(2)
- Третий столбец с:
.vsp-item.highlightsCard:last-child
- Заголовки с:
.highlightsCardHeading
В перечисленных выше селекторах .
является селектором класса , т.е. выбирает элементы с помощью className
.
Результаты CSS-запроса :
Столбец 1 Связь:
Колонка 2 Инфраструктура:
Колонка 3 Окрестности:
Заголовки:
Замечания:Приведенные выше результаты запроса показывают, что для Columns 1-3
требуется один узел, т. е. .querySelector
;обратите внимание, что 0
является единственным возвращенным совпадением.Принимая во внимание, что .querySelectorAll
потребуется для Headers
, возвращающего nodeList, как мы видим, 0-2
возвращено.
VBA:
IНе удается получить доступ к веб-сайту для запроса, но метод .querySelector
принадлежит HTMLDocument и обычно (с использованием переменной HTMLDocument oHTML
):
Для одного узла:
oHtml.querySelector(".vsp-item.highlightsCard:first-child")
ДляnodeList:
oHtml.querySelectorAll(".highlightsCardHeading")
Если nodeList, вы перебираете его элементы с помощью:
Dim headerNodeList As Object, i As Long
Set headerNodeList = oHtml.querySelectorAll(".highlightsCardHeading")
For i = 0 To headerNodeList.Length - 1
Debug.Print headerNodeList.item(i).innerText '<==this way '
'Debug.Print headerNodeList(i).innerText '<==Or this method
Next i
Для одного элемента используйте .querySelector
и .innerText
:
Dim col1Node As Object: Set col1Node = oHtml.querySelector(".vsp-item.highlightsCard:first-child"): Debug.Print col1Node.innerText
Dim col2Node As Object: Set col2Node = oHtml.querySelector(".vsp-item.highlightsCard:nth-child(2)"): Debug.Print col2Node.innerText
Dim col3Node As Object: Set col3Node = oHtml.querySelector(".vsp-item.highlightsCard:last-child") : Debug.Print col3Node.innerText
Примечания:
Я не могу проверить .responseText
по вашему запросу (или, скорее, он не имеет смысла из-за сбоя подключения к сайту).Может случиться так, что этот метод не вернет необходимую информацию, особенно с динамически загружаемыми страницами.Тем не менее, я полагаю, что WinHTTPRequest.5.1
имеет статус ответа, который вы можете использовать.
В этом случае вам может понадобиться другой метод, такой как браузер IE, и дождаться загрузки страницы.Вы все равно будете использовать .querySelector
или .querySelectorAll
метод HTMLDocument
.
Примеры сценариев:
- Метод для
IE
здесь: https://stackoverflow.com/a/50613063/6241235 - Метод для
WinHTTP
: https://stackoverflow.com/a/50759945/6241235 ИЛИ https://stackoverflow.com/a/50757822/6241235
Информация:
- HTMLDOM метод querySelector ()
- Селекторы CSS