2017-08-15 1 views
0

Ich bin ein Anfänger zu Web Scraping mit Excel VBA und brauche etwas Hilfe.VBA Verweis HTML-Elemente von Xpath

Ich versuche, ein Element zu verweisen. Wenn es eine ID gäbe, könnte ich getElementByID verwenden, aber manchmal gibt es keine ID. Ich könnte getElementByClassName verwenden, aber manchmal gibt es zu viele Elemente der gleichen Klasse.

Gibt es eine Möglichkeit, auf ein Element durch Xpath zu verweisen?

(ich die eigentliche Website nicht veröffentlichen können, da info dort persönlich ist uns so sagen wir mal dies der html)

<!DOCTYPE html> 
<html> 
<body> 

<a href="https://google.com">Link</a> 

</body> 
</html> 

ist es so etwas wie ie.document.getElementByXPath. (/ Html/body/a) .click? Ich habe überall im Internet gesucht und kann nichts über das Thema finden.

+0

Ich denke, Sie beziehen sich auf die Auswahl eines Elements nach Attribut. Zum Beispiel, um das Element wo 'href == 'google.com' zu bekommen. Hab ich recht? –

+0

IF (groß, wenn) das HTML ist gültige XHTML, dann ist es gültige XML und kann von MSXML-Bibliotheken verarbeitet werden, die die gewünschte Funktionalität bieten. –

+0

Kein xpath aber 'queryselector [all]' ist nah an, was Sie fragen: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector –

Antwort

0

ist dies eine Antwort nicht gemeint

hier ist ein paar U-Boote sein, dass Sie einige Ideen

Sub google() 

    ' add reference: Microsoft XML v6.0 

    Const url = "https://www.google.co.in" 

    Dim http As New XMLHTTP60 
    Dim html As New HTMLDocument 

    http.Open "GET", url, False 
    http.Send 
    html.body.innerHTML = http.responseText 

    Dim elem As Object 
    Set elem = html.getElementsByClassName("ctr-p")    ' HTMLElementCollection 
    Debug.Print elem.Length 

    Set elem = html.getElementsByClassName("ctr-p")("viewport") ' HTMLDivElement <div class="ctr-p" id="viewport"> 
    Debug.Print elem.Children.Length 


    Dim aaa As Object 
    Set aaa = elem.getElementsByTagName("div")("hplogo")   ' HTMLDivElement 
    Debug.Print aaa.Children.Length 
    Debug.Print aaa.outerHTML 

End Sub 

geben kann.

' add references Microsoft HTML Object Library 
'     Microsoft Internet Controls 

Sub ieGoogle() 

    Const url = "https://www.google.co.in" 

    Dim iE As InternetExplorer 
    Set iE = New InternetExplorer 

    iE.Navigate url 
    iE.Visible = True 

    Do While iE.ReadyState <> 4: DoEvents: Loop 

    Dim doc As HTMLDocument 
    Set doc = iE.Document 

    Debug.Print doc.ChildNodes.Length       ' DOMChildrenCollection 
    Debug.Print doc.ChildNodes(1).ChildNodes.Item(0).nodeName ' HEAD 
    Debug.Print doc.ChildNodes(1).ChildNodes.Item(1).nodeName ' BODY 


    ' for querySelector arguments see: https://www.w3schools.com/cssref/css_selectors.asp 

    Dim elm As HTMLInputElement 
    Set elm = doc.querySelector("*")      ' all elements 

    Debug.Print Left(elm.outerHTML, 40) 
    Set elm = doc.querySelector("div.ctr-p#viewport") ' <div class="ctr-p" id="viewport"> 
    Debug.Print Left(elm.outerHTML, 40) 
    Set elm = doc.querySelector(".ctr-p#viewport")  ' <div class="ctr-p" id="viewport"> 

    Debug.Print Left(elm.outerHTML, 40) 
    Debug.Print elm.ChildNodes.Length 
    Debug.Print elm.Children.Length 


    Set elm = doc.querySelector("#viewport")    ' id="viewport" 
    Debug.Print Left(elm.outerHTML, 40) 


    Debug.Print elm.ID 


    Dim elem As HTMLInputElement 
    Set elem = doc.getElementsByClassName("ctr-p")("viewport") 



    Debug.Print elem.Children.Length 

    Dim aaa As Object 
    Set aaa = elem.getElementsByTagName("div")("hplogo") 
    Debug.Print aaa.Children.Length 
    Debug.Print aaa.outerHTML 

    iE.Quit 
    Set iE = Nothing 
End Sub