Skip to content

CDPContext ​

1 つのタブ(ページ)を表します。Playwright の Page に相当します。

vb
Dim t As CDPContext
Set t = ShSetting01_StartBrowser.StartCDPModeContext
t.navigate "https://example.com"
t.ThisCDPBrowser.CloseBrowser

親ブラウザは ThisCDPBrowser(CDPBrowser)です。日常利用では設定シート経由の StartCDPModeContext を推奨します。

起動・再接続・終了 ​

OpenBrowserAndConnectTab ​

ブラウザ起動と同時に、初回タブ接続まで自動で行います。

vb
Public Sub OpenBrowserAndConnectTab(caps As BrowserCapabilities)
引数意味
caps起動時のオプションをまとめた BrowserCapabilities

起動に必要な設定(ユーザーデータフォルダ名・ブラウザの種類・追加の起動引数・初期 URL・Pipe / Port の切り替えなど)は、すべて caps で渡します。既定値は設定シートから読み込まれるため、シートの内容のままでよければ次の2行で起動できます。

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

初期 URL などを変えたい場合は、事前に BrowserCapabilities.Set_○○ で上書きしてください。

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

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

日常利用では、設定シート経由の StartCDPModeContext で十分です(内部でこのメソッドを呼んでいます)。

起動スプラッシュ画面

Context 経由の起動は、常に「起動スプラッシュ画面」を経由してから実際の URL へ遷移します(--app 使用時のレースコンディション対策)。詳細は ページ遷移 の「起動時のレースコンディション対策」を参照してください。

reattach ​

Excel テーブルにある既存の接続情報を利用して、起動済みのブラウザのタブへ再接続します。通信経路(Pipe / Port / WebView2)は、ReattachOptions で指定します。

vb
Public Function reattach(reattachInfo As ReattachOptions, Optional reuseSession As Boolean) As Boolean
引数意味
reattachInfo再接続時のオプションをまとめた ReattachOptions。制御経路の指定が必須
reuseSessionTrue で Excel に記録中の SessionID を流用。False なら targetID を基に SessionID を更新し、古い SessionID を破棄して上書き

戻り値: 既存タブへの接続成功可否。CDPBrowser 側と異なり、失敗時は例外を投げず False を返します。

vb
Dim UserName As String
UserName = ShSetting01_StartBrowser.CurrentUserName

' Pipe 版
ReattachOptions.Set_PipeMode = UserName

Dim t As New CDPContext
If Not t.reattach(ReattachOptions) Then Exit Sub

' SessionID を引き継ぐ(KeepSession 済みの場合)
ReattachOptions.Set_PipeMode = UserName
If Not t.reattach(ReattachOptions, True) Then Exit Sub

' Port(WebSocket)版(Page 接続)
Dim ws As CDPCoreViaWebSocket
Set ws = New CDPCoreViaWebSocket
ws.AutoConnectPageCDP UserName
ReattachOptions.Set_WebSocketMode(ws) = UserName
If Not t.reattach(ReattachOptions) Then Exit Sub

注意

  • この処理は Excel テーブルに記録されている targetID への再接続までです。targetID 自体が既に閉じている場合は False になりますが、パイプが生きていれば親の newTab / getTab(setMain:=True)で手動復旧できます
  • 非同期イベント購読中(例: Network.webSocketFrameReceived)は reuseSession:=True を推奨します
  • ReattachOptions は使い切りです。reattach を呼ぶたびに、制御経路を指定し直してください

詳細は 再接続ガイド(SessionID 引き継ぎ含む)/ WebSocket モード を参照。

closeTab ​

vb
Public Sub closeTab()

このタブを閉じます。ブラウザ全体を終了する CDPBrowser.CloseBrowser とは別です。

注意

メインタブ(Excel テーブルに記録されたセッションタブ)は閉じられません。

ナビ・待機 ​

vb
Public Sub navigate(strURL As String, Optional referrerURL As String, Optional transitionType As PageTransitionType, _
    Optional referrerPolicy As PageReferrerPolicy, Optional frameID As String, Optional WaitMode As ReadyState = isComplete)

