Excel

ヘッドレス 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]シンプルリボンのアンケートへの回答でAmazonギフト券が当たるチャンス

    「Office の新しい外観」にある通り、一部のOffice環境では、…

  2. Office関連

    図形の結合を行うPowerPoint マクロ(ExecuteMsoメソッド編)

    Excel MVPの伊藤さんのブログで、PowerPointの「図形の…

  3. Office関連

    Office 2016 Preview for Windowsのサポート情報まとめ

    「Office のサポート ページ - support.office.…

  4. Office関連

    リボンのタブを選択するVBAマクロ

    マクロでリボンのタブを選択する方法として、ActivateTabやAc…

  5. Office関連

    OfficeのコマンドID(コントロールID)リストがGitHubで公開されました。

    前回の記事でも触れていますが、メインストリームサポート期間内のOffi…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP