Я бы использовал селекторы CSS для таргетинга ссылок и XMLHTTP в качестве более быстрого метода поиска, чем запуск браузера.
Селекторы CSS:
Следующее:
td:first-child [href]
td: first-child - это :first-child
селектор псевдокласса CSS из td
тегового элемента; " "
- селектор комбинатора , []
- селектор атрибута . По сути, он выбирает первый элемент td
в каждой строке в этом случае, то есть первый столбец, а затем элемент атрибута href
внутри.
CSS-псевдокласс: first-child представляет первый элемент среди
группа родственных элементов.
К сожалению, реализация VBA не поддерживает селектор :not
, поскольку точные элементы также могут совпадать с .common tr + tr td :not([href*='rule'],br)
. Поддержка псевдо-селекторов очень ограничена. В этом случае использование селектора псевдокласса :nth-child()
CSS td:nth-child(1)
позволило бы получить определенные элементы, если бы они поддерживались в комбинации потомков как td:nth-child(1) [href]
. Я продолжаю писать о том, что есть и что не поддерживается, если кто-то захочет в качестве ссылки. Полезно знать о даже не поддерживаемых VBA методах, если вы решили переключиться на язык, который поддерживает.
Селектор применяется с помощью метода querySelectorAll
, в данном случае HTMLDocument
. Он возвращает все совпадения в виде nodeList
, чей .Length
может быть пройден для доступа к отдельным сопоставленным элементам по индексу.
элементы списка узлов:

Option Explicit
Public Sub GetLinks()
Dim sResponse As String, html As HTMLDocument, nodeList As Object, i As Long
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "http://dnd.arkalseif.info/items/index.html_page=27", 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 nodeList = .querySelectorAll("td:first-child [href]")
For i = 0 To nodeList.Length - 1
Debug.Print Replace$(nodeList.item(i), "about:", "http://dnd.arkalseif.info/items/")
Next
End With
End Sub
Ссылки (VBE> Инструменты> Ссылки):
- Библиотека объектов Microsoft HTML