自動試験などで画面キャプチャを残すことは多々あると思います。しかし、TakeScreenshotでは画面に表示されている部分のみでスクロールしないと見えない部分の画面キャプチャを取得することができません。今回は、Selenium VBAでWEBページ全体の画面キャプチャを取得する方法を紹介します。
「AddArgument “headless”とWindow.SetSize」で解決する
ポイントは、ヘッドレス化でChromeを起動した後に「scrollHeightとscrollWeight」の値をWindowsサイズに指定することです。サンプルプログラムを実行するとわかりますが、同時に指定しないとWEBページ全体のキャプチャは取得できないようです。
サンプルプログラム
Option Explicit
Sub sample()
Dim dr As New Selenium.WebDriver
Dim w As Integer, h As Integer
'通常起動
dr.Start "chrome"
dr.Get "https://www.yahoo.co.jp"
dr.TakeScreenshot.SaveAs "head_1.png" 'NG WEBページ全体は取得できない
h = dr.ExecuteScript("return document.body.scrollHeight")
w = dr.ExecuteScript("return document.body.scrollWidth")
dr.Window.SetSize w, h
dr.TakeScreenshot.SaveAs "head_2.jpg" 'NG WEBページ全体は取得できない
dr.Quit
'ヘッドレス起動
dr.AddArgument "headless"
dr.Start "chrome"
dr.Get "https://www.yahoo.co.jp"
dr.TakeScreenshot.SaveAs "headless_1.png" 'NG WEBページ全体は取得できない
h = dr.ExecuteScript("return document.body.scrollHeight")
w = dr.ExecuteScript("return document.body.scrollWidth")
dr.Window.SetSize w, h
dr.TakeScreenshot.SaveAs "headless_2.png" 'OK WEBページ全体は取得できる
dr.Quit
End Sub