概要
Excel VBAを用いてWebサイトからデータを自動収集する「スクレイピング」は、業務効率化の強力な武器です。従来、VBAでのスクレイピングといえば「Internet Explorer (IE) コンポーネント」を利用するのが一般的でしたが、IEのサポート終了に伴い、その手法は過去のものとなりました。そこで現代のVBAエンジニアが習得すべきなのが「Selenium Basic」です。Seleniumを活用することで、ChromeやEdgeといった最新ブラウザを自在に操作し、動的なWebサイト(JavaScriptで描画されるサイト)からも確実にデータを取得することが可能になります。本記事では、Selenium Basicの導入から実務での活用法まで、プロフェッショナルな視点で徹底解説します。
詳細解説
Selenium Basicとは、Webブラウザ自動化ツール「Selenium」をVBAから呼び出すためのラッパーライブラリです。IEの制御手法とは異なり、WebDriverというインターフェースを介してブラウザを操作するため、モダンなWeb技術(ReactやVue.jsなど)が採用されたサイトであっても、人間がブラウザを操作するのと同様の挙動を再現できます。
Seleniumを利用する際、最も重要なのが「WebDriver」の管理です。ブラウザ(例えばChrome)がアップデートされるたびに、対応するバージョンのChromeDriverをダウンロードし、Selenium Basicのインストールフォルダに配置する必要があります。この手間を「面倒だ」と感じるか「必要なコスト」と捉えるかで、エンジニアとしてのスキルレベルが分かれます。
基本的な操作の流れは以下の通りです。
1. WebDriverのインスタンスを生成する。
2. 対象URLにアクセスする。
3. HTML要素(ID、Class、CSSセレクタ、XPathなど)を指定して要素を特定する。
4. 特定した要素に対して「クリック」「テキスト入力」「値の取得」などのアクションを行う。
5. 処理終了後、ブラウザを閉じる。
特に重要なのが「待機処理」です。Webサイトは通信状況によって読み込み速度が異なります。単にコードを上から順に実行するだけでは、要素が表示される前に操作しようとしてエラーが発生します。Seleniumには「Wait」系のメソッドが豊富に用意されており、これらを適切に配置することが、堅牢なスクレイピングツールを作成するための極意となります。
サンプルコード
以下に、Google検索を行い、検索結果のタイトルとURLをExcelシートに書き出す基本的なサンプルコードを提示します。
Sub SimpleScraping()
' 参照設定: Selenium Type Library を追加しておくこと
Dim driver As New Selenium.ChromeDriver
Dim elements As Selenium.WebElements
Dim element As Selenium.WebElement
Dim i As Long
' ブラウザを起動し、Googleへアクセス
driver.Start "chrome"
driver.Get "https://www.google.com"
' 検索ボックスにキーワードを入力して送信
driver.FindElementByName("q").SendKeys "VBA Selenium"
driver.FindElementByName("q").SendKeys Keys.Enter
' 読み込みを待機(明示的な待機)
driver.Wait 2000
' 検索結果のリンク要素を取得(CSSセレクタを使用)
Set elements = driver.FindElementsByCss("h3")
' 取得した結果をシートに出力
i = 1
For Each element In elements
Cells(i, 1).Value = element.Text
i = i + 1
If i > 10 Then Exit For
Next element
' ブラウザを閉じる
driver.Quit
End Sub
実務アドバイス
実務でSeleniumを運用する際、多くのエンジニアが陥る罠が「要素の特定」です。WebサイトのHTML構造は頻繁に変わります。IDやClassが動的に生成されるサイトの場合、固定的なセレクタを指定すると翌日には動かなくなることがあります。
プロフェッショナルは「XPath」を駆使します。特に、特定のテキストを含む要素を探す`//div[contains(text(), ‘検索’)]`のような指定方法は、構造変化に強いコードを書くために必須のスキルです。
また、大規模なスクレイピングを行う際は、以下の3点に注意してください。
1. サーバー負荷への配慮:短時間に大量のリクエストを送ることは、Webサイト側への攻撃とみなされる可能性があります。`Application.Wait`などを活用し、適度な間隔を空けましょう。
2. 例外処理の実装:`On Error GoTo`を使用し、特定の要素が見つからなかった場合や、タイムアウトが発生した場合のリカバリー処理を必ず記述してください。
3. ヘッドレスモードの活用:ブラウザ画面を表示させずに処理を行う「ヘッドレスモード」を設定することで、実行速度の向上とリソース消費の削減が可能になります。`driver.AddArgument “–headless”`という設定を加えるだけで実現できます。
まとめ
Selenium Basicは、VBAによるWeb操作の可能性を飛躍的に広げるツールです。IEからSeleniumへ移行することで、これまで「VBAでは難しい」と諦めていたモダンなWebサイトの自動化が現実的になります。
ただし、強力なツールであるからこそ、Webサイト側の利用規約を遵守し、礼儀正しいクローリングを心がけることが、プログラミングを生業とする者の責務です。今回紹介した基本を土台に、ご自身の業務環境に合わせてカスタマイズを重ね、ぜひ「自動化による生産性の最大化」を実現してください。この技術を習得した先には、これまで手作業に費やしていた膨大な時間が、より価値の高い創造的な仕事へと置き換わる素晴らしい未来が待っています。
