2017-10-12 10 views
2

私はvbaのIEで作業するのがとても新しいので、ウェブからデータをスクラップするコードを書くときに間違いを修正することは時折困難です。私は、各ビデオリンクをクリックするためのいくつかのコードを書いてきました.のキャプションの下にある20個のリンクのうちの1つがフロントページにあります。私は、各リンクをクリックしてから、すべてのリンクがクリックされるまで、そのプロセスを繰り返すことを期待しています。スクレイパーで定義したクラス名とタグ名は正確です。私がする必要があるのは、正しい方法でプロセスを実行することだけです。現時点では、私のスクレーパーは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

あなただけの次posts' ''後IE.navigate surl'を使用することはできますか? –

+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

関連する問題