Excel VBA で Microsoft Edge の読み込み完了を待ってページ内容を取得する方法

目次

概要

Internet Explorer 用の InternetExplorer.Application オブジェクトは廃止方向となり、Windows 10 以降では Microsoft Edge の自動操作が推奨されています。本記事では SeleniumBasic と EdgeDriver を用いて、Excel VBA から Edge を起動し、ページ読み込み完了後に特定要素のテキストを取得する手順を解説いたします。例としてサイト https://morinokabu.com/ の要素 id="Article" を取得します。


事前準備

項目手順
SeleniumBasicGitHub のリリースページからインストーラーをダウンロードし、通常インストールします。
EdgeDriverMicrosoft 公式サイトから使用中の Edge バージョンに対応する msedgedriver.exe を取得し、
C:\SeleniumBasic フォルダー(既定の SeleniumBasic インストール先)へ配置します。
参照設定VBA エディターで [ツール] → [参照設定] → “Selenium Type Library” にチェックを入れます。

サンプルコード

Option Explicit

' 参照設定: Selenium Type Library が必要です

Sub FetchArticleText()
    
    Dim pageURL   As String                ' 取得対象の URL
    Dim driver    As New Selenium.EdgeDriver
    Dim pageText  As String
    
    pageURL = "https://morinokabu.com/"
    
    ' Edge を起動しページを開く
    driver.Start
    driver.Get pageURL
    
    ' 読み込み完了を待機(document.readyState が "complete" になるまでループ)
    Do While driver.ExecuteScript("return document.readyState") <> "complete"
        DoEvents
    Loop
    
    ' id="Article" のテキストを取得
    pageText = driver.FindElementById("Article").Text
    
    ' 結果をメッセージボックスで確認
    MsgBox pageText, vbInformation, "取得したテキスト"
    
    driver.Quit
    
End Sub

ポイント解説

項目説明
driver.ExecuteScript("return document.readyState")JavaScript を実行し、ページの読み込み状態を取得します。"loading""interactive""complete" の順で遷移します。
DoEvents待機ループ中に VBA の画面更新や割り込みを許可し、応答不能状態を防ぎます。
FindElementById("Article").Text指定 ID の要素テキストを取得します。クラスや XPath を使用した検索も可能です。

ReadyState と document.readyState の対応表

IE 用数値IE 用定数Edge(Selenium)での状態説明
0READYSTATE_UNINITIALIZED初期化前
1READYSTATE_LOADING"loading"読み込み中
2READYSTATE_LOADED"interactive"DOM 構築完了、サブリソース未完了
3READYSTATE_INTERACTIVE"interactive"同上
4READYSTATE_COMPLETE"complete"すべてのリソース読み込み完了

応用アイデア

目的実装例
要素が描画されるまで待機driver.Wait 10000, "id=Article" で最大 10 秒待機
ページ内の複数要素を抽出driver.FindElementsByCss("div.article-item") でコレクション取得
スクロールが必要なページdriver.ExecuteScript "window.scrollTo(0, document.body.scrollHeight);" で最下部までスクロール

まとめ

SeleniumBasic と EdgeDriver を組み合わせると、Excel VBA でも Microsoft Edge のページ読み込み完了を厳密に検知し、DOM 要素を自在に取得できます。従来の IE 自動操作コードを Edge へ移行する際は、本記事の手順とコードをベースにカスタマイズしていただくとスムーズです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次