Skip to content

はじめに ​

最短でブラウザを動かすまでの手順です。ここでは、Excelを例にお伝えします。

1. マクロブックを信頼する ​

インターネットからダウンロードしたファイルには Mark of the Web (MOTW) が付きます。次を行ってください。

  1. Excel をすべて閉じる

  2. ファイルを右クリック → プロパティ右クリックメニュー

  3. 許可する にチェック → OK プロパティウィンドウ

  4. 再度開き、「編集を有効にする」/マクロを許可 マクロ警告バー

詳細な説明はリポジトリの README-jp.md を参照してください。

Access版について

Access版は、VBAをデコンパイルした状態でリリースしています。Excel版と同じCDPContext/WebDriverBiDiContext等のAPIが使えます(WebView2も、Excel/Access自身のウィンドウハンドルを自動判別して埋め込みます)。

2. ブラウザ起動設定シート ​

ワークシート ブラウザ起動設定ver4.X.X で次を確認します。

設定項目説明
ブラウザタイプ使用ブラウザ(Chrome / Edge)と、その開発レベル(安定版 / Beta / Dev / Canary)の切り替え。無印は安定版です
後述の「ブラウザexeパス」を記入すると、この項目は空欄になります
ブラウザexeパス特定のChromiumブラウザ(ポータブル版など)で自動化する場合の、exe名を含むフルパス
空欄に戻すと、ブラウザタイプは既定(Edge)に戻ります
ユーザーデータフォルダ名user-data-dirに渡すフォルダ名。ブラウザタイプに準拠した標準のディレクトリ配下に保存されます
C:\Data\MyProfileのようにドライブ付きのフルパスで書くと、それがそのままブラウザデータ保存先になります(WebView2も同様)
表示ウィンドウモード起動時のブラウザ表示モード(ShowWindowのnCmdShowに準拠)
WebSocketモードPipe / WebSocket 通信の切り替え
追加の起動引数基本は、J15セル以降に記述推奨

基本設定画面

こだわりがなければシートの初期値のままで問題ありません。

独自ユーザーエージェントの付与(任意) ​

シートのデバッグ設定にあるユーザーエージェントのスイッチをONにすると、ブラウザ本来のUser-Agentの末尾に、このツールを使用している旨のサインを追記します。HTTPリクエストヘッダーとJavaScriptのnavigator.userAgentの両方に反映されるため、相手サーバーに「このツールからのアクセスである」ことを通達できます。

text
Mozilla/5.0 ... Chrome/xxx Safari/537.36 Edg/xxx MicrosoftExcel-VBA/7.1 (StarterWebScrapingKit)
                                          └ 追記分(Accessから使う場合は、MicrosoftAccess-VBA/7.1 ...)

基本はOFFで問題ありません。自前サーバーのログフィルターなどで識別したいときにONにしてください。CDP / BiDi どちらでも有効です。

注意

一部のiframeは対象外です。

3. Hello World ​

標準モジュールのデモ、または新規モジュールに次を書いて実行します。

vb
Sub CDPによる冒険の始まり()
    Dim HelloWorld As CDPContext
    Set HelloWorld = ShSetting01_StartBrowser.StartCDPModeContext

    HelloWorld.navigate "https://kemono-friends.jp/"
    HelloWorld.notify "あなたは、けものがお好きですか?"
    Sleep 3

    HelloWorld.ThisCDPBrowser.CloseBrowser
End Sub
vb
Sub BiDiによる冒険の始まり()
    Dim HelloWorld As WebDriverBiDiContext
    Set HelloWorld = ShSetting01_StartBrowser.StartBiDiModeContext

    HelloWorld.navigate "https://example.com"
    Sleep 3

    HelloWorld.ThisWebDriverBiDiMode.CloseBrowser
End Sub

同梱デモ:

  • Demo_CDP.CDPによる冒険の始まり
  • Demo_WebDriverBiDi.BiDiによる冒険の始まり

起動ヘルパーメソッド ​

シートオブジェクト:ShSetting01_StartBrowser を利用して少ない引数で直ぐに開始できるヘルパーメソッドです。
下記4種類を用意しております。

関数戻り値用途
StartCDPModeContextCDPContextタブ操作からすぐ始めたい(推奨)
StartCDPModeCDPBrowserタブを自分で newTab / getTab したい
StartBiDiModeContextWebDriverBiDiContextBiDi でタブ操作から始める(推奨)
StartBiDiModeWebDriverBiDiModeBiDi でセッション/タブを細かく制御

いずれも省略可能な引数:

  • StartURL — 起動直後に開く URL
  • SwitchUser — 別プロファイル名で起動(マルチインスタンス)

