【SeleniumVBA】待機処理に関するメソッドについてコードを紹介します

VBAスクレイピング

こんにちは、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】待機処理に関するメソッドについてコードを紹介します

コメント

  1. sele_chan より:

    こんにちは。使用頻度の高い待機時間の設定のメソッドは以下のとおり変更されています。いろいろ変更が多いですが、更新を宜しくお願いします。待機時間の取得の方はあまり使わないので記載していませんが、変わっているかもしれません。

    ‘暗黙的待機時間を設定(最大10秒)。
    driver.ImplicitMaxWait = 10000

    ‘PageLoadの待機時間の最大値を設定(最大10秒)。
    driver.PageLoadTimeout = 1000

    ‘JavaScriptの待機時間の最大値を設定(最大10秒)。
    driver.ScriptTimeout = 10000

タイトルとURLをコピーしました