URL を開き、指定の ReadyState まで待ちます。内部では Page.navigate のあと WaitEvents を呼びます(WaitMode:=Nowait なら待ちません)。

引数意味
strURL遷移先 URL
referrerURLPage.navigate の referrer。参照元 URL を偽装したい場合に指定
transitionType遷移の種類(PageTransitionType)。既定は pt_default
referrerPolicyリファラーの送信ポリシー(PageReferrerPolicy)。既定は pr_default
frameID特定の iframe へ遷移したい場合の frameId
WaitMode待機する document.readyState。既定は isComplete(読み込み完了)。Nowait で待たずに戻る
vb
t.navigate "https://example.com"                              ' 完了まで待つ(既定)
t.navigate "https://example.com/heavy", WaitMode:=isInteractive   ' interactive で先に進む

' referrer を偽装しないとアクセスできないサイト向け(v3.2.0〜)
t.navigate "https://example.com/protected", referrerURL:="https://example.com/"

' 遷移を待たずに次の操作へ進む
t.navigate "https://example.com", WaitMode:=Nowait

v3.2.0での破壊的変更

第2引数の意味が till As ReadyState から referrerURL As String に変わりました。t.navigate url, isInteractive のように第2引数を位置引数で渡していたコードは動作が変わります。WaitMode:=isInteractive のように名前付き引数へ書き換えてください。また「すでに同じ URL にいる場合はスキップする」という以前の挙動は廃止され、常に Page.navigate を実行するようになりました。

Wait ​

vb
Public Sub Wait(Optional till As ReadyState = isComplete)

現在ページが指定の ReadyState になるまで、document.readyState をポーリングして待ちます。navigate 後だけでなく、クリック後の再読み込み待ちなどにも使えます。新しいタブ(getTab / newTab で取得)など、いつ遷移が起きたか把握できない場面ではこちらが安全です。

引数意味
till待機する document.readyState。既定は isComplete
vb
t.Wait                    ' 完了待ち(既定)
t.Wait isInteractive       ' interactive で十分なら短縮できる

TIP

till:=isInteractive のとき、すでに complete まで進んでいればそのまま成功扱いで抜けます(interactive を取りこぼしても止まらない)。

v3.2.0での変更

dbgState As Boolean 引数が廃止されました。デバッグ出力が必要な場合は、外部デバッグログビュアー対応(LoggerのexportDbgMsg、DebugView等で確認可能)をご利用ください。

WaitEvents(v3.2.0〜) ​

vb
Public Function WaitEvents(Optional WaitMode As ReadyState = isComplete, Optional WaitError As Boolean = True) As Boolean

Wait のポーリング版に対し、こちらは CDP イベント(Page.frameStartedLoading / Page.domContentEventFired / Page.loadEventFired)を受動的に待つ版です。navigate が内部で使っているのはこちらです。

引数意味
WaitMode待機する ReadyState。既定は isComplete
WaitErrorタイムアウト時に例外を出すか。既定は True

戻り値: 指定状態まで到達できたか。

vb
t.ResetWaitState        ' 遷移を起こす操作の直前に必ず呼ぶ
t.getElementByQuery("a.next").click
t.WaitEvents WaitMode:=isComplete

注意:ResetWaitState を先に呼ぶこと

WaitEvents は「状態が変化したこと」をイベントで検知する仕組みのため、遷移を引き起こす操作より前に ResetWaitState で状態をリセットしておく必要があります。リセットせずに呼ぶと、前回までに到達済みの状態がそのまま返ってしまうことがあります。getTab / newTab で取得した直後など「いつ遷移したか分からない」タブでは、代わりに Wait(ポーリング版)を使ってください。

ResetWaitState(v3.2.0〜) ​

vb
Public Sub ResetWaitState()

WaitEvents 用の内部状態(到達済み ReadyState)をリセットします。クリックなど、navigate を経由しない遷移トリガーの直前に呼んでください。

PageReadyState(v3.2.0〜) ​

vb
Public Function PageReadyState(Optional refresh As Boolean) As ReadyState

現在追跡中の ReadyState を返します。refresh:=True の場合、document.readyState を JS 側から読み直してから返します。

