2017-10-12 6 views
2

Ich bin sehr neu mit IE in VBA zu arbeiten, so ist es für mich manchmal schwer, jeden Fehler zu korrigieren, den ich mache, während ich Code schreibe, um Daten aus dem Internet zu scrappen. Ich habe einen Code geschrieben, um auf jedem Video Links von 20 Links unter der Überschrift Microsoft computer training videos auf der Titelseite zu klicken. Ich erwarte, dass ich auf jeden Link klicke, dann zurück navigiere und den Prozess wiederhole, bis alle Links geklickt sind. Die Klassennamen und Tagnamen, die ich in meinem Scraper definiert habe, sind korrekt. Alles, was ich tun muss, ist den Prozess in der richtigen Weise durchzuführen. In diesem Moment klickt mein Schaber auf den letzten Link der 20 Links und bleibt dort hängen, wo er ankommt, aber nicht zurück navigieren.Wie navigiere ich nach dem Klicken auf einen Link?

Dies ist, was ich bisher geschrieben habe.

Sub clicking_links() 

    Const surl As String = "http://www.wiseowl.co.uk/videos/" 
    Dim IE As New InternetExplorer, iedoc As HTMLDocument 
    Dim posts As Object 

    With IE 
     .Visible = True 
     .navigate surl 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set iedoc = IE.document 
    End With 

    For Each posts In iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle") 
     posts.getElementsByTagName("a")(0).Click 
    Next posts 

End Sub 
+0

Können Sie nur 'verwenden IE.navigate surl' nach' Weiter posts'? –

+0

@Victor K, Ich verstehe nicht Ihre Logik der Verwendung von "IE.navigate surl" nach der Schleife Ursache, wenn das Schleifen ist getan, es ist nirgends zu gehen, ohne zurück zu 'surl 'Seite. – SIM

+0

Nun, Sie sagten, Sie möchten, dass es nach der Schleife zurück navigiert. Ich interpretierte das als zum Start navigieren. Wo würdest du es gerne nach der Schleife dann machen? –

Antwort

2

Versuchen Sie Folgendes:

Sub clicking_links() 

    Const surl As String = "http://www.wiseowl.co.uk/videos/" 
    Dim newurl as String 
    Dim IE As New InternetExplorer, iedoc As HTMLDocument 
    Dim posts As Object 
    Dim t As Long, i As Long 

    With IE 
     .Visible = True 
     .navigate surl 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set iedoc = .document 

     For Each posts In iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle") 
      t = t + 1 'count the number of posts 
     Next posts 

     For i = 1 To t 
      Debug.Print i 
      newurl = iedoc.getElementsByClassName("woVideoListDefaultSeriesTitle")(i - 1).getElementsByTagName("a")(0).href 
      Debug.Print newurl 

      .navigate newurl 
      Do Until .readyState = READYSTATE_COMPLETE: Loop 
      Set iedoc = .document 
      'here do your stuff within the new url 

      .navigate surl 'back to old url 
      Do Until .readyState = READYSTATE_COMPLETE: Loop 
      Set iedoc = .document 
     Next i 

    End With 
End Sub 
+0

Kein Weg, Tehscript !!! Es funktioniert wie Magie. Ich werde dir keine Chance geben, sich auszuruhen. In Ihrer Freizeit folgen Sie bitte auch diesem Link https://stackoverflow.com/questions/46682740/avoiding-hardcoded-delay-and-creating-conditional-statement-to-shake-off-error – SIM

Verwandte Themen