アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB2008を使っています。WebBrowserのコンポーネントを使って
ホームページにGET形式でパラメータを渡して画面のBODY部分を読み取る
ものを作っているのですが、サーバーのレスポンスにもよりますが
1分間に20回で5分(100回程度)連続アクセスをするのですが、
以下のルーチンの場合何か不安を感じまして、
ネットでこれを使えばOKというものが無くて
確実に読み取る方法が知りたくて質問いたしました。
やはり、2つ目のイベントを用いる方が安心でしょうか?
正しいWebBrowserの使い方(ループ判定)をご存知の方教えてください。


'***** WebBrowser1.ReadyState *****

WebBrowser1.Navigate(URL)
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete Or WebBrowser1.IsBusy = True
Application.DoEvents()
Loop
data = WebBrowser1.DocumentText



'***** DocumentCompletedイベントまでループ *****

public wait_flag as Boolean

wait_flag = True
WebBrowser1.Navigate(URL)
Do While (WebBrowser1.IsBusy = True) Or (wait_flag = True)
Application.DoEvents()
Loop
data = WebBrowser1.DocumentText


'---- イベント -----
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
wait_flag = False
End Sub

A 回答 (1件)

正しいのかどうかわからないし、好みの問題かもしれませんが、、



  [MSDN 引用]
  http://msdn.microsoft.com/ja-jp/library/system.w …

  DocumentCompleted イベントが発生したときには、新しいドキュメントが
  完全に読み込まれています。つまり Document プロパティ、DocumentText
  プロパティ、または DocumentStream プロパティを使用してドキュメント
  のコンテンツにアクセスできます。

とあるので、DocumentCompleted イベントを利用した方法が良いでしょう。
ただし、フレームを切ったページではフレームごとに DocumentCompleted が
発生するため、完全にページが読み込まれたかどうかを判定するには e.Url
が目的の URL を差しているか調べる必要はあります。

それから、DocumentCompleted イベントを利用するのであれば、ループで待機
せず、イベント内で次の処理をすればいいのでは?


Private m_Url   As String
Private m_BodyText As String

Private Sub Button1_Click() Handles Button1.Click

  m_BodyText = ""
  m_Url = "目的の URL"
  WebBrowser1.Navigate(m_Url)

End Sub

Private Sub WebBrowser1_DocumentCompleted( _
  ByVal sender As System.Object, _
  ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs _
) Handles WebBrowser1.DocumentCompleted

  If e.Url.ToString() = m_Url Then
    m_BodyText = WebBrowser1.DocumentText
  End If

End Sub
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!