ReadyState ​

document.readyState に対応する列挙です。navigate / Wait / WaitEvents / 一部の要素操作で使います。

値ブラウザ側意味
Nowait(v3.2.0〜)―遷移を待たない(navigate の WaitMode に指定すると Page.navigate を投げっぱなしで戻る)
isLoading"loading"読み込み中
isInteractive"interactive"DOM は操作可能だが、画像などの読み込みは未完了のことがある
isComplete"complete"ドキュメント読み込み完了(既定)。要素が完了後にしか出ないページ向け

v3.2.0での変更

Nowait が先頭に追加されたことで、各値の内部的な序数(isLoading=1, isInteractive=2, isComplete=3 に変更)がずれています。名前で参照している限り(isComplete 等)は影響ありませんが、ReadyState の値を数値としてそのまま保存・比較しているコードがあれば見直してください。

詳細は ページ遷移。

PageTransitionType(v3.2.0〜) ​

navigate の transitionType に渡す、Page.navigate の遷移種別です。

値CDP文字列意味
pt_default―既定(Chrome標準におまかせ)
pt_linklink通常のリンク(<a>)クリック
pt_typedtypedアドレスバーへの直接入力
pt_address_baraddress_barアドレスバーのサジェスト/履歴選択
pt_auto_bookmarkauto_bookmarkブックマークからの遷移
pt_form_submitform_submit<form> 送信
pt_reloadreload再読み込み
pt_auto_subframeauto_subframeiframe の自動読み込み
pt_manual_subframemanual_subframeiframe 内リンクの手動クリック
pt_generatedgeneratedアドレスバー検索による生成結果ページ
pt_keywordkeywordカスタム検索キーワード経由
pt_keyword_generatedkeyword_generatedカスタムキーワードエンジンが生成したURL
pt_auto_toplevelauto_toplevel<meta http-equiv="refresh"> 等の自動リダイレクト
pt_otherother上記に該当しないその他

PageReferrerPolicy(v3.2.0〜) ​

navigate の referrerPolicy に渡す、リファラー送信ポリシーです。

値CDP文字列意味
pr_default―既定(strictOriginWhenCrossOrigin 相当)
pr_noReferrernoReferrer完全匿名。リファラーを一切送らない
pr_originoriginドメイン名のみ送信(パスは隠す)
pr_sameOriginsameOrigin同一サイトのみ全開示、外部へは匿名
pr_strictOriginstrictOriginドメイン名のみ。HTTPSからHTTPへの降格時は匿名
pr_strictOriginWhenCrossOriginstrictOriginWhenCrossOrigin現代のWeb標準。自サイトは全開示、外部はドメインのみ、降格時は匿名
pr_originWhenCrossOriginoriginWhenCrossOrigin自サイト全開示、外部はドメインのみ(降格時も送信)
pr_noReferrerWhenDowngradenoReferrerWhenDowngradeレガシー標準。降格時のみ匿名、それ以外は全開示
pr_unsafeUrlunsafeUrl常にURL全文を送信(非推奨)

ウィンドウ制御 ​

ウィンドウ制御は、使う手段によって2系統に分かれています。

系統メソッド手段向いている用途
CDPshowBrowser.setWindowBounds表示状態(通常/最小化/最大化/フルスクリーン)の変更、位置・サイズの変更
hWndshowWindowMode / hide / bringToForegroundWinAPI(ShowWindow 等)非表示化、アクティブ化を伴わない表示、最前面化など、ShowWindow の細かい指定

hWnd 系は「プロセスID」が必要です

hWnd 系のメソッドは、起動時にワークシートへ記録されたプロセスIDを手がかりにウィンドウを特定します。次のように、プロセスIDが記録されていない場合は利用できません。CDP 系の show は、どの経路でも使えます。

  • 起動済みブラウザへ接続して制御している場合
  • WebSocket 経由で、別端末のブラウザを制御している場合

show ​

vb
Public Sub show(Optional state As BrowserWindowState, Optional x, Optional y, Optional w, Optional h)

CDP の Browser.setWindowBounds で、ウィンドウの表示状態と、位置・サイズを変更します。いずれの引数も省略でき、指定した項目だけが反映されます。

