Seleniumを使ってVBAからchromeブラウザ操作(VBA編)

excelvba エクセル

ここではSeleniumを使ってVBAからchromeブラウザ操作するVBAプログラムについて解説します。

※自動化した処理は接続先にトラフィックを送ります。過度になった場合は異常アクセスとされることがありますので使用にはご注意ください。

まずはchromeとseleniumがインストールされていない場合はインストールをしましょう。

Seleniumを使ってVBAからchromeブラウザ操作(インストール編)

それではVBAでよく使われる手法を見ていきましょう。

 

スポンサーリンク

ブラウザ設定と起動や終了

基本のブラウザを開いてURLにアクセスしそれを終了するプログラムです。

「driver」がブラウザのオブジェクトになりますので、これに様々な処理をしていきます。

最後のリセットは変数を空(未設定)にしておくものです。

終了時は「.Close」を使用していますが「.quit」も使用できます。

.quitは

このドライバを使用して、関連するすべてのウィンドウを閉じます。停止と同じです。

.closeは

現在のウィンドウを閉じます

 

ソースを取得する

ソースのスクレイピングなどの時は「source」を加工したりすることによって色々な情報が取得できます。

 

属性やセレクタを指定して取得する

「.FindElement~」が様々な方法で指定したものを取得するものです。

cssセレクターは「#id > div > div > div.class-1」のよう記述方式で、ブラウザのデバック機能などで確認できます。

 

エレメントがあるかを確認

IsElementPresent」はエレメントが存在するかをBoolean(True,False)で返します。

エレメントに対して処理をする際、存在しない場合はエラーになってしまいますので、エラー処理をする場合に有効です。

ループ処理などにして応答を待つということもできます。

chromedriveは基本的にページの応答は待ってくれますが、javascriptなどで出現するエレメントは待ちません。

そのような場合は自分で待機する処理を入れる必要があります。

冒頭はsleepを使うための宣言です。

上記のようにするとエレメントが出現するまで6回ループし、なければエラー処理をします。

 

フォームに入力したりキーボード操作を送る

ID属性でテキストエリアを指定してクリアしてからテキストを挿入しています。

その後改行を入れるためにキーボードの「Enter」を押下しています。

その後submitしています。

.submitは.clickでも大丈夫なことが多いです。

尚、長い文章をフォームなどに挿入する場合はSendKeysは向きません。処理に時間がかかるからです。

javascriptを実行する方法が圧倒的に速いのでこちらも参照してください。

SendKeysで文章入力が重たい場合

ブラウザの操作を画面表示しない

ヘッドレスモードというもので画面に表示せずバックグラウンドで処理をします。

chromeで処理中は前面にブラウザが来てしまいます。

他の作業の邪魔にならないようにするにはバックグラウンド処理がいいでしょう。

また、ブラウザの表示がしませんので非表示のほうが端末への負荷が減りますので処理も早くなります。

 

画面サイズを指定して開く

画面サイズ指定はスクリーンショットを取るときなどに設定すると一律したサイズで取得できます。

 

スクリーンショットを取得する

「.TakeScreenshot」でスクショを取って「.SaveAs」で保存します。

保存先にはファイル名も含みます。

この機能はデバックにも使えます。

バックグラウンドで実行している場合、実際に処理をしている画面を確認したいときに便利です。

ツイッターなどで自動でログインさせない方法

ツイッターなどではログインページにアクセスすると、一度ログインしている場合ユーザー情報がブラウザに残っていて勝手にログインすることがあります。

ですが、ログインできたりできていなかったりだと、ログイン状態の確認をする必要がありますがなかなか面倒です。

そんな時に毎回必ずログインするようにできれば確認の作業が必要なくなります。

通常はブラウザのユーザー情報は

C:/Users/ユーザ名/AppData/Local/Google/Chrome/User Data

あたりに格納されていますので子の格納場所を変えてあげて毎回削除するばログイン画面から始められます。

尚、下記ではエクセルファイルと同階層に「tmp」というフォルダを作成しておきます。

最初にデータを格納するフォルダを設定します。

処理が終わったらユーザーデータを削除するという具合です。

逆に普段使っているアカウント以外で自動ログインしたい時などは、chromedrive用にユーザーデータを格納しておけばキャッシュクリアされるまではアクセスが可能です。

ブラウザでF5を押すようなリフレッシュをする

処理の途中で画面をリフレッシュしたいときもあると思います。

javascriptで処理をして、リロードしないと情報が更新されない場合などに使えるかと思います。

 

seleniumとvbaを使えば様々な自動化が可能です。

他にも色々な機能がありますのでお試しあれ。

 

 

 

コメント

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