【SeleniumVBA】ブラウザに関するメソッドについてコードを紹介します

VBAスクレイピング

こんにちは、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
 
 'ページが表示されているか確認する
Debug.Print driver.IsPageFound("https://www.yahoo.co.jp/")

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】待機処理に関するメソッドについてコードを紹介します

コメント

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