2017-10-12 137 views
2

我在vba中使用IE很新,因此有时候我很难纠正我在编写任何代码从网上抓取数据时犯的任何错误。我已经编写了一些代码,点击其首页中提供的标题Microsoft computer training videos下的20个链接中的每个视频链接。我希望点击每个链接然后导航回来并重复该过程,直到点击所有链接。我在刮板中定义的类名和标签名称是准确的。我需要做的就是以正确的方式执行该过程。在这一刻,我的刮板正在点击20个链接的最后一个链接,并在那里到达,但不会返回。点击链接后如何导航?

这是我迄今写的。

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

可你只需要使用'IE.navigate surl'接下来posts'后'? –

+0

@Victor K,我不明白你在循环完成后在循环后面使用'IE.navigate surl'的逻辑,如果没有回到'surl'页面,无处可去。 – SIM

+0

那么,你说你想让它在循环之后回溯。我解释说,导航到开始。然后你想在哪里找到它? –

回答

2

尝试以下操作:

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

没办法,Tehscript !!!它像魔术一样工作。我不会给你任何休息的机会。在业余时间,请按照此链接以及https://stackoverflow.com/questions/46682740/avoiding-hardcoded-delay-and-creating-conditional-statement-to-shake-off-error – SIM

相关问题