VBAでEdge/Chromeで表示している画面をキャプチャしたい場合があります。
単純に画面をキャプチャしたい場合はTakeScreenshotで可能ですが、
Webブラウザ全体を画面キャプチャ(スクリーンショット)としたい場合は、以下二点を設定します。
- ブラウザ画面を非表示にする(“headless”)
- WindowサイズをscrollHeightとscrollWeightで設定する。
ブラウザ画面”全体”をキャプチャするサンプルコード
'■Edge/Chromeでブラウザ画面全体をキャプチャする Public Sub sample() Dim driver As New Selenium.WebDriver '■ブラウザ画面を非表示に設定 driver.AddArgument "headless" '■ブラウザを起動 driver.start "chrome" driver.Get "https://vba-create.jp/" '■キャプチャするサイズを指定(画面全体に指定) Dim sWidth As Long: sWidth = driver.ExecuteScript("return document.body.scrollWidth") Dim sHeight As Long: sHeight = driver.ExecuteScript("return document.body.scrollHeight") driver.Window.SetSize sWidth, sHeight '■ファイル名のみ指定した場合はカレントディレクトリに保存 driver.TakeScreenshot.SaveAs "screenshot1.png" '■フルパス指定した場合は指定した場所に保存 driver.TakeScreenshot.SaveAs "C:\vba\screenshot1.png" End Sub
注意点
- 保存先に既に同名ファイルが存在する場合、上書きします。
- 上記コードは現在表示している画面全てを画像ファイルとしてキャプチャします。
※Webブラウザ表示中の画面ををキャプチャしたい場合はこちらの記事参照。
※キャプチャした画像をエクセルに貼り付けたい場合はこちらの記事参照。 - 横幅が想定しているサイズでない場合は、画面レスポンシブが働いていると考えます。
横幅はある程度のサイズを自身で指定してもよいと考えています。(1920などの画面横サイズ等)
関連記事
- Selenium「ブラウザのサイズを最大化/指定サイズ」にする【ExcelVBA】
- Selenium「Edge/Chromeの起動をする」【ExcelVBA】
- Edge/ChromeでWebページを印刷する【shadowRoot】【Selenium】
SeleniumBasicについて
Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。
但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。
コメント