SeleniumeBasicでスクリーンショットのハンドル usage_screenshot

リファレンス

 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行目:スクリーンショットを保存

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次