こんにちは、blueです。
前回はSeleniumVBAのメソッド一覧について説明しました。
前回の記事はこちら

今回からはブラウザ、すなわちWebDriverに関するメソッドについて説明します。
なおWebDriverに関するメソッドは以下の様なものがあります。
- 通常処理(操作、取得)
- アラート処理
- 待機処理
今回の記事では操作、取得に関するものを載せていますので参考にしてください。
なお、2022年9月以降インストール方法の変更により変数の宣言方法が変わっています。
詳しい記事はこちらをご確認ください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
ブラウザを閉じる
ブラウザを閉じるにはCloseBrowserメソッドを使用します。
コードは以下になります。
1 2 3 | Dim driver As New WebDriver driver.CloseBrowser |
CloseBrowserメソッドには引数は存在しません。
取得したWebdriverに対応したブラウザを閉じることになります。
全てのブラウザを閉じる
立ち上げている全てのブラウザを閉じるにはShutdownメソッドを使用します。
CloseBrowserメソッドと異なり、Shutdownメソッドは立ち上げている全てのブラウザを閉じます。
コードは以下になります。
1 2 3 | Dim driver As New WebDriver driver.Shutdown |
Shutdownメソッドには引数は存在しません。
以下の様に取得したWebdriverに対応した全てのブラウザを閉じます。

