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 365アイコン(imageMso)一覧(V)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  2. Office関連

    VALUE DOMAINで管理しているドメインをOffice 365で使用する。

    Office 365をセットアップすると設定される初期ドメイン「onm…

  3. Office関連

    Microsoft Graph SDK for PHPを使ったAPIの呼び出しサンプル

    知らない間に(恐らくBuild 2017のタイミングに合わせて)Mic…

  4. Office関連

    既存の機能の代わりにマクロを実行する方法をまとめてみました。

    「既存の機能の代わりにマクロを実行する」の関連になりますが、Offic…

  5. Office アドイン

    Excel向けPower BI カスタム ビジュアル機能の紹介

    Power BI ブログの記事「Excel announces new…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP