Простой вопрос. Я пытаюсь написать процедуру для анализа HTML этого сайта
Часть исходного кода (строки с 154 по 174), достаточная для парадигмы, такова:
<p>(British Aircraft Company)</p>
<ul>
<li><a href="/wiki/B.A.C._I" title="B.A.C. I" class="mw-redirect">B.A.C. I</a></li>
<li><a href="/wiki/B.A.C._II" title="B.A.C. II" class="mw-redirect">B.A.C. II</a></li>
<li><a href="/wiki/B.A.C._III" title="B.A.C. III" class="mw-redirect">B.A.C. III</a></li>
<li><a href="/wiki/B.A.C._IV" title="B.A.C. IV" class="mw-redirect">B.A.C. IV</a></li>
<li><a href="/wiki/B.A.C._V" title="B.A.C. V" class="mw-redirect">B.A.C. V</a></li>
<li><a href="/wiki/B.A.C._VI" title="B.A.C. VI" class="mw-redirect">B.A.C. VI</a></li>
<li><a href="/wiki/B.A.C._VII" title="B.A.C. VII" class="mw-redirect">B.A.C. VII</a></li>
<li><a href="/wiki/B.A.C._VII_Mk.2" title="B.A.C. VII Mk.2" class="mw-redirect">B.A.C. VII Mk.2</a></li>
<li><a href="/wiki/B.A.C._VII_Planette" title="B.A.C. VII Planette" class="mw-redirect">B.A.C. VII Planette</a></li>
<li><a href="/wiki/B.A.C._VIII" title="B.A.C. VIII" class="mw-redirect">B.A.C. VIII</a></li>
<li><a href="/wiki/B.A.C._VIII_Bat-Boat" title="B.A.C. VIII Bat-Boat" class="mw-redirect">B.A.C. VIII Bat-Boat</a></li>
<li><a href="/wiki/B.A.C._IX" title="B.A.C. IX" class="mw-redirect">B.A.C. IX</a></li>
<li><a href="/wiki/B.A.C._Cupid" title="B.A.C. Cupid" class="mw-redirect">B.A.C. Cupid</a></li>
<li><a href="/wiki/B.A.C._Drone" title="B.A.C. Drone" class="mw-redirect">B.A.C. Drone</a></li>
<li><a href="/wiki/B.A.C._Super_Drone" title="B.A.C. Super Drone" class="mw-redirect">B.A.C. Super Drone</a></li>
<li><a href="/wiki/B.A._Swallow_2" title="B.A. Swallow 2" class="mw-redirect">B.A. Swallow 2</a></li>
<li><a href="/wiki/B.A._Eagle_2" title="B.A. Eagle 2" class="mw-redirect">B.A. Eagle 2</a></li>
<li><a href="/wiki/B.A._Double_Eagle" title="B.A. Double Eagle" class="mw-redirect">B.A. Double Eagle</a></li>
</ul>
Я сейчас пытаюсь что-то выстроить. Поэтому я могу попасть в <p> HTML Tag
но я не могу использовать элементы списка, чтобы исключить то, что я хочу, потому что они заключены между <ul></ul> tags
. Какими будут ваши дальнейшие шаги?
Sub ICE()
Set Results = IE.document.getElementsByTagName("p")
For Each itm In Results
If itm.innerHTML = "(British Aircraft Company)" Then
End If
Next itm
End Sub
Для более сжатой картины этот этап моего исследования основан на ответе на анализ VBA href, предоставленный ron
Рекомендация пользователем Doug Glancy
→ Возможно, было бы полезно указать desired results.
Я хочу иметь возможность сделать VBA "щелчком" во время выполнения href моих предпочтений, поскольку это фактическая ссылка. Я изучаю код от ron на том, что есть (и можно увидеть в предыдущем примере):
If itm.outerhtml = "B.A.C. VII" Then
itm.Click
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
Exit For
End If
... здесь используется externalHTML, но ядром моего усилия является цикл и логический оператор
Я написал этот фрагмент кода, однако он не работает
Set Results = IE.document.getElementsByTagName("p")
For Each itm In Results
If itm.innerHTML = "(British Aircraft Company)" Then
Set Results2 = IE.document.getElementsByTagName("ul")
For Each itm2 In Results2
If itm2.innerHTML = "B.A.C. V" Then
MsgBox itm2.innerHTML
End If
Next itm2
End If
Next itm
Это будет содержать список самолетов под тэгом p с British Aircraft Company
Sub GetAircraft()
Dim xHttp As MSXML2.XMLHTTP
Dim hDoc As MSHTML.HTMLDocument
Dim hUls As MSHTML.IHTMLElementCollection
Dim hUl As MSHTML.HTMLListElement
Dim hLi As MSHTML.HTMLLIElement
Set xHttp = New MSXML2.XMLHTTP
xHttp.Open "GET", "http://en.wikipedia.org/wiki/List_of_aircraft_%28B%29"
xHttp.send
Do
DoEvents
Loop Until xHttp.readyState = 4
Set hDoc = New HTMLDocument
hDoc.body.innerHTML = xHttp.responseText
Set hUls = hDoc.getElementsByTagName("ul")
'Go through all the <ul> tags
For Each hUl In hUls
'Only if previous tag is something
If Not hUl.PreviousSibling Is Nothing Then
'Only if previous tag is <p>
If TypeName(hUl.PreviousSibling) = "HTMLParaElement" Then
'Only if previous paragraph is specified text
If hUl.PreviousSibling.innerText = "(British Aircraft Company)" Then
'loop through the <li> and print them out
For Each hLi In hUl.Children
Debug.Print hLi.innerText
Next hLi
End If
End If
End If
Next hUl
End Sub