引数意味
state表示状態(BrowserWindowState)。省略時は今の表示状態のまま
x / yウィンドウ左上の座標
w / h左上を基準にした幅と高さ

x / y / w / h は Variant で受け取り、数値に変換して反映します。省略した項目は、現在の位置・サイズのままです。

vb
t.show br_maximized                  ' 最大化
t.show br_fullscreen                 ' フルスクリーン
t.show br_normal, 100, 50, 1200, 800 ' 通常表示に戻したうえで、左上とサイズを指定
t.show , 100, 200                    ' 位置だけ変更(幅・高さは据え置き)
t.show , , , 1000, 700               ' サイズだけ変更

注意

  • state が最小化・最大化・フルスクリーンのときは、x / y / w / h は同時に指定できません(CDP の仕様)。位置やサイズを指定する場合は、br_normal を指定するか、state を省略してください
  • 結果を待たずに実行されます(Browser.setWindowBounds を非同期で送信)

showWindowMode ​

vb
Public Sub showWindowMode(Optional state As WinState = doShow)

WinAPI の ShowWindow で、ウィンドウの表示状態を変更します。表示状態は WinState(ShowWindow 準拠)で指定します。省略時は doShow(現在のサイズと位置のまま表示し、アクティブ化)です。

vb
t.showWindowMode                       ' 隠していたウィンドウを表示する
t.showWindowMode doShowNoActivate      ' アクティブ化せずに表示する

プロセスIDが記録されていない場合は利用できません。

hide ​

vb
Public Sub hide()

ウィンドウを非表示にします(ShowWindow の asHidden 相当)。showWindowMode で再度表示できます。プロセスIDが記録されていない場合は利用できません。

vb
t.hide
' ... 裏で処理 ...
t.showWindowMode

activate ​

vb
Public Sub activate()

ブラウザ内のタブにフォーカスを移します(CDP の Target.activateTarget)。ウィンドウ全体を前面に出すわけではない点で、showWindowMode / bringToForeground とは役割が違います。

vb
Dim tab2 As CDPContext
Set tab2 = t.ThisCDPBrowser.getTab(Url:="example.com")
tab2.activate   ' そのタブを前面タブにする

bringToForeground ​

vb
Public Function bringToForeground()

ブラウザウィンドウを最前面にします(BringWindowToTop → SetForegroundWindow)。OS のフォーカス制限により、常に最前面になるとは限りません。最小化や非表示のウィンドウを戻したい場合は、先に showWindowMode を呼んでください。プロセスIDが記録されていない場合は利用できません。

vb
t.bringToForeground

BrowserWindowHandle / BrowserWindowID ​

vb
Property Get BrowserWindowHandle(Optional alwaysRequest As Boolean) As LongPtr
Property Get BrowserWindowID(Optional alwaysRequest As Boolean) As Long

ウィンドウ操作の土台になる ID です。show は BrowserWindowID を、showWindowMode / hide / bringToForeground は BrowserWindowHandle を内部で使います。自前で WinAPI や CDP のウィンドウ調整をするときにも参照できます。

プロパティ意味主な用途
BrowserWindowHandleOS のウィンドウハンドル(HWND)ShowWindow など WinAPI
BrowserWindowIDCDP の windowId(Browser.getWindowForTarget)Browser.setWindowBounds など CDP

どちらも alwaysRequest:=False(既定)ならキャッシュがあれば流用し、無い場合は取り直します。BrowserWindowHandle は、キャッシュ済みのハンドルが既に無効(ウィンドウが閉じられた等)になっていた場合も、自動で取り直します。alwaysRequest:=True なら毎回取り直します。

BrowserWindowHandle の特定方法

プロセスIDとChromium向けのウィンドウクラスで絞り込んだうえで、document.title を一時的にタブの TargetID へ書き換えて、ウィンドウタイトルが一致するものをユニークに特定します(特定後は元のタイトルに戻します)。この都合上、次の点に注意してください。

  • 取得の瞬間にページ側が document.title を書き換えると、特定に失敗することがあります。ページが落ち着いている状態で取得してください
  • 基本的には about:blank の状態から取ることをお勧めします
  • タブのドッキング/分離などでウィンドウが変わった場合は、alwaysRequest:=True で取り直してください
  • プロセスIDが記録されていない場合は、特定できません
