• ベストアンサー

WebBrowserの読み込み待ちの処理の仕方

VB2005にてプログラムしております。 WebBrowser内にて表示したページでID、PASSを自動入力、ログインするというプログラムですが、 -------------------------------------------------------------     Dim IDCODE As String = TextBox1.Text Dim PASSCODE As String = TextBox2.Text '文字列で指定したURLに飛ぶ WebBrowser1.Navigate("https://XXXXXXXXX.ne.jp/") '表示終了まで待つ ??????    ‘WebBrowser1へID、PASS入力処理 ------------------------------------------------------------- 上記の ?????? 部分に表示待ちの処理をするコードを入れると思うのですが、 With WebBrowser1 Do While .IsBusy = True Loop Do While .ReadyState <> "complete" Loop End With を入力すると読み込み途中で止まってしまうみたいです。 なにかいい方法がありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Windowsの場合コントロールの描画などを待つなら メッセージループをとめない工夫が必要です ひとつのプロシージャ内で待機するのであれば Application.DoEvents() などをつかって メッセージ処理をWindowsにさせましょう Do Until .ResyState = WebBrowserReadyState.Complete  Application.DoEvents() Loop といった具合です または WebBrowserのDocumentCompletedイベント側で処理するといった手法もありますよ

noname#25512
質問者

お礼

ありがとうごさいます。大変参考になりました。 DocumentCompletedイベント側で描画終了の変数を発行する方が描画終了のタイミングをつかみやすいので以下のようにして見ました。 ----------------------------- Private Sub WebBrowser1_DocumentCompleted Label10.Text = ("Login") Private Sub Button2_Click     '文字列で指定したURLに飛ぶ     WebBrowser1.Navigate("​https://XXXXXXXXX.ne.jp/")​     ‘Loginの表示が出るまで待つ Do Until Label10.Text = ("Login") Application.DoEvents() Loop -----------------------------

その他の回答 (1)

回答No.1

'やってみた。なお、Form1にWebbrowser1を貼り付けただけの状態でテスト Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Show() Dim IDCODE As String = "himajin100000" Dim PASSCODE As String = "pass" '文字列で指定したURLに飛ぶ Me.WebBrowser1.Navigate("http://www.yahoo.co.jp") 'ここでRefreshしないとReadyStateがWebBrowserReadyState.Uninitialized = 0になったままらしく、ループを抜けられない。 Me.WebBrowser1.Refresh() With Me.WebBrowser1 Do While .IsBusy = True Me.Text = "busy" Loop Do While .ReadyState = WebBrowserReadyState.Complete Me.Text = CStr(.ReadyState) Loop Me.Text = "Finished" End With End Sub

noname#25512
質問者

お礼

'ここでRefreshしないとReadyStateがWebBrowserReadyState.Uninitialized = 0になったままらしく、ループを抜けられない。 この部分参考になりました。 ありがとうございます。

専門家に質問してみよう