【EXCEL VBA】SeleniumBasicでWEBページ全体の画面キャプチャを取得したい

自動試験などで画面キャプチャを残すことは多々あると思います。しかし、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