Положение:
В настоящее время я пытаюсь воспроизвести в VBA селектор атрибутов с синтаксисом [attr]
из упражнений селекторов CSS, приведенных здесь .
Селектор предназначен для выбора элементов на основе значения данного атрибута.
Ожидаемый результат:
В приведенном мною примере html ожидаемый результат попытки получить атрибуты ALL id
с использованием html.querySelectorAll("[id]")
выделяется желтым цветом при его запуске.
Проблема:
Вместо того, чтобы получать только информацию, связанную с id
элементами - желтыми выделенными битами - я получаю гораздо больше текста. Похоже, почти все с некоторым повторным материалом.
Что я пробовал:
- Я прочитал множество CSS-ресурсов по этому вопросу. Все они имеют одинаковый синтаксис. * См. Примеры ссылок . Я не нашел хорошо подобранного примера VBA, поэтому, возможно, я неправильно конвертирую синтаксис.
- В соответствии с вышеизложенным, только в качестве теста , я попытался изменить синтаксис селектора, чтобы указать конкретный
id
. Это сработало отлично.
Например:
Set a = html.querySelectorAll("[id=""my-Address""]")
Это, в моем примере кода, дает ожидаемое значение:
<p id="my-Address">I live in Duckburg</p>
- Я попытался удалить
[]
из [id]
, который ничего не выводил в непосредственное окно.
- Этот ТАК вопрос содержит ответ, в котором упоминается Chrome, используемый мной браузер, как проблемный для некоторых селекторов CSS, но я не думаю, что это применимо к моему сценарию.
Вопрос:
Как правильно написать селектор CSS в VBA, чтобы извлечь все элементы с атрибутом id из заданной веб-страницы ?
Код:
Option Explicit
'[attribute] [target] Selects all elements with a target attribute e.g. [id]
Public Sub Test13()
Dim html As MSHTML.HTMLDocument, i As Long
Set html = GetTestHTML()
Dim a As Object
'Set a = html.querySelectorAll("[id=""my-Address""]")
Set a = html.querySelectorAll("[id]")
For i = 0 To a.Length - 1
Debug.Print a(i).innerText
Next i
End Sub
Public Function GetTestHTML(Optional ByVal url As String = "https://www.w3schools.com/cssref/trysel.asp") As HTMLDocument
Dim http As New XMLHTTP60
Dim html As New HTMLDocument
With http 'Set http = CreateObject("MSXML2.XMLHttp60")
.Open "GET", url, False
.send
html.body.innerHTML = .responseText
Set GetTestHTML = html
End With
End Function
HMTL ожидаемый результат в желтом:
<div class="noSel">
<h1><span class="markup"><h1></span>Welcome to My Homepage<span class="markup"></h1></span></h1>
<div id="helpIntro">
<span class="markup"><div class="intro"></span>
<div class="intro">
<p style="margin-top:4px;"><span class="markup"><p></span>My name is Donald <span id="Lastname" style="border-color: rgb(255, 102, 102); background-color: rgb(255, 255, 153);"><span class="markup"><span id="Lastname"></span>Duck.<span class="markup"></span></span></span><span class="markup"></p></span></p>
<p id="my-Address" style="border-color: rgb(255, 102, 102); background-color: rgb(255, 255, 153);"><span class="markup"><p id="my-Address"></span>I live in Duckburg<span class="markup"></p></span></p>
<p style="margin-bottom:4px;"><span class="markup"><p></span>I have many friends:<span class="markup"></p></span></p>
</div>
<span class="markup"></div></span>
</div>
<br>
<div class="helpUl" style="border-color: rgb(255, 102, 102); background-color: rgb(255, 255, 153);">
<span class="markup"><ul id="Listfriends></span>
<ul id="Listfriends" style="margin-top:0px;margin-bottom:0px;">
<li><span class="markup"><li></span>Goofy<span class="markup"></li></span></li>
<li><span class="markup"><li></span>Mickey<span class="markup"></li></span></li>
<li><span class="markup"><li></span>Daisy<span class="markup"></li></span></li>
<li><span class="markup"><li></span>Pluto<span class="markup"></li></span></li>
</ul>
<span class="markup"></ul></span>
</div>
<ul style="display:none;"></ul>
<p><span class="markup"><p></span>All my friends are great!<span class="markup"><br></span><br>But I really like Daisy!!<span class="markup"></p></span></p>
<p lang="it" title="Hello beautiful"><span class="markup"><p lang="it" title="Hello beautiful"></span>Ciao bella<span class="markup"></p></span></p>
<h3><span class="markup"><h3></span>We are all animals!<span class="markup"></h3></span></h3>
<p><span class="markup"><p></span><span><b><span class="markup"><b></span>My latest discoveries have led me to believe that we are all animals:<span class="markup"></b></span></b></span><span class="markup"></p></span></p>
<div class="helpTable" style="width:220px;">
<span class="markup"><table></span>
<ul style="display:none;"></ul>
<div class="noSel" style="margin-top:10px;">
Ссылка:
- Mozilla: Селекторы CSS
- w3schools Справочник по выбору CSS
- VBA / DOM - Получить элементы на основе атрибута
- Невозможно заставить работать селектор атрибутов CSS
- Селектор атрибутов Chrome и CSS
Ссылки на проекты:
* через VBE> Инструменты> Ссылки