VBA:【Selenium】ブラウザの読み込み完了まで待機する方法
開くのに時間がかかるWebサイトの場合、ロード時間よりSeleniumの処理の方が早いためエラーになってしまうことがあります。
それを避けるため、ロード待ちし、ブラウザの読み込みが完了したのちに、処理を行うようにする必要があります。
ここではブラウザが読み込まれたかチェック(正確には対象の要素があるかないかを判定)し、開ききるまで待機する方法について説明していきます。
◆チェック方法
Webサイト読み込み後に、操作を行いたい要素が存在するかどうかのチェックを行い、なければ少しの時間待機して、またチェックを行うようにしました。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Private Sub chkBrowserOpen() Dim Driver As New Selenium.WebDriver Dim chkLoading As Boolean Dim myBy As New By With Driver .start "chrome" .Get "https://www.xxxxxxx.com/" 'サイトを開く' chkLoading = False '//判定用フラグ' '//サイトの読み込みに時間がかかるものは、要素の読み込みが完了しないとエラーとなる' '//以下では対象の要素が見つかればループから抜けられる。' Do '//読み込みが終わらず、対象のXPathの要素がない場合はFalseが返る。' chkLoading = .IsElementPresent(myBy.xpath("//*[@id=""110_anchor""]/i[1]")) .Wait 1000'ひとまず1秒まってもう一度トライ' Loop Until chkLoading = True '//要素を選択' .FindElementByXPath("//*[@id=""110_anchor""]/i[1]").Click End With Stop '//ブラウザを終了' Driver.Close Set Driver = Nothing End Sub |
1 2 3 4 5 |
If Driver.IsElementPresent(myBy.id("//*[@id=""110_anchor""]/i[1]")) Then '要素がある場合の処理' Else '要素が見つからない場合の処理' End If |