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を使う方法を覚えておくと色々と活用できそうですね!

関連記事

  1. Office関連

    [PowerShell]iTextSharpを使ってPDFファイルを結合する

    mougにあった質問「2つのPDFファイルを結合するには」の回答用に書…

  2. Office関連

    Acrobatを使ってPDFファイルを結合するVBAマクロ

    前回の記事では、iTextSharpを使ってPDFファイルを結合するP…

  3. Office関連

    選択範囲内で文字列検索を行うWordマクロ

    今日は選択範囲内で文字列検索を行うWordマクロについて考えてみます。…

  4. Windows関連

    右クリックメニューからフォルダを管理者権限で開く(コマンド プロンプト)

    フォルダをShiftキーを押しながら右クリックすると、「コマンド ウィ…

  5. Office関連

    Visual Studio Community 2015でOffice開発する。

    「Microsoft、統合開発環境「Visual Studio 201…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP