こんにちは、blueです。
前回はSeleniumVBAのアラート処理について説明しました。
前回の記事はこちら

今回はSeleniumVBAにおける待機処理について説明します。
この記事を読めばコードに対して適切な待機処理を入れる方法を知ることができるようになりますので是非読んでいってください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
SeeleniumVBAでの待機コマンド
SeleniumVBAには待機を実装する為にいくつかのコマンドが用意されています。
- 暗黙的待機
- 明示的待機
- その他
以下それぞれについて説明します。
暗黙的待機
要素が存在しない場合にWedriverが待機する時間を設定するプロパティとしてImplicitMaxWaitプロパティが存在します。
この暗黙的待機は実行したコードのすべての要素に適用されます。
コードは以下の通りです。
Dim driver As New WebDriver
'暗黙的待機を3000ミリ秒入れる
driver.ImplicitMaxWait=3000
'暗黙的待機の設定時間を取得する
Debug.Print driver.ImplicitlyWait
ImplicitMaxWaitプロパティには、待機する時間をミリ秒単位で指定します
指定時間内に要素が見つからなかった場合はエラーが発生しますが、見つかった場合は、すぐに次の処理に移るようになります。
またGetImplicitlyWaitメソッドを使えば暗黙的待機の設定時間を取得することができます。
明示的待機
ユーザーが指定した特定の要素にのみ適用されるものです。WaitUntilReadyメソッドがなくなったため、現在は、要素が特定の条件を満たすまでループで待機する方法が一般的です。
コードは以下の通りです。
Dim driver As New WebDriver
Dim elm As WebElement
Dim startTime As Double
driver.Get "https://example.com"
startTime = Timer ' 現在の時間を取得
Do
On Error Resume Next
Set elm = driver.FindElementByCssSelector("○○○")
On Error GoTo 0
If Not elm Is Nothing Then
If elm.Displayed And elm.Enabled Then Exit Do
End If
If Timer - startTime > 1 Then Exit Do ' 最大1000ms (1秒) 待機
Sleep 100 ' 100msごとにチェック
Loop
If Not elm Is Nothing Then elm.Click
Sleepメソッドの第一引数には待機時間をミリ秒で指定します。
その他
Waitメソッド
指定時間待機させるメソッドとして、Waitメソッドが存在します。
コードは以下の通りです。
Dim driver As New WebDriver
'1000ミリ秒待ってから次のコードに進む
driver.Wait 1000
Waitメソッドの第一引数には待機時間をミリ秒で指定します。
PageLoadTimeoutプロパティ
ページが完全に読み込まれるまで待機する時間を設定するものにPageLoadTimeoutプロパティが存在します。
以下のコードはPageLoadTimeoutで時間を設定し、PageLoadTimeoutプロパティで設定時間を確認しています。
Dim driver As New WebDriver
'PageLoadの待機時間を設定する
driver.PageLoadTimeout=1000
'PageLoad待機時間を取得する
Debug.Print driver.GetPageLoadTimeout
PageLoadTimeoutプロパティには、待機する時間をミリ秒単位で指定します。
指定時間内にページが見つからなかった場合はエラーが発生しますが、見つかった場合は、すぐに次の処理に移るようになります。
またPageLoadTimeoutプロパティでPageLoadの待機時間を取得することができます。
ScriptTimeoutプロパティ
非同期スクリプト(JavaScript)の実行が完了するまでの待機時間を設定するものにScriptTimeoutプロパティが存在します。
以下のコードはScriptTimeoutで時間を設定し、ScriptTimeoutプロパティで設定時間を確認しています。
Dim driver As New WebDriver
'JavaScriptの待機時間を設定する
driver.ScriptTimeout=2000
’JavaScriptの待機時間を取得する
Debug.Print driver.ScriptTimeout
SetScriptTimeoutメソッドのプロパティには、待機する時間をミリ秒単位で指定します。
指定時間内にスクリプトの実行が完了しなければエラーが発生しますが、見つかった場合は、すぐに次の処理に移るようになります。
またScriptTimeoutプロパティを使えばJavaScriptの待機時間を取得することができます。
今回のまとめ
今回はWebDriverの待機処理に関するメソッドを紹介しました。
スクレイピングをする際には待機処理が重要です。ぜひサンプルコードを使ってみてください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
SeleniumVBAに関する記事はこちら
【SeleniumVBA】初心者向けに導入方法についてわかりやすく説明します(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します。
【SeleniumVBA】Yahooメールへのログイン方法をわかりやすく説明する(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します2(Excel VBA)
【SeleniumVBA】スクレイピングをする為のメソッド一覧表
【SeleniumVBA】ブラウザを操作するメソッドについてサンプルコードを紹介します
【SeleniumVBA】2022年9月の更新に伴うコードの変更点について説明します。
【SeleniumVBA】アラート処理に関するメソッドについてコードを紹介します
【SeleniumVBA】待機処理に関するメソッドについてコードを紹介します
コメント
こんにちは。使用頻度の高い待機時間の設定のメソッドは以下のとおり変更されています。いろいろ変更が多いですが、更新を宜しくお願いします。待機時間の取得の方はあまり使わないので記載していませんが、変わっているかもしれません。
‘暗黙的待機時間を設定(最大10秒)。
driver.ImplicitMaxWait = 10000
‘PageLoadの待機時間の最大値を設定(最大10秒)。
driver.PageLoadTimeout = 1000
‘JavaScriptの待機時間の最大値を設定(最大10秒)。
driver.ScriptTimeout = 10000
遅くなりました。ありがとうございます。更新しました。