目次
はじめに
Windows 10 以降では Internet Explorer の自動操作が推奨されておらず、Microsoft Edge を用いたスクレイピングが主流です。本記事では SeleniumBasic と EdgeDriver を使用し、ページ読み込み後に特定クラスの要素を取得して Excel シートへ書き込む手順を解説いたします。例としてサイト https://morinokabu.com/ を対象とします。
前提環境
項目 | 内容 |
---|---|
OS | Windows 10 / 11 |
Excel | Microsoft 365 または Excel 2016 以降 |
追加ツール | SeleniumBasic(VBA ラッパー) |
ドライバ | msedgedriver.exe(Edge のバージョンに合わせて入手) |
- SeleniumBasic をインストールします(既定先は
C:\SeleniumBasic
)。 - Edge のバージョンに一致する msedgedriver.exe をダウンロードし、同フォルダーに配置します。
- VBA エディターで [ツール] → [参照設定] → “Selenium Type Library” を有効にします。
サンプルコード
Option Explicit ' 参照設定: Selenium Type Library が必要です
Sub ScrapeMorinokabuData()
Dim siteURL As String
Dim driver As New Selenium.EdgeDriver
Dim itemList As Selenium.WebElements
Dim element As Selenium.WebElement
Dim rowIndex As Long
siteURL = "https://morinokabu.com/"
' Edge 起動
driver.Start
driver.Get siteURL
' ページ読み込み完了待機
Do While driver.ExecuteScript("return document.readyState") <> "complete"
DoEvents
Loop
' クラス名 "data" を持つ要素群を取得
Set itemList = driver.FindElementsByCss(".data")
rowIndex = 1
For Each element In itemList
' 列 A: 最初の子要素テキスト
Cells(rowIndex, 1).Value = element.FindElementsByCss("*")(0).Text
' 列 B: 3 番目の <p> 要素の HTML
Cells(rowIndex, 2).Value = _
element.FindElementsByTag("p")(2).Attribute("outerHTML")
' 列 C: 最初の <a> 要素の href
Cells(rowIndex, 3).Value = _
element.FindElementsByTag("a")(0).Attribute("href")
rowIndex = rowIndex + 1
Next element
driver.Quit
End Sub
コード解説
処理 | 説明 |
---|---|
driver.ExecuteScript("return document.readyState") | JavaScript で読み込み状態を確認します。"complete" になるまでループします。 |
FindElementsByCss(".data") | CSS セレクターでクラス data を持つ要素群を取得します。 |
FindElementsByCss("*")(0) | 取得した要素の最初の子要素を参照します。 |
Attribute("outerHTML") | 要素自身を含む HTML 文字列を取得します。 |
Attribute("href") | <a> 要素のリンク先を取得します。 |
主な DOM アクセス手段と用途
メソッド | 取得対象 |
---|---|
FindElementById("id名") | 一意の ID を持つ要素を取得 |
FindElementsByName("name属性") | 指定 name を持つ要素群を配列取得 |
FindElementsByClass("class名") | 指定クラスを持つ要素群を配列取得 |
FindElementsByTag("tag名") | 指定タグ名を持つ要素群を配列取得 |
取得後は InnerText, Attribute(“outerHTML”), Attribute(“src”) などを組み合わせて情報を抽出できます。
応用アイデア
- 可変待機時間
driver.Wait 10000, "css=.data"
で最大 10 秒待機し、要素が現れ次第処理を継続できます。 - スクロールが必要なページ
driver.ExecuteScript "window.scrollTo(0, document.body.scrollHeight);"
で最下部まで読み込ませてから要素を検索します。 - 複数ページ巡回
URL を配列化し、ループでdriver.Get
を呼び出すと大量ページを順次処理できます。
まとめ
SeleniumBasic と EdgeDriver を併用することで、Excel VBA でも Microsoft Edge の DOM へ直接アクセスし、任意の要素を抽出できます。旧来の IE 自動化コードを移行する際は、FindElement
系メソッドと JavaScript 待機ロジックを組み合わせると安定して動作します。社内レポートやデータ収集の自動化にぜひご活用ください。