vb
Dim hwnd As LongPtr
hwnd = t.BrowserWindowHandle

Dim wid As Long
wid = t.BrowserWindowID

BrowserWindowState ​

CDP 系 show の第 1 引数に渡す列挙です(CDP の Browser.WindowState)。

値意味
br_unspecified今の表示状態のまま(既定)
br_normal通常表示。最小化/最大化から元のサイズへ戻す
br_minimized最小化
br_maximized最大化
br_fullscreenフルスクリーン表示(hWnd 系ではできない、CDP 系だけの設定です)

WinState ​

hWnd 系 showWindowMode の引数に渡す列挙です。ShowWindow の nCmdShow に準拠しています。よく使うのは次のとおりです。

値意味
doShow現在のサイズと位置のまま表示し、アクティブ化(showWindowMode の既定)
asNormal通常表示し、アクティブ化。最小化/最大化なら元のサイズへ
asMinimized最小化してアクティブ化
asMaximized最大化してアクティブ化
doShowNoActivate表示するがアクティブ化しない
doShowMinNoActivate最小化表示するがアクティブ化しない
asHidden非表示(通常は hide を使う)

その他(doRestore / doForceMin など)も Enum に定義されています。起動時の初期表示モード設定でも同じ列挙を使います(はじめに)。

JavaScript・通知 ​

jsEval ​

vb
Public Function jsEval(JavaScriptStr As String, Optional objectId As String, _
    Optional objectArguments As Variant, Optional IFEXCEPTION As Variant, ...) As Variant

ページ上で JavaScript を評価します。例外時は IsError(result) で判定し、詳細は LastJavaScriptException を参照してください。代替値で済ませたい場合は IFEXCEPTION を使います。

objectArguments は Collection / Array(...) / 固定長の Dictionary 型 1 次元配列(Dim args(0) As Dictionary)のいずれでも渡せます。固定長配列の方がパフォーマンスが良いため、ループ内などで多用する場合は固定長配列を推奨します。

詳細は JavaScript 実行。

TIP

objectId / contextId のいずれも省略したとき(このタブの既定コンテキストで実行するケース)、内部で保持する executionContextId がページ遷移等で無効化されていた場合は、有効な ID が届くまで自動で待機してから実行します。

LastJavaScriptException ​

vb
Property Get LastJavaScriptException() As BiDiCDPJson

同期の jsEval で起きた、最後の JavaScript 例外(CDP の exceptionDetails)です。Err.LastDllError と同様、成功しても消えません。

vb
Dim result As Variant
result = t.jsEval("notDefined.x")

If IsError(result) Then
    Debug.Print t.LastJavaScriptException.Stringify
    ' 必要なら .StringKey / .NodeKey で個別フィールドも参照可
End If

' 詳細を見なくてよいなら代替値で済ませる
result = t.jsEval("notDefined.x", IFEXCEPTION:="fallback")

注意

  • 対象は 例外のみです。try { ... } catch (e) { return e } のように JS 側で捕まえて返した値は対象外です
  • 非同期(RunAsyncCDP:=True)で後から取り出した結果とは連動しません
  • JS は成功したが戻り値がエラー値の場合は IsError で対処してください(IFEXCEPTION / 本プロパティは「例外」時のみ)

jsAddLib / jsAddScript ​

vb
Public Sub jsAddLib(strURL As String)
Public Sub jsAddScript(FolderPath As String, ScriptName As String)

外部/ローカルスクリプトの注入です。jsAddScript はフォルダパスとファイル名を分けて渡します。

vb
t.jsAddLib "https://cdn.example.com/lib.js"
t.jsAddScript "C:\scripts", "helper.js"

notify ​

vb
Public Sub notify(msg As String, Optional ViewSecond As Long = 10)

ページ上に一時メッセージ。

handleDialog ​

vb
Public Sub handleDialog(Accept As Boolean, Optional promptText As String)

alert / confirm / prompt への応答。