ウィンドウを閉じる
ウィンドウを閉じるにはCloseWindowメソッドを使用します。
以下は開いている1番目のWindowを閉じるコードになります。
1 2 3 | Dim driver As New WebDriver driver.CloseWindow 1 |
CloseWindowメソッドの引数にはウィンドウのIndexやHandle名を指定します。
引数の値を変えることで任意のWindowを閉じることが可能です。
Chromeを開く
Chromeを開くにはStartChromeメソッドを使用します。
コードは以下になります。
1 2 3 | Dim driver As New WebDriver driver.StartChrome |
StartChromeメソッドには必須の引数は存在しません。
引数を指定しなければ、ファイルと同じ階層にあるchromedriverを取得し、所定のポート番号を用いてChromeを開きます。
Chrome以外の場合はStartEdge, StartFirefoxメソッドを使用すれば同様の機能が実現できます。
ブラウザを開く
ブラウザを開くにはOpenBrowserメソッドを使用します。
コードは以下になります。
1 2 3 | Dim driver As New WebDriver driver.OpenBrowser |
OpenBrowserメソッドには必須の引数は存在しません。
引数を指定することでヘッドレスモードで開くことができるようになります。
ブラウザをヘッドレスモードで開く
ブラウザをヘッドレスモードで開くにはOpenBrowserメソッドに引数を追加します。
1 2 3 4 5 | Dim driver As New WebDriver Dim caps As WebCapabilities Dim invisible As Boolean driver.OpenBrowser caps, invisible = False |
OpenBrowserメソッドの第2引数にはWebCapabilitiesクラス型のcaps、第3引数にはBoolean型のinvisible変数を置きます。こうすることでバックグラウンドで処理することができます。
次に進める、前に戻る
ページを進める、戻るにはGoForward, GoBackメソッドを使用します。
コードは以下になります。
1 2 3 4 5 6 | Dim driver As New WebDriver '次に進む driver.GoForward '前に戻る driver.GoBack |
GoFoward, GoBackメソッドには引数は存在しません。
ページを再読み込みする
ページを再読み込みするにはRefreshメソッドを使用します。
コードは以下になります。
1 2 3 4 | Dim driver As New WebDriver 'ページを再読み込みする driver.Refresh |
Refreshメソッドには引数は存在しません。
ページを最大化、最小化する
ページの最大化、最小化にはMaximaizeWindow, MinimizeWindowメソッドを使用します。
1 2 3 4 5 6 | Dim driver As New WebDriver 'ページを最大化する driver.MaximizeWindow 'ページを最小化する driver.MinimizeWindow |
MaximaizeWindow, MinimizeWindowメソッドには引数は存在しません。
全画面表示にする
ページを全画面表示にするにはFullScreenWindowメソッドを使用します。
コードは以下になります。
1 2 3 4 | Dim driver As New WebDriver 'ページを全画面表示にする driver.FullScreenWindow |
FullScreenWindowメソッドには引数は存在しません。
新しいウィンドウに移動する、指定したウィンドウに移動する
新しい、あるいは指定したウィンドウに移動するにはSwitchToNewWindow, SwitchToWindowメソッドを使用します。
以下は新しいウィンドウに移動する、一つ目、二つ目のウィンドウに移動するコードになります。
1 2 3 4 5 6 7 8 9 10 | Dim driver As New WebDriver '新しいウィンドウに移る driver.SwitchToNewWindow '一つ目のウィンドウにスイッチする driver.SwitchToWindow 1 '二つ目のウィンドウにスイッチする driver.SwitchToWindow 2 |
SwithcToNewWindowメソッドには必須の引数は存在しません。
一方SwithcToWindowメソッドの引数にはウィンドウのIndexやHandle名を指定します。
引数の値を変えることで任意のWindowを閉じることが可能です。
指定したフレームに移動する
指定したフレームに移動するにはSwitchTo○○○Frameメソッドを使用します。
以下はフレーム間を移動するコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Dim driver As New WebDriver 'ページ上の最初のフレームを選択する driver.SwitchToDefaultContent 'インデックスか名前、WebElementで指定されたフレームを選択する driver.SwitchToFrame 'インデックスで指定されたフレームを選択する driver.SwitchToFrameByIndex '親フレームを選択する driver.SwitchToParentFrame |
SwithcTo○○○Frameメソッドには色々な種類が存在します。引数の指定により任意のフレームへの移動も可能です。
ただし子フレーム間の移動に関しては一度親フレームに戻る必要があるので注意してください。
指定した要素にスクロールする
指定した要素にスクリーンを移動させるにはScrollToElementメソッドを使用します。
以下はYahooの記事の一番目にスクロールするコードになります。
1 2 3 4 5 6 7 8 9 10 | Dim driver As New WebDriver 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 '要素にスクロールする(一番上にくる) Dim elm As WebElement Set elm = driver.FindElementByCssSelector( "#qurireco > article:nth-child(1) > a > div > div._3JzPQNweNOi2PGgRhkTKjU > h1 > span" ) driver.ScrollToElement elm |
ScrollToElementメソッドの引数には目的地となる要素を指定します。実行すると指定した要素が画面の一番上に表示されます。
なお、別にScreenIntoViewメソッドも存在します。こちらも指定した要素をスクリーンに表示させることができます。
指定した場所にスクロールする
指定した場所にスクロールさせるにはScrollByメソッド、ScrollToメソッドを使用します。
先ほどとの違いは場所の指定を(x,y)の座標を使って行うことです。
以下はYahooページをスクロールするコードになります。
1 2 3 4 5 6 7 8 9 10 11 | Dim driver As New WebDriver 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 '起点から指定した数値Offsetした場所にスクロールする driver.ScrollBy 100, 100 '指定した数値の場所にスクロールする driver.ScrollTo 100, 100 |
ScrollByメソッド、ScrollToメソッドとも第一引数にはx, 第二引数にはyを指定します。Scrollbyメソッドは現在地点からx,y移動した場所、ScrollToメソッドはブラウザの絶対位置となるx,yを指定します。
ページ最上部、最下部にスクロールする
ページ最上部、最下部にスクロールさせるにはScrollToTopメソッド、ScrollToBottomメソッドを使用します。
以下はYahooページをスクロールするコードになります。
1 2 3 4 5 6 7 8 9 10 11 | Dim driver As New WebDriver 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 '最下部にスクロールする driver.ScrollToBottom '最上部にスクロールする driver.ScrollToTop |
ScrollToTopメソッド、ScrollToBottomメソッドとも引数は存在しません。メソッドのみでスクロールが可能です。
pdfで保存する
ページをpdfで保存するにはPrintToPDFメソッドを使用します。
以下は開いたページをThisWorkbookのパスにscreenshot.pdfとして保存するコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Dim driver As New WebDriver Dim caps As WebCapabilities Dim invisible As Boolean 'Chromeを選択してブラウザを開く ブラウザはヘッドレスモードで開く driver.StartChrome driver.OpenBrowser caps, invisible = False 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 'ブラウザをpdfとして保存する。ヘッドレスモードでないと駄目 driver.PrintToPDF ThisWorkbook.Path & "\screenshot.pdf" |
PrintToPDFメソッドを使用するにはブラウザをヘッドレスモードで開く必要があります。
引数には保存するパスとファイル名を記載します。
スクリーンショットを保存する
ページのスクリーンショットを保存するにはSaveScreenshotメソッドを使用します。
以下は開いたページをscreenshot.jpgとして保存するコードになります。
1 2 3 4 5 6 7 8 9 10 | Dim driver As New WebDriver 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 '同じ階層にscreenshot.jpgとして保存する driver.SaveScreenshot '指定したパスにjpgとして保存する driver.SaveScreenshot ThisWorkbook.Path & "\screenshot.jpg" |
SaveScreenshotメソッドの引数は省略可能です。省略した場合は同じ階層にscreenshot.jpgという形で保存されます。
指定したパスに保存するには引数に保存するパスとファイル名を記載します。
現在のURLとタイトルを取得する
現在のURLやタイトルを取得するにはGetCurrentURLメソッド,GetTitleメソッドを使用します。
現在のURLとタイトルをイミディエイトウィンドウに出力するコードは以下になります。
1 2 3 4 | Dim driver As New WebDriver Debug.Print driver.GetCurrentURL Debug.Print driver.GetTitle |
GetCurrentURLとGetTitleメソッドには引数は存在しません。
Yahooにアクセスした際はイミディエイトウィンドウに以下の様な情報が表示されます。


