Office関連

ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法

先日、ヘッドレス ChromeでWebページ全体のスクリーンショットを撮る方法について書かれた下記の記事を見つけました。

>>> page_width = driver.execute_script(‘return document.body.scrollWidth’)
>>> page_height = driver.execute_script(‘return document.body.scrollHeight’)
>>> driver.set_window_size(page_width, page_height)

なるほど。ウィンドウの大きさをページに合わせるわけですね!
これは簡単で便利そう。

ヘッドレス Chromeについては一年ほど前に記事を書いていたので、さっそく同じようにSeleniumBasicでWebページ全体のスクリーンショットを撮るコードを書いてみました。

下記コードの注意点として、この記事でも書いている通り、SeleniumBasicに同梱されているChromeDriverのバージョンは古いものなので、操作対象となるChromeのバージョンに合ったファイル(chromedriver.exe)に、事前に差し替える必要があります。

Public Sub Sample()
  Dim w As Long, h As Long
  
  With CreateObject("Selenium.ChromeDriver")
    .Timeouts.ImplicitWait = 3000
    .AddArgument "--headless --disable-gpu --hide-scrollbars"
    .Start
    .Get "https://news.yahoo.co.jp/"
    w = .ExecuteScript("return document.body.scrollWidth")
    h = .ExecuteScript("return document.body.scrollHeight")
    .Window.SetSize w, h 'ウィンドウサイズ変更
    .TakeScreenshot.SaveAs "C:\Test\SC.jpg"
    .Quit
  End With
  MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub

画像サイズが大きいので分かりづらいですが、ちゃんと意図した通りに画面全体のキャプチャーが撮れているようです。

ついでに、上記コードを改変して、URLを渡したらスクリーンショットをピクチャフォルダに保存するVBScriptのコードも書いてみました。
(後から気が付きましたが、InputBoxでURLを受け取るようにした方が便利だったかもしれません。)

Option Explicit

Dim args
Dim w, h
Dim fp, fn
Dim v
Const CSIDL_MYPICTURES = 39

Set args = WScript.Arguments
If args.Count < 1 Then WScript.Quit

'保存先ファイルパス設定
v = Split(Split(args(0), "://")(1), "/")
fn = v(0) & ".jpg"
With CreateObject("Scripting.FileSystemObject")
  fp = .BuildPath( _
    CreateObject("Shell.Application").Namespace(CSIDL_MYPICTURES).Self.Path, _
    fn)
End With

With CreateObject("Selenium.ChromeDriver")
  .Timeouts.ImplicitWait = 3000
  .AddArgument "--headless --disable-gpu --hide-scrollbars"
  .Start
  .Get args(0)
  w = .ExecuteScript("return document.body.scrollWidth")
  h = .ExecuteScript("return document.body.scrollHeight")
  .Window.SetSize w, h
  .TakeScreenshot.SaveAs fp
  .Quit
End With

WScript.Echo "処理が終了しました。"

縦長のページもちゃんと撮れているようです。

ページ全体のスクリーンショットを撮る機会は割と多いので、ヘッドレス Chromeを使う方法を覚えておくと色々と活用できそうですね!

[Google Apps Script]認証が必要なウェブアプリケーションを外部から実行する前のページ

ESETで「Windowsセキュリティセンターへの登録が失敗しました」エラーが発生次のページ

関連記事

  1. Office関連

    Excel REST APIをVBAから呼び出す方法

    「Microsoft GraphをVBAから呼び出してOneNoteの…

  2. Office関連

    Word 2013では簡単にウィンドウ ハンドルを取得できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  3. Office関連

    PowerShellからNetOfficeを使ってExcelを操作する方法

    先日、Excel MVPの伊藤さんがPowerShellからExcel…

  4. Office関連

    選択範囲をOneNoteに送るVBAマクロ

    OneNote プリンタードライバー(プリンター)を使ってドキュメント…

  5. Office関連

    [Wordマクロ]PrintOutメソッド実行時に「型が一致しません」との実行時エラーが発生する。

    Wordマクロで文書を印刷するときはPrintOutメソッドをよく使い…

  6. Office関連

    Office 2013の開発者用リファレンス

    「Word2013 VBA の日本語ヘルプ」でも回答していますが、Of…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP