2017-02-27 10 views
1

私は複数のウェブサイトからデータを削り取り、それらのそれぞれから特定のタグの内部テキストを引き出しています。コードは次のように行く:VBA/Excel - 複数のウェブサイトのスクレイプが重複を返す

For Each x In Range("C2:C30") 
If x <> Blank Then 

    With Web 
     .navigate Cells(x.Row, 3).Value 
    End With 
    Do While Web.Busy 
    DoEvents 
    Loop 

    Set Doc = Web.document 
    Set AllClass = Doc.getElementsByClassName("name") 

    On Error Resume Next 
    vName = AllClass(0).innerText 

    Cells(x.Row, 1).Value = vName 

    Next x 

は今、この作品、しかし、それはランダムに重複した結果を返します。ループの始めに「DoEvents」が挿入されているにもかかわらず、情報を取り込む前にページ全体が正しく読み込まれていないようです。例えば、私は5社のWebサイトから次の情報を取得する必要があります。

  1. ボブ
  2. ジョン
  3. ジェーン
  4. ジョー
  5. ハンク
  6. 私が取得する代わりに

このようなもの(ランダムに変化する):

  1. ボブ
  2. ジョン
  3. ジョン
  4. ジョー
  5. ハンク

、ランダムにもたらすであろう、再びマクロを実行:

  1. ボブ
  2. ジョン
  3. ジェーン
  4. ジェーン
  5. ジェーン

私は、これはそれがcouldnので、IEは、前のページからのデータをこすると関係していると思われるでしょうウェブサイトの読み込みを終了します。これを修正する方法はありません..

ありがとう!

+0

はビジーではないだけをチェックしてくださいだけでなく、readyStateの(ページの読み込みが完了したとき、それは4でなければなりません) – NineBerry

+0

ありがとう!それは今完璧に動作します! :) 私はReadyStateを認識していませんでした。私はビジーな仕事をしたという印象を受けました! – hisoka

+0

値を設定する直前にvNameをクリアする必要があります。新しい値を取得できない場合には明らかになります –

答えて

1

ビジーチェックしてくださいだけでなく、readyStateの(ページの読み込みが完了したとき、それは4でなければなりません)

+0

また、DocumentCompletedイベントを待つこともできます。 –

関連する問題