« 【株】 2008/05/22(木) ±0 日経△52.16 | トップページ | 【株】 2008/05/23(金) -2000 日経△33.74(追記) »

【Excel VBA備忘ログ】WebBrowserコントロールへのページ表示完了を検出する(再修正)

Excel VBAを使ったスクレイピング技集です。

Excel上にWebページを表示できるWebBrowserコントロールは、URLを指定するだけでWebページを表示できるスグレモノ。VBAでhtmlを解析してスクレイピングするにはその読み込みが完了している必要がありますが、その検出にはコツがいります。

ここでは、WebBrowserコントロールが持つイベントを使用してそれを検出してみたいと思います。

------以下はVBAの標準モジュール又はシート上で作成-------
'イベント発生フラグ
Dim documentcompleted As Boolean
Dim navigatecompleted As Boolean
Dim downloadcompleted As Boolean

Function ie_wait(objIE As WebBrowser)

    Dim timeout As Date

    ie_wait = False

    '5秒でタイムアウト
    timeout = DateAdd("s", 50, Now())
    'DocumentCompletedイベント発生を待つ
    Do While documentcompleted = False
        DoEvents
        If timeout < Now() Then
            Exit Function
        End If
    Loop

    'NavigateCompletedイベント発生を待つ
    timeout = DateAdd("s", 50, Now())
    Do While navigatecompleted = False
        DoEvents
        If timeout < Now() Then
            Exit Function
        End If
    Loop

    'DownloadCompletedイベント発生を待つ
    timeout = DateAdd("s", 50, Now())
    Do While downloadcompleted = False
        DoEvents
        If timeout < Now() Then
            Exit Function
        End If
    Loop

    ie_wait = True

End Function

------WebBrowserコントロールを貼り付けたシート-------

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    documentcompleted = True
End Sub

Private Sub WebBrowser1_DownloadComplete()
    downloadcompleted = True
End Sub

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    navigatecompleted = True
End Sub

※ie_waitを呼ぶ前にイベント発生フラグをリセットしておく。

« 【株】 2008/05/22(木) ±0 日経△52.16 | トップページ | 【株】 2008/05/23(金) -2000 日経△33.74(追記) »

ExcelVBA」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/36872/21099555

この記事へのトラックバック一覧です: 【Excel VBA備忘ログ】WebBrowserコントロールへのページ表示完了を検出する(再修正):

« 【株】 2008/05/22(木) ±0 日経△52.16 | トップページ | 【株】 2008/05/23(金) -2000 日経△33.74(追記) »