ALL EXCEL Program Selenium Tips VBA

【Selenium×VBA】Webブラウザをロード待ちする方法【コード有】

【Selenium×VBA】Webブラウザをロード待ちする方法【コード有】

Seleniumのロード待ちとは?

EXCEL-VBASeleniumを使用する際に、
ブラウザ制御が速度が速すぎるせいで 自動化に安定性が出なかったりします。

 
Selenium側の「wait メソッド」や VBA側の「Sleepメソッド」でお茶を濁すこともできますが、環境要因によって変動するSleepなどは使いたくないものです。
Nakamura
 

ということで、Seleniumの動作を安定させるためにChromeのロード待ちをする方法を 本記事では紹介します。

 
 

正直 簡単です。

ちゃちゃっとやっていきましょう!
Nakamura
 

本記事でできること

本記事で紹介するコードでは、以下のことができます。

 

本記事で出来ること

EXCEL-VBAで Selenium利用時に Webサイトのロード待ちをすることができる。
 ※本記事ではChromeブラウザを前提に説明

 
 
基本コピペでOK。
ロード待ちしたい箇所に、ロード待ちのFunctionコードをバンバン打ち込んでいく感じです。
使用例も記載してますので併せて読んでおきましょう
Nakamura
 
 

間違った記事に注意

Selenium自体に ブラウザのロード待ち機能を搭載しているWeb記事上では多く見受けられますが、
それはコア言語(PythonやJavaScript)に限ります。

つまり、VBAにおけるSelenium利用の場合、動作を安定させるためには、
自分でロード待ちのコーディングをしてあげる必要があります。
※一応 Selenium固有の読込完了待ちのコードはありますが、VBAの場合、動作が全然安定しない。

 
 
 

紹介コードのユースケース

ユースケースは、主に3点かな、と。

ユースケース-3例

  • Selenium制御が早すぎて、ブラウザが読込完了する前に動作をしてしまう(動作安定性確保)
  • Selenium制御が早すぎるのか、そもそものコードがNGなのか切り分けができない(課題明瞭化)
  • Selenium固有の読込完了メソッドを信じられない(動作安定性確保)
 

ユースケースが若干被っていますが、その辺はお許しください。笑
Seleniumの動作を安定させるために、いろいろと試行錯誤をしてフラストレーションが溜まっていたため、ついつい書いてしまいたくなります。笑
Nakamura

 
 
 

紹介コード使用時の注意点

本記事で紹介する独自コードは、「私のPCでは期待通りに挙動しているコード」となります。

よって、あなたのPC環境では もしかしたら期待した動きをしない可能性があります。

ですので、この辺を考慮した上で、紹介するコードをご利用ください。

筆者のSelenium動作環境

  • OS  :Microsoft Windows 10 Pro
  • CPU:IntelCore i7-9750H CPU
  • メモリ:16GB
  • EXCEL  :EXCEL 2019 32bit
 

見るべきポイントは、OSEXCELバージョンのみかなと。

 

言い方を変えれば、OSとEXCELバージョンが合致していれば問題なく動作するコードですので、
期待通りの動きをしない場合は、その他に問題があるとも言えます。

 
この記事を読んでいる人は、そもそもニッチな分野の珍しい人だと思いますので、
自力解決能力が高い人が集まっていることを信じています。笑
Nakamura
 
 

コードの紹介(※コピペでOK)★

EXCEL側のVBAコード上(Sub~EndSub内)で、以下のコードをコピペしてください。

念のために記載しますが、Chromeのロード待ちする箇所に コピペしてくださいね。

 
 

◆コピペ対象コード

 
Dimの変数については、Sub~EndSub内の冒頭に事前コピペしてください(この辺は、読んでる人は 相応のスキル保持者と思うため説明は割愛)。

コード内の [HTML-XPath要素] については、都度 書き換えていく形です。
XPathの読込ができたら 変数FWFlagがTrueになり、Do~Loopから抜ける形です。

変数FWFlagがFalseだった場合は、driver.Wait 1000で1秒を待つを繰り返して、対象のXPathが出現するまで待つ構成となります。

