2016-03-30 27 views
0

document.getElementsByTagName („tr“). Länge Null zurück, wenn ich ein VBA-Skript ausführenVBA Daten Scraping von Webseiten

die Anzahl der tr-Elemente auf einer bestimmten Webseite zu finden
Sub AutomaticMode() 
Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = True 
IE.Navigate "https://www.example.com/" 
Do While IE.readyState < 4 
    Application.StatusBar = "DOM Loading ..." 
Loop 
Set username_field = IE.document.getElementByID("username") 
username_field.Value = "username" 
Set password_field = IE.document.getElementByID("password") 
password_field.Value = "password" 
SendKeys "{Tab}{Enter}" 
Do While IE.readyState < 4 
    Application.StatusBar = "DOM Loading ..." 
Loop 
Dim trList As IHTMLElementCollection 
Set trList = IE.document.getElementsByTagName("tr") 
MsgBox (trList.Length) 
End Sub 
+1

Was ist mit 'trList.Count'? – CaffeinatedCoder

+0

trList.Count bewirkt, dass das Programm einen Fehler zurückgibt: "Objekt unterstützt diese Eigenschaft oder Methode nicht" trList ist eine IHTMLElementCollection, wenn das eine Hilfe ist – NavkarJain

+0

Wenn Sie eine Pause auf die 'Set trList = ...' setzen Linie und warte ein wenig, bevor die Ausführung fortgesetzt wird, ändert sich das Ergebnis? –

Antwort

2

Keine tr-Tags auf gefunden Ihre Website kann dadurch verursacht werden, dass das Makro vor dem vollständigen Laden der Seite ausgeführt wird. Versuchen Sie,:

Do While IE.readyState < 4 

zu:

Do While IE.readyState < 4 or IE.Busy 

Auch dies garantiert nicht, dass alles, was Lasten vor Makro Brennen, aber oft hilft und ist eine gute Praxis immer es umfassen. Manchmal müssen Sie ein Objekt finden, das im Frontend "Laden" usw. anzeigt und HTML-Elemente durchläuft, bis es verschwindet - dann können Sie Ihr Skript sicher ausführen.

+1

Guter Punkt, aber ich würde für "Or" statt "And" gehen, nur um extra sicher zu sein. Dennoch garantiert noch nichts. –

+0

Danke! Ihre Antwort ist korrekt. Obwohl 'Do While IE.readyState <4 und IE.Busy' die Ergebnisse nicht zurückgaben, war das Problem, dass die' tr'-Elemente irgendwann nach dem Laden der Seite geladen wurden. Nachdem das Skript für 5 Sekunden auf "Wait" gesetzt wurde, bevor es nach trs suchte, gab es sie endlich zurück! Danke nochmal !! – NavkarJain

+0

Es ist wahr, dass die Aussage mit "oder" sein sollte, nicht "und", mein Fehler, wie ich mich daran gewöhnt habe, mit "bis" zu konditionieren. –