自動試験などで画面キャプチャを残すことは多々あると思います。しかし、TakeScreenshotでは画面に表示されている部分のみしか画面キャプチャされません。スクロールしないと見えない部分の画面キャプチャを取りたい場合、いちいちスクロースさせるのは面倒ですよね。今回は、SeleniumBasicでWEBページ全体の画面キャプチャを取得する方法を紹介します。
「AddArgument “headless”とWindow.SetSize」で解決する
ポイントは、ヘッドレスでChromeを起動した後、Chormeのサイズを表示されるコンテンツのサイズに拡大することです。具体的には「scrollHeightとscrollWeight」でコンテンツサイズを取得して、dr.Windows.SetSizeでChromeのサイズを変更します。
ヘッドレス起動とChomeサイズ変更が肝になります。
サンプルプログラム
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