自動で大量のWebページのスクリーンショットをとる方法

自動で大量のWebページのスクリーンショットをとる方法

Excel VBAを使って、大量のWebページのスクリーンショットをとる方法です。5分でできますよ!

ウェブブラウザをコントロールできるSeleniumを使います。VBAで使えるSeleniumBasicというのがあるので下記ページからダウンロードしてインストールします。
Seleniumbasic

コードは以下になります。ExcelのVBAで参照設定から”Selenium Type Library”にチェックを付けておきます。実行するとSheet1のシート上の、セルのA列にURLが順に記入されている状態で、すべてのURLのスクリーンショットを任意のフォルダに保存します。

Sub takeScreenShot()
    Dim driver As FirefoxDriver
    Dim i As Long
    Dim destURL As String
    Dim flag As Boolean
    Dim imageFileName As String
    
    Set driver = New FirefoxDriver
    Call driver.Start
    driver.Timeouts.ImplicitWait = 10000           'Seleniumの読み込み待機時間
    'driver.Window.Maximize
    driver.baseUrl = "www.google.co.jp"
        
    With ThisWorkbook.Worksheets("Sheet1")
        For i = 1 To .Cells(1, 1).End(xlDown).Row
            If .Cells(i, 1) = "" Then 
            Else
                If InStr(.Cells(i, 1), "//") = 0 Then
                    destURL = "//" & .Cells(i, 1)
                Else
                    destURL = .Cells(i, 1)   
                End If
             
                flag = driver.Get(destURL)

                If Not flag Then
                    MsgBox (.Cells(i, 1).Value & "のページの読み込みに失敗しました。")   
                End If
                
                imageFileName = Replace(.Cells(i, 1).Value, "/", "_")        'URLにスラッシュが入るとフォルダごとに分けられるので、アンダーバーに置換
                                                                             'スラッシュごとにフォルダに分けたい場合は、次行のimageFileName を.cells(i, 1).Valueに置き換え
                driver.TakeScreenshot.SaveAs "C:\Users\user\Documents\pages" & imageFileName & ".jpg"
            End If
        Next
    End With
    driver.Close
End Sub

Warning: include(social-footer.html): failed to open stream: No such file or directory in /home/phase1/lifedesignedit.com/public_html/contents/themes/ldestylesheet/post-formats/format.php on line 50

Warning: include(): Failed opening 'social-footer.html' for inclusion (include_path='.:/opt/php-5.6.30/data/pear') in /home/phase1/lifedesignedit.com/public_html/contents/themes/ldestylesheet/post-formats/format.php on line 50

2 Comments

OshiroAyaka

seleniumBasicで、firefoxで指定のページへアクセスし、
ページ内容をクリップボードにコピーし、指定のセルにペーストとしたいのですが
どのようにコードを作成すれば好いでしょうか・・・?
ご教授願えないでしょうか。

Reply
まれまる

ページ内のどの要素を取得し、どのような規則で貼り付けるかによりますが、ざっくりと説明しますと、

  1. 1.Xpathで要素を指定して変数にセット
  2. 2.取得した要素を処理してセルに貼り付け

という流れでできます。

例えば、「idがtable1のテーブルを一旦取得し、For文でテーブル内の要素のTRやTD要素を、一つずつ順番にセルに入れていく」といった処理ができます。

このあたりコードも短く書けませんので、ざっくりした説明となりますが参考になれば幸いです。

Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です