要素 ​

メソッド説明
getElementByIDid
getElementByQuery / getElementsByQueryCSS
getElementByXPath / getElementsByXPathXPath

戻り値は CDPElement。詳細は 要素の取得。

iframe ​

ページに埋め込まれた iframe へ入るための一連の API です。流れは 一覧 → executionContextId 取得 → CDPElement 化 です。

同一オリジンの <iframe> 要素から直接入りたい場合は、要素側の CDPElement.getIFrame もあります。

printChildFrames ​

vb
Public Sub printChildFrames()

現時点で開いている 直下の子 iframe 情報をログに出します(Page.getFrameTree)。名前・URL・frameID などを確認するときに使います。

vb
t.printChildFrames
' Immediate ウィンドウに title / url / frameID などが並ぶ

注意

検索範囲は 親の直下の子 iframe までです。子 iframe の中の iframe… といった多重ネスト表示には対応していません。

getIFrameContextID ​

vb
Public Function getIFrameContextID( _
    Optional iframeName As String, _
    Optional Url As String, _
    Optional doRetrySecond As Double _
) As Long

埋め込み iframe の executionContextId を返します。jsEval の contextId に渡せます。見つからない場合は 0 です。

引数意味
iframeNameiframe 名(第一優先。<iframe name="…">。完全一致 → 部分一致)
UrlURL(第二優先。先頭一致 → 部分一致)
doRetrySecond指定秒以内に見つかるまでリトライ。0(既定)なら 1 回のみ
vb
' 名前で探す
Dim ctxId As Long
ctxId = t.getIFrameContextID(iframeName:="app-frame")

' URL 部分一致 + 最大 5 秒リトライ
ctxId = t.getIFrameContextID(Url:="https://example.com/embed", doRetrySecond:=5)

' 両方省略 → 最初の iframe
ctxId = t.getIFrameContextID()

' jsEval で直接使う
Debug.Print t.jsEval("document.title", contextId:=ctxId)

注意

  • iframeName と Url を両方省略すると、最初の iframe の executionContextId を返します
  • CDPElement として扱いたい場合は getIFrame に渡してください
  • 検索範囲は 親の直下の子 iframe までです。多重ネストは非対応です。その場合は自力で ExecuteCDP("Page.getFrameTree").NodeKey("frameTree") から目的の frame を取り出してください

getIFrame ​

vb
Public Function getIFrame(ExecutionContextId As Long) As CDPElement

getIFrameContextID で得た executionContextId を、CDPElement として扱えるようにします(その context 上の document)。

引数意味
ExecutionContextIdgetIFrameContextID が返した executionContextId
vb
Dim ctxId As Long
ctxId = t.getIFrameContextID(iframeName:="app-frame")

Dim frame As CDPElement
Set frame = t.getIFrame(ctxId)
frame.getElementByQuery("button").click

スクリーンショット ​

snapPage ​

vb
Public Sub snapPage(FolderPath As String, FileName As String, Optional getFullPage As Boolean = False)

現在のタブを PNG として保存します。内部では CDP の Page.captureScreenshot を使います(外部 JS ライブラリは不要です)。

引数意味
FolderPath保存先フォルダ(例: Environ("UserProfile") & "\Downloads")
FileNameファイル名(拡張子込み。例: "shot.png")
getFullPageFalse(既定)で現在のビューポートのみ。True でページ全体(縦スクロール範囲を含む)
vb
Dim t As CDPContext
Set t = ShSetting01_StartBrowser.StartCDPModeContext
t.navigate "https://example.com"

' ビューポートのみ
t.snapPage Environ("UserProfile") & "\Downloads", "viewport.png"

' フルページ
t.snapPage Environ("UserProfile") & "\Downloads", "full.png", True

t.ThisCDPBrowser.CloseBrowser

注意

  • レイアウト情報(Page.getLayoutMetrics)が取れない画面では警告を出して終了します

デモ: Demo_CDP.getSnapShot

プロトコル・イベント ​

ExecuteCDP / ExecuteCDPAsync ​

ページ/セッション向け CDP。結果を待つか(ExecuteCDP)、待たずに後で確認するか(ExecuteCDPAsync)の 2 種類があります。

