SeleniumBasicを利用して、スクリーンショットを撮る方法をご紹介します。
- 利用目的は業務効率化です。(テスト自動化ではありません)
- ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
- 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)
Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。
- C:\Program Files\Seleniumbasic\Examples\Excel
- shell:Local AppData\SeleniumBasic\Examples\Excel
ページトップのスクリーンショット
ウィキペディアホームページのトップページスクリーンショットを撮る構文の紹介です。
Private Sub Take_ScreenShot_Content()
Dim driver As New ChromeDriver
driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim img As selenium.Image: Set img = driver.TakeScreenshot()
img.SaveAs ThisWorkbook.Path & "\スクリーンショット画像.png"
driver.Quit
End Sub
3行目:ウィキペディアのページ取得
4行目:スクリーンショットをSeleniumのImage型で設定し、スクリーンショットを代入
5行目:スクリーンショット画像を保存
Web要素のスクリーンショット
Web要素を取得し、その要素の画像を保存する構文です。私のPC環境ではスクリーンショットの取得や保存は問題なくできるのですが、意図した画像取得できませんでした。
その原因は、ディスプレイ設定にあります。小型PCの場合、ディスプレイサイズが100%の状態では画面アイコンが小さ過ぎるため、200%以上に拡大しています。私のPCも200%が推奨設定です。100%より高い状態で構文を実行するとWeb要素のキャッチにズレが生じます。
一度、ディスプレイの拡大縮小とレイアウト設定を100%にすると、すんなりWeb要素のスクリーンショットを取得することができました。
Private Sub Take_ScreenShot_Element()
Dim driver As New ChromeDriver
driver.Get "https://ja.wikipedia.org/wiki/メインページ"
Dim img As selenium.Image
Dim elm As selenium.WebElement
Set elm = driver.FindElementByXPath("//*[@id='sister-projects-list']")
driver.Actions.MoveToElement(elm).Perform
Set img = elm.TakeScreenshot()
img.SaveAs ThisWorkbook.Path & "\スクリーンショット_web要素.png"
driver.Quit
End Sub
4行目:SeleniumのImage型を宣言
6行目:FindElementByXPathでWeb要素取得
7行目:要素の場所までスクロール
8行目:スクリーンショットを変数へ代入
9行目:スクリーンショットの保存
7行目のスクロールをしなければ、エラー発生しますのでご注意ください。
指定したWeb要素を強調してスクリーンショット
ウィキペディアの検索ボックスのWeb要素を取得し、検索ボックスを黄色枠で強調した状態でスクリーンショットを撮る構文を紹介します。
Private Sub Take_ScreenShot_Element_Highlight()
Const JS_ADD_YELLOW_BORDER = "window._eso=this.style.outline;this.style.outline='#FFFF00 solid 5px';"
Const JS_DEL_YELLOW_BORDER = "this.style.outline=window._eso;"
Dim drv As New ChromeDriver
drv.Get "https://en.wikipedia.org/wiki/Eurytios_Krater"
Dim ele As WebElement
Set ele = drv.FindElementById("searchInput")
ele.ExecuteScript JS_ADD_YELLOW_BORDER
Dim img As Selenium.Image
Set img = drv.TakeScreenshot()
img.SaveAs ThisWorkbook.Path & "\スクリーンショット_強調.png"
ele.ExecuteScript JS_DEL_YELLOW_BORDER
drv.Quit
End Sub
2行目:JavaScriptの設定(黄色枠の追加設定)
3行目:JavaScriptの設定(黄色枠の削除設定)
5行目:ホームページのドライバー取得
7行目:検索ボックスのWeb要素取得
8行目:JavaScriptの実行(黄色色枠の追加)
9行目:スクリーンショットを変数に代入
10行目:スクリーンショットを保存
11行目:JavaScriptの実行(黄色色枠の削除)
デスクトップのスクリーンショット
デスクトップのスクリーンショットを撮る構文の紹介です。わざわざブラウザを立ち上げた状態のスクリーンショットを撮る必要がどの程度あるのかよく分からないですが、一応紹介します。
Private Sub Take_ScreenShot_Desktop()
Dim driver As New ChromeDriver
Dim utils As New Selenium.utils
driver.Get "https://en.wikipedia.org/wiki/Main_Page"
Dim img As Selenium.Image
Set img = utils.TakeScreenshot()
img.SaveAs ThisWorkbook.Path & "\sc-desktop.png"
driver.Quit
End Sub
3行目:Seleniumのutils型の変数宣言
4行目:ウィキペディアのホームページドライバーゲット
5行目:Seleniumのimage型の変数宣言
6行目:utilsでデスクトップスクリーンショットを撮る
7行目:スクリーンショットを保存