イベント購読
ネットワークやログなどの非同期イベントを VBA 側で受け取ります。デモは Demo_CDP.ネットワークイベントの確認 / Demo_WebDriverBiDi.ネットワークイベントの確認 が正本です。
2 つの受け取り方
一般的には、拡張用テンプレート のように別途 Class オブジェクトを作り、WithEvents を定義して対象コンテキスト Class を渡し、非同期イベントごとの処理を書いて…といった儀式が必要です。
一方、.BrowserEvents(BiDi なら .BiDiEvents)を使う場合は、標準モジュール(.bas)上で直接イベント処理を行えます。
Demo には Page.javascriptDialogOpening を .bas 上で処理する例があるので、それを参考に実装してみるとよいでしょう(Demo_CDP.TestAlert など)。
TIP
試作や短いデモでは BrowserEvents が手軽です。長期運用では、先の Class + WithEvents でイベント処理を行うのがベストです。
CDP(BrowserEvents)
BrowserEventsにNew Dictionaryを渡して記録開始- 必要なら
SetFilterEventsでイベント名を絞る - ドメインを
ExecuteCDPで enable - 操作後、Dictionary を読む(必要ならファイルへ保存)
vb
Dim t As CDPContext
Set t = ShSetting01_StartBrowser.StartCDPModeContext
t.SetFilterEvents = "Network.requestWillBeSent"
t.SetFilterEvents = "Network.loadingFinished"
Set t.BrowserEvents = New Dictionary
t.ExecuteCDP "Network.enable"
t.navigate "https://example.com"
' t.BrowserEvents に蓄積
' 記録を止める: Set t.BrowserEvents = Nothing
' セーブデータを戻して再開も可能
t.InheritanceCDPBrowser.quitフィルタ未設定時はキャプチャ対象が広くなります。本番では必要なイベントだけに絞ってください。
BiDi(BiDiEvents)
BiDiEventsにNew DictionarysessionSubscribeにイベント名のCollectionを渡す- 操作後
TakeEventsで受信キューを吸い上げる
vb
Dim t As WebDriverBiDiContext
Set t = ShSetting01_StartBrowser.StartBiDiModeContext
Set t.InheritanceWebDriverBiDiMode.BiDiEvents = New Dictionary
Dim events As New Collection
events.Add "network.beforeRequestSent"
events.Add "network.responseCompleted"
events.Add "log.entryAdded"
Set t.InheritanceWebDriverBiDiMode.sessionSubscribe = events
t.navigate "https://example.com"
t.InheritanceWebDriverBiDiMode.TakeEvents
' t.InheritanceWebDriverBiDiMode.BiDiEvents を参照
t.InheritanceWebDriverBiDiMode.quitセーブ/再開
両デモとも、蓄積 Dictionary を別変数に退避 → Nothing で停止 → 再代入で再開、というパターンを示しています。長時間ジョブで「区間だけ聞きたい」ときに便利です。