ExecuteCDPAsync はコマンド実行時の id(Long)のみを返し、結果は待ちません。結果の回収は TakeResultCDP で行います。

詳細は 低レイヤー BiDi / CDP コマンドについて で説明します。

TakeResultCDP ​

vb
Property Get TakeResultCDP(commandID As Long) As String

ExecuteCDPAsync が返した id をキーに、蓄積された実行結果(JSON 文字列)を取り出します。取り出し前に TakeEvents が必要です。取り出し後は Dictionary から削除され、結果がまだ無い場合は空文字を返します。

TIP

コマンド回数が20億を超えると、オーバーフロー対策により蓄積中の結果履歴が すべて削除されます。未回収の ExecuteCDPAsync 結果も消える点に注意してください。

LastCDPJsonError ​

vb
Property Get LastCDPJsonError() As Dictionary

ExecuteCDP 経由で記録された、最後の CDP コマンドエラーです。Err.LastDllError と同様、成功しても消えません。

StopCDPError:=False で例外停止を抑えたとき、戻り値が Nothing なら本プロパティで詳細を確認します。キーは主に "code" / "message" です。

vb
Dim result As BiDiCDPJson
Set result = t.ExecuteCDP("Page.navigate", params, False)

If result Is Nothing Then
    Debug.Print t.LastCDPJsonError("message")
    ' 必要なら t.LastCDPJsonError.RemoveAll でクリア可
End If

注意

ExecuteError を通らない経路では更新されません。目印は「ExecuteCDP の戻り値が Nothing」です。

BrowserEvents / SetFilterEvents ​

vb
Property Get BrowserEvents() As Dictionary
Property Set BrowserEvents(ObjDic As Dictionary)

Property Let SetFilterEvents(Optional DelMode As Boolean, EventName As String)

標準モジュール上で CDP の非同期イベントを受け取るための蓄積口です。

メンバー役割
BrowserEventsNew Dictionary を渡すと記録開始、Nothing で停止。退避した Dictionary を戻せば再開も可
SetFilterEvents蓄積するイベント名(例: "Network.requestWillBeSent")を絞る。未設定時は広くキャプチャ

記録開始後は、対象ドメインを ExecuteCDP で enable してから操作します。

vb
t.SetFilterEvents = "Network.requestWillBeSent"
Set t.BrowserEvents = New Dictionary
t.ExecuteCDP "Network.enable"
' ... 操作後、t.BrowserEvents を参照 ...
Set t.BrowserEvents = Nothing

手順・セーブ/再開・WithEvents との使い分けは イベント購読 を参照してください。

pageEnable / runtimeEnable(v3.2.0で内部専用化) ​

Page.enable / Runtime.enable を切り替える内部メソッドです。以前は Public でしたが、v3.2.0でこの2つのドメインが接続時に常時有効化・必須化されたため Private になりました。ユーザー側から呼ぶ必要(呼ぶ手段)はもうありません。

v3.2.0での変更

以前は Demo_CDP.TestAlert 等でユーザーコードから .ExecuteCDP "Page.enable" を明示的に呼ぶ例がありましたが、v3.2.0以降は接続時に自動で有効化されるため不要になりました(呼んでもエラーにはなりませんが、無意味です)。

openDevTools ​

このタブの DevToolsを開きます。

WARNING

このツールで呼び出したWebView2以外/Electron製の場合は、うまくいかない場合があります

タイムアウト ​

TimeOutSecond ​

vb
Property Let TimeOutSecond(TimeSec As Double)

タブ単位の CDP コマンド結果待ちや、起動直後の遷移完了判定などの待機上限です。デフォルトは 30 秒です。LET 専用(書き込みのみ)で、設定中の値は読み返せません。

vb
t.TimeOutSecond = 60

自前ループ用の経過ミリ秒は親の CDPBrowser.TimerCounter を使います。詳細は タイムアウト設定方法について。

タブ情報 ​

Url ​

vb
Property Get Url() As String
Property Let Url(newURL As String)

現在タブの URL です。代入すると内部で navigate を呼びます。