BiDi のみ、追加で sessionCapabilitiesRequest といった初期設定引数を用意しています。必要に応じて事前に Dictionary を組み立て、引数に渡してください。

Pipe の代わりに WebSocket 経由でローカルブラウザを起動・接続したい場合は、ブラウザ起動設定シートの WebSocketモード セルを TRUE にしてください(既定は FALSE = Pipe)。

vb
' `WebSocketモード` セルが TRUE なら、StartCDPModeContext も WebSocket 経由で起動する
Dim t As CDPContext
Set t = ShSetting01_StartBrowser.StartCDPModeContext

詳細は WebSocket モードでできること を参照してください。

ヘルパーを使わずに、直接起動する場合 ​

起動時のオプションは、BrowserCapabilities という1つのオブジェクトに集約されています。各設定の既定値は、このワークシートから読み込まれます。シートの内容のままでよければ、たったこれだけで起動できます(ヘルパーも、内部ではこの形で起動しています)。

vb
Dim t As CDPContext
Set t = New CDPContext
t.OpenBrowserAndConnectTab BrowserCapabilities

初期 URL など、変えたい設定だけを Set_○○ で上書きします。

vb
BrowserCapabilities.Set_StartURL = "https://example.com"

Dim t As CDPContext
Set t = New CDPContext
t.OpenBrowserAndConnectTab BrowserCapabilities

BiDi の場合は、WebDriverBiDiContext.OpenBrowserAndConnectTab に同じオブジェクトを渡します。起動済みのブラウザへ再接続する場合は、ReattachOptions を使います(再接続)。

UserForm へのブラウザ埋め込み

「UserForm の中にブラウザ画面を表示したい」場合は、この4種類とは別に UserForm への WebView2 埋め込み を参照してください。v3.0.0 で、 WebView2 をネイティブに CDP 制御できるようになりました。

sessionCapabilitiesRequest とは ​

BiDi セッション確立コマンド session.new に渡す Parameters です。ブラウザ起動後・コマンド実行前に、「このセッションではどう振る舞うか」を Capabilities として宣言します(WebDriver の Desired Capabilities に相当)。

典型的な形は次のとおりです。

vb
Dim caps As New Dictionary
Dim alwaysMatch As New Dictionary

' 例: 未処理の alert / confirm / prompt を自動で閉じず、イベントで扱う
alwaysMatch.Add "unhandledPromptBehavior", "ignore"

caps.Add "capabilities", New Dictionary
caps("capabilities").Add "alwaysMatch", alwaysMatch

Set t = ShSetting01_StartBrowser.StartBiDiModeContext( _
    StartURL:="https://example.com", _
    sessionCapabilitiesRequest:=caps)
  • 省略時は { "capabilities": {} } 相当の既定値で session.new します
  • StartBiDiMode / StartBiDiModeContext の両方で使えます
  • 再接続(reattach)では ReattachOptions.Set_BiDiSessionCapabilitiesRequest で渡せますが、新規に BiDi-CDP Mapper が起動したときだけ 適用されます

詳細な Capabilities 一覧は W3C WebDriver BiDi — session.new を参照してください。

4. 終了時は必ず CloseBrowser ​

パイプ/マッパーを残さないよう、処理の最後でブラウザを閉じます。

vb
' CDP
t.ThisCDPBrowser.CloseBrowser

' BiDi
t.ThisWebDriverBiDiMode.CloseBrowser

5. Copilotにこのツールの流儀を教える(.Rules シート、v3.1.1〜) ​

Excel公式のAI機能「Copilot in Excel」には、ブックごとに振る舞いを指示できる.Rulesという特別なシートを作る仕組みがあります。このマクロブックにも.Rulesシートを同梱しており、シート内の所定のフォーマットに沿って書かれた指示を読み込みます。

これにより、Webスクレイピングに関する質問をCopilotに投げたとき、一般的な回答にありがちなSeleniumVBA寄りの提案ではなく、このブックに実装済みのCDP/BiDi制御機能を優先した回答を引き出しやすくなります。

.Rulesシートを読み込んだCopilotが、XPathからの入力操作をCDPContext/CDPElementベースのVBAコードで提案している様子

▲ 「このXPathで、VBAで書くには?」という質問に対し、CopilotがgetElementByXPath / onExist / sendKeysなど、本ツール実装済みのAPIを使ったコードをそのまま提案してくれている様子

IMPORTANT

Copilot in Excelの機能そのものがExcel専用のため、Accessは非対応です。

次へ ​

Excel VBA × CDP / WebDriver BiDi