ウィンドウハンドル名を取得する
ウィンドウハンドル名を取得するにはGetWindowHandlesメソッドを使用します。
以下はウィンドウハンドルの一覧を取得し、1番目をイミディエイトウィンドウに出力するコードになります。
1 2 3 4 5 | Dim driver As New WebDriver Dim hdl As Variant hdl = driver.GetWindowHandles Debug.Print hdl(1) |
ウィンドウハンドルとはコンピュータが各ウィンドウに割り振る管理番号のことです(参考記事はこちら)
SeleniumVBAではウィンドウハンドルの取得は配列となっているので、Variant型の配列として取得した後、引数にインデックスを指定することで個別に出力しています。
ウィンドウの位置とサイズを取得する
ウィンドウの位置とサイズを取得するにはGetWindowRectメソッドを使用します。
以下は結果をイミディエイトウィンドウに出力するコードになります。
1 2 3 4 5 | Dim driver As New WebDriver Dim rect As Dictionary Set rect = driver.GetWindowRect Debug.Print "x=" & rect( "x" ), "y=" & rect( "y" ), "width=" & rect( "width" ), "height=" & rect( "height" ) |
GetWindowRectメソッドにより、ウィンドウの左上の位置(xとy)、ウィンドウのサイズ(widthとheight)をDictionary型として取得します。
出力する場合はDictionary(key)のようにkeyを指定します。
イミディエイトウィンドウには以下の様に表示されます。

ページが表示されているかを確認する
ページが表示されているかを確認するにはIsPageFoundメソッドを使用します。
以下はYahooページが表示されているかを確認し、イミディエイトウィンドウに結果を表示させるコードです
1 2 3 4 5 6 7 8 | Dim driver As New WebDriver 'サイトを開く driver.NavigateTo "https://www.yahoo.co.jp" driver.Wait 1000 'ページが表示されているか確認する |
IsPageFoundメソッドの引数にはページのURLを文字列型で記載します。そのページが表示されていればTrue, 表示されていなければFalseを返します。
今回のまとめ
今回はWebDriverの操作に関するメソッドを紹介しました。
スクレイピングをする際にはブラウザやウィンドウの操作が必要になることもあります。ぜひサンプルコードを使ってみてください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。各言語における基本的なメソッド一覧も記載されていますのでコードを書く際の参考になります。
SeleniumVBAに関する記事はこちら
【SeleniumVBA】初心者向けに導入方法についてわかりやすく説明します(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します。
【SeleniumVBA】Yahooメールへのログイン方法をわかりやすく説明する(Excel VBA)
【SeleniumVBA】スクレイピングで使うメソッドについて説明します2(Excel VBA)
【SeleniumVBA】スクレイピングをする為のメソッド一覧表
【SeleniumVBA】ブラウザを操作するメソッドについてサンプルコードを紹介します
【SeleniumVBA】2022年9月の更新に伴うコードの変更点について説明します。
【SeleniumVBA】アラート処理に関するメソッドについてコードを紹介します
【SeleniumVBA】待機処理に関するメソッドについてコードを紹介します
コメント