vb
Debug.Print t.Url
t.Url = "https://example.com"   ' t.navigate "https://example.com" と同じ

Title ​

vb
Property Get Title() As String
Property Let Title(newName As String)

タブのタイトル(document.title 相当)です。jsEval("document.title") で取得します。代入するとタイトルを書き換えます。

vb
Debug.Print t.Title
t.Title = "作業用タブ"

html ​

vb
Property Get html() As String

ページ全体の HTML 文字列です。内部では jsEval("document.documentElement.innerHTML") を実行します(Get 専用)。

vb
Debug.Print Left$(t.html, 200)   ' 先頭だけ確認する例

巨大なページでは文字列が長くなる点に注意してください。部分だけ欲しい場合は jsEval でセレクタ付きに取る方が軽くて済みます。

CurrentSessionID / CurrentTargetID / CurrentBrowserContextId ​

vb
Property Get CurrentSessionID() As String
Property Get CurrentTargetID() As String
Property Get CurrentBrowserContextId() As String

このタブ接続を識別する ID です。

プロパティ意味
CurrentSessionIDCDP セッション ID。コマンド送信先のセッションを表す
CurrentTargetIDターゲット ID。「どのタブか」を特定するための専用 ID
CurrentBrowserContextId「どの Profile(ブラウザコンテキスト)に属しているか」を特定するための専用 ID
vb
Debug.Print t.CurrentSessionID
Debug.Print t.CurrentTargetID
Debug.Print t.CurrentBrowserContextId

再接続 (reattach) やメインタブ記録で Excel テーブルに残る値と対応します。日常のページ操作では意識不要です。

CurrentBrowserContextId は、Target.createBrowserContext で作成した独立プロファイル(シークレット相当)を複数並行運用するときに使います。

タブ生存について ​

CDP のターゲット/セッションイベントを受けたあと、このタブがまだ使えるかを確認するフラグです。いずれも Get 専用で、該当イベントを受け取ると True になります。

vb
Property Get isTargetDisconnected() As Boolean
Property Get isTargetCrashed() As Boolean
Property Get isTargetClosed() As Boolean
プロパティ対応イベント意味
isTargetDisconnectedTarget.detachedFromTargetこのタブの セッションが切れた。targetId 自体は残っていることがある。セッションの更新(再接続など)が必要
isTargetCrashedTarget.targetCrashedタブがクラッシュした。Page.reload で復帰できる場合がある
isTargetClosedTarget.targetDestroyedタブが閉じられた。この CDPContext はもう使えないので破棄する
vb
If t.isTargetClosed Then
    ' オブジェクトを捨てて、必要なら getTab / newTab で取り直す
ElseIf t.isTargetDisconnected Then
    ' reattach などでセッションを更新
ElseIf t.isTargetCrashed Then
    t.ExecuteCDP "Page.reload"   ' 復帰を試す例
End If

関連: 再接続 (reattach)

親ブラウザ ​

ThisCDPBrowser ​

vb
Property Get ThisCDPBrowser() As CDPBrowser

CDPContext 上で、ブラウザ単位の制御もしたいときに使います。親の CDPBrowser への参照です。

タブ操作(navigate など)は Context 側、プロセス/タブ一覧/ブラウザ向け CDP(CloseBrowser / newTab / ExecuteCDP など)はこちら経由、という使い分けになります。

vb
' 別タブを開く
t.ThisCDPBrowser.newTab "https://example.com"

' ブラウザ向け CDP(拡張機能の読み込みなど)
t.ThisCDPBrowser.ExecuteCDP "Extensions.loadUnpacked", params

' ブラウザ終了
t.ThisCDPBrowser.CloseBrowser

ExEventCore ​

vb
Property Get ExEventCore() As CDPCore

自作の拡張クラスで、CDP の非同期イベント(RaiseEvent)を WithEvents で受け取るときに使う、上級者向けの通信コア(CDPCore)への参照です。自作の拡張クラス以外では使いません。受け取り方の使い分けは イベント購読 を参照してください。

デバッグ ​

printParams / getSessionInfo / printMsg

関連 ​

Excel VBA × CDP / WebDriver BiDi