2014-10-29 5 views
0

페이지의 모든 링크를 추출하기위한 vba 모듈이 있습니다. 그러나 특정 태그의 모든 링크 (예 : <header><footer>)와 모든 하위 태그를 무시하고 싶습니다. 아무도 이것이 어떻게 할 수 있는지 말해 줄 수 있습니까?VBA를 사용하여 ID로 요소를 가져올 때 특정 태그의 요소를 무시합니다.

Sub Fetch_click() 

Dim LinkArr As Variant 

Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = True 
IE.Navigate Cells(1, 1).Text 
While IE.Busy 
DoEvents 
Wend 

Dim i As Integer 
i = 3 

Set LinkArr = IE.Document.getElementsByTagName("a") 
For Each LinkObj In LinkArr 
Cells(i, 1).Value = LinkObj.href 
i = i + 1 
Next 
End Sub 

+0

하지만 루프를 말할 것 For Each 루프 내부 그래서, 당신은 '과 같은 각각'A'의 부모 태그를 확인할 수 있습니다. ParentNode.NodeName = "헤더"'? – BobbitWormJoe

+0

할 수는 있지만 중첩이 많이 있습니다. – aadithyapk

답변

2
나는 마이크로 소프트 HTML 개체 라이브러리Microsoft 인터넷에서 개체를 사용하는 것을 선호

가 제어 라이브러리 (모두 참조를 추가!), 예를 들어 주셔서 감사합니다 당신의 <a> 태그가 앉아있는 위치를 확인

Sub StartTest() 
Dim Browser As SHDocVw.InternetExplorer 
Dim HTMLDoc As MSHTML.HTMLDocument 

    ' start browser 
    Set Browser = New SHDocVw.InternetExplorer 
    Browser.Visible = True 
    Browser.navigate "www.dauda.at" 
    Set HTMLDoc = Browser.document 

Dim ECol As MSHTML.IHTMLElementCollection 
Dim IFld As MSHTML.IHTMLElement 

    ' search all <a> tags 
    Set ECol = HTMLDoc.getElementsByTagName("a") 
    For Each IFld In ECol 

     ' etc ... 

    Next IFld 

    ' clean up 
    Set IFld = Nothing 
    Set ECol = Nothing 
    Set HTMLDoc = Nothing 
    Browser.Quit 
    Set Browser = Nothing 
End Sub 

는 바깥 쪽 부모의 태그를 얻을 수있는 IFld.ParentNode.nodeName 검사로 쉽게 할 수 있습니다. 깊이 <a>이 당신의 중첩 어떻게 불분명 경우

, 당신은 문서 루트 ("#document") 또는 포함 "HTML", 예를 들면까지 다음으로 높은 부모에게 모든 방법을 섹터가 재귀 함수를 사용할 수있다

Function BadParentRec(TestFld As MSHTML.IHTMLElement) As Boolean 
Dim MyTag As String, MyTempResult As Boolean 

    BadParentRec = False 
    MyTag = TestFld.ParentNode.nodeName 
    ' Debug.Print MyTag 

    If MyTag = "#document" Then 
     MyTempResult = False        ' lowest level is good 
    ElseIf MyTag = "XXX" Then        ' your own criteria for bad tags go here 
     MyTempResult = True         ' send "bad" back up the recursion chain 
    Else 
     MyTempResult = BadParentRec(TestFld.parentElement) ' next level down 
    End If 

    BadParentRec = MyTempResult 

End Function 

... 당신이

If Not BadParentRec(IFld) Then 
     Debug.Print Ifld.href    ' check here for href = "" 
    End If 
이 안된
관련 문제