この記事について
『AccessのVBAで初めてSeleniumを使うよ』って状態向け。
- 環境構築。
- 『特定サイト開いて検索ボックスに値入れる』という基本的な操作のサンプル。
について書いてるよ。
環境構築
概要
- SeleniumBasicのインストール。
- Chromeのバージョンに合わせたChromeDriverを特定のフォルダーに置く。
SeleniumBasic
下記サイトからダウンロード。
今回はChromeのみだけど、のちのちFireFoxも使うかもしれないので、全部インストール。
ChromeDriver
ChromeDriverはChromeのメジャーバージョンごとにファイルが異なる。
『Chromedriverのバージョン』と『Chromeのバージョン』が離れすぎているとSeleniumが動かない。
下記サイトでダウンロード。
ダウンロードしたzip内にある『chromedriver.exe』を下記フォルダーに置く。
C:\Users\ユーザー名\AppData\Local\SeleniumBasic
ファイル名にバージョンが含まれていない
あとあと…
この『chromedriver.exe』のバージョンっていくつだっけ?
ってことがよくある。
ChromeDriverのバージョンは控えておくのがおススメ。
ChromeDriverは自動更新されない
Chromeが更新されてもChromeDriverは 自動で更新されない 。
なので『最新のChromeDriverをダウンロードして差し替える』という手作業のメンテが必要。
ChromeDriverの更新を怠るとChromeの方だけバージョンが上がってしまい、
ある日突然Seleniumが動かなくなる
なーんてことになるので注意。
Access
参照設定
Selenium Type Library
にチェック入れる。
ソースコード
ボタンの名前は『btn_execute』。
Option Compare Database
Option Explicit
'=======================================================================================================================
'WebDriverを関数内で定義すると、関数終了と同時にChromeも終了してしまう。
'『関数終了してもChrome(画面)を残しておきたい』という時はこんなふうに変数を関数外で定義しよう。
'=======================================================================================================================
Dim WEB_DRIVER_ As Selenium.WebDriver
'=======================================================================================================================
'エントリーポイント
'=======================================================================================================================
Private Sub btn_execute_Click()
Set WEB_DRIVER_ = New Selenium.WebDriver
'Chrome起動
Call WEB_DRIVER_.Start("chrome")
'3秒待つ
Call WEB_DRIVER_.Wait(3 * 1000)
'サイト開く
Call WEB_DRIVER_.Get("https://qiita.com/")
'関数切り分けのサンプル
Call SendKeyTest
End Sub
'=======================================================================================================================
'検索ボックスに値入力
'=======================================================================================================================
Private Function SendKeyTest()
Dim web_element_ As Selenium.WebElement
'第一引数 = 探すnameの値
'第二引数 = タイムアウト(1000なら1秒でタイムアウト)
'第三引数 = 例外をRaiseするかどうか(見つからなかった場合など)
Set web_element_ = WEB_DRIVER_.FindElementByName("q", 1000, True)
Call web_element_.SendKeys("バーバラちゃん最高!")
End Function
ログインセッション
『手動で起動したChrome』と『Selenium経由で起動したChrome』とではログインセッションが異なる。
『Selenium経由でChrome操作して、ショッピングサイトの買い物カゴの中身リストアップ』
なんてことをする時は、ショッピングサイトへのログイン処理も作らないといけない。
バージョン
Windows 10 Pro 21H2 OSビルド 19045.2311
SeleniumBasic 2.0.9.0
ChromeDriver 107.0.5304.62
Microsoft Access for Microsoft 365 MSO (バージョン 2209 ビルド 16.0.15726.20188) 32 ビット
Chrome 107.0.5304.107(Official Build) (64 ビット)