IEの操作は、IEWrapperクラスというクラスにまとめておくと便利です。まず、はじめはIEを起動するところから説明します。
IEを起動する処理は以下のようになります。WaitIEメソッドは、新しくIEが起動してから、指定したURLのページの読み込みが完了するまで待ちます。ここでは、タイムアウト時間は15秒、新規IEを起動するときは1分としています。お使いの環境によって、タイムアウトが頻発する場合は、この時間を延ばして調整してみてください。ただ、このタイムアウト時間は延ばしすぎても良くありません。処理が重たくなった時など、問題があった時に正しくタイムアウトするようにしておき、問題を検知できるようにしておく必要があります。
また、GotoUrlメソッドは、起動しているIEに対して、URLを指定して別のページに遷移するためのメソッドです。
このクラスを以下のように呼び出すことで、IEが起動し、GoogleのWebサイトが開くようになります。
いかがだったでしょうか。分かってしまえば、IEをプログラムから操作することは簡単ですね。IEの操作に必要なのは起動だけではありません。ここからは、他のIEの操作IEWrapperクラスに肉付けしていきます。
Public Class IEWrapper
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger( _
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
'IEのwaitのタイムアウト時間 15秒
Private Shared ReadOnly MAX_WAIT_TIME As New TimeSpan(0, 0, 15)
Private _ie As SHDocVw.InternetExplorer
Protected Property IE As SHDocVw.InternetExplorer
Get
Return _ie
End Get
Set(ByVal value As SHDocVw.InternetExplorer)
_ie = value
End Set
End Property
Sub New()
End Sub
' 新規IE作成
Sub NewIE(ByVal url As String)
IE = New SHDocVw.InternetExplorer()
' 初期ページを開く
Dim isSuccess As Boolean = TryGotoUrl(url, New TimeSpan(0, 1, 0))
log.WarnFormat("初期ページオープン。{0}", isSuccess)
IE.Visible = True
End Sub
' URL移動 戻り値はタイムアウトせず成功したか。
Function TryGotoUrl(ByVal url As String, Optional ByVal timeout As TimeSpan = Nothing) As Boolean
Try
GotoUrl(url, timeout)
Return True
Catch ex As TimeoutException
log.Warn(String.Format("GotoUrlに失敗しました。Url={0}", url), ex)
End Try
Return False
End Function
' URL移動
Sub GotoUrl(ByVal url As String, Optional ByVal timeout As TimeSpan = Nothing)
IE.Navigate(url)
WaitIE(timeout)
End Sub
' IEがビジー状態の間待つ。戻り値はタイムアウトせず成功したか。
Protected Function TryWaitIE(Optional ByVal timeout As TimeSpan = Nothing) As Boolean
Try
WaitIE(timeout)
Return True
Catch ex As TimeoutException
log.Warn("WaitIEでタイムアウトしました。", ex)
End Try
Return False
End Function
' IEがビジー状態の間待つ。タイムアウトしたらTimeoutException例外発生。
Protected Sub WaitIE(Optional ByVal timeout As TimeSpan = Nothing)
If timeout.TotalMilliseconds <= 0 Then
timeout = MAX_WAIT_TIME
End If
Dim startTime As DateTime = DateTime.Now
Do While IE.Busy = True OrElse IE.ReadyState <> SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE
System.Windows.Forms.Application.DoEvents()
If DateTime.Now - startTime > timeout Then
Throw New TimeoutException("WaitIEでタイムアウトしました。")
End If
Loop
System.Threading.Thread.Sleep(100)
End Sub
End Class
また、GotoUrlメソッドは、起動しているIEに対して、URLを指定して別のページに遷移するためのメソッドです。
このクラスを以下のように呼び出すことで、IEが起動し、GoogleのWebサイトが開くようになります。
Dim ie As New IEWrapper()
ie.NewIE("http://www.google.co.jp/")
スポンサーリンク