ALL EXCEL Program Selenium Tips VBA

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

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

Seleniumのロード待ちとは?

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

 
Selenium側の「wait メソッド」や VBA側の「Sleepメソッド」でお茶を濁すこともできますが、環境要因によって変動するSleepなどは使いたくないものです。(ネット速度によって Sleep 1000(1秒待つ)は変動しますからね。)
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(ナカログ)をよろしくお願いいたします。

おわり。




  • この記事を書いた人

Nakamura(nkmr)

NakamuraBlog(ナカログ)運営 [ 2.5万PV/月 ] │ブロガー│ 【経歴】IT会社に新卒入社 ▶︎ 通用しない ▶︎ プログラミングに出会う ▶︎ 年間1億円以上のコスト削減プログラムを開発 ▶︎ 会社賞受賞 ▶︎ 少しでも世の中の苦しんでる私と似た人に役に立てればと思いブログを開設。 ● 文系がプログラムと出会って会社員人生が変わった人。 ● 2020年より「嫁を置いて1人旅」の旅動画を投稿開始。

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