Nakamura

 

 
 

コードの使用方法★

本記事ご覧の方は、VBA有識者のため、省略気味で説明しますね。(というか Sub~EndSubで書きます。)

使い方は、以下のイメージ。

 

慣れてしまえば、ササっとできてしまうと思います。

意外と簡単にできてしまいから驚くかもしれません。
Chromeでロード待ちが発生する箇所に、都度 XPathを書き換えて使用しましょう。
Nakamura
 

注意点:XPathコピペ時の注意

XPathをそのままVBE側にコピペすると、VBA側の入力ルール上 NGになります。
以下は一例ですが、
”(ダブルクォーテーション)がXPath内に記載がある場合は、
”(ダブルクォーテーション)を追記してあげましょう。

元XPath://*[@id="ContentWrapper"]/header/section[1]/div/form/fieldset/span/input
 ↓
正しい例://*[@id=""ContentWrapper""]/header/section[1]/div/form/fieldset/span/input

VBEにXPathを入力する時は、"(ダブルクォーテーション)を追記してあげることがポイントです。
Nakamura
 

余談:IsElementPresentメソッドだけではだめなの?

勘のいい人でしたら、

IsElementPresentメソッドでBoolean(True or False)が戻り値にくるから、
それをIf文にすれば良いのでは?

と思う人がいるかと思います。

 

例えば、こんな感じ。

例文

If  driver.IsElementPresent(myBy. XPath(" [HTML-XPath要素] ")) then  
 ~Trueだった場合の処理コードを記載~
End if

至極まっとうな意見と思います。笑
僕も最初は、この形式で大丈夫と思っていました。
ですが、安定しなかったためやめました。笑
Nakamura

理由は分かりません。笑

一応 仮説を立てると、Seleniumが早すぎて処理としてVBA側が追い付いて無いんじゃなね?と自分に言い聞かせる形で諦めました。

僕としては 安定して動作すれば良いので、原因の追究は またの機会ということで。
Nakamura
 
 
 

オススメの参考本+終わりに

今回はここまでとなります。

ここまでご覧いただきありがとうございました。

 

本記事が皆様のVBAライフを良い感じで充実させるものになっているのであれば、記事作成冥利につきます。

VBAのSelenium利用者は希少種ですからね。。。
もう少しSeleniumに関する有用性の高いWeb記事が増えたら嬉しいな。。。
Nakamura
 

ちょっとだけ宣伝ですが、僕がSeleniumを利用する際に参考にしている本を紹介しておきます。

注意:この本自体には「VBAにおけるSeleniumの使用方法」は記載しておりません。

 

紹介した本自体に「VBA×Selenium」のコーディング情報は載っていません。
主に コア言語である「Java」「JavaScript」「Python」「Ruby」等のSeleniumの使用方法が記載されているのですが、筆者は、PythonページからVBAに読み替える際に使用しています。

ちなみに、本記事で紹介しているコーディングは この本で紹介されているコードをVBAに読み替え+修正して 使用しています。

VBAのSeleniumに関するWeb記事が間違ってことが多く、
この本を取っかかりに自作コードを組んだりすると早くコーディングが出来ますので かなり助かっています。

というか、こんなんだから VBAのSelenium利用者が増えないんじゃないのかな・・・。笑

Nakamura
 
 

他にも Seleniumに関する情報や、VBAに関する記事も本ブログでは紹介しておりますので、
もしよろしければ ご覧になってください。

基本的に、僕個人の備忘止めを目的として記事を公開しています。
ですので、読みにくかったりしたらすみませんorz (こんな最後尾に言うのは反則ですが。)

ちなみに、自分の記事ですが、ブックマーク登録してたりします。笑
コピペして利用できる記事は ブックマークしておくと 良いですよー。
無料ですし、向いて無かったら消せばいいだけですので。

Nakamura
 

さて、ここまでの長文をお読みいただきありがとうございました

今後もNakamuraBlog(ナカログ)をよろしくお願いいたします。

おわり。




-ALL, EXCEL, Program, Selenium, Tips, VBA
-, , ,