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 アドイン

    Office 365でVisio JavaScript APIsを試してみました。

    昨年末にVisio Onlineの機能をJavaScriptで拡張する…

  2. Office関連

    「クラシックスタイルメニュー for Office 2010」のOffice 2013対応状況

    私が下記ページで公開しているフリーソフト「クラシックスタイルメニュー …

  3. Office関連

    A1セルを選択してから保存するExcelアドイン

    @yu_tang_さんのツイートで面白いものがありました。…

  4. Office関連

    段落内改行を一括置換するOutlookマクロ

    「段落内改行 置換 Outlook マクロ」といったキーワードでのアク…

  5. Office関連

    シート見出しの右クリックメニューから「コードの表示」を消す方法

    いつもお世話になっている「インストラクターのネタ帳」の管理人である伊藤…

  6. Office関連

    PowerPoint 2013でYouTubeの動画を挿入する。

    2014/5/23 追記:いつの間にか「ビデオの挿入ダイアログ」が…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP