Site Isolation splits the page into processes
Chromium's Site Isolation puts cross-origin frames in separate renderer processes for security. A page at example.com embedding a widget from challenges.cloudflare.com is now two processes, two JavaScript contexts. Your pre-load hook was injected into the top frame's process; the widget's process never saw it. So when a Turnstile widget runs its canvas fingerprinting inside that frame, your instrumentation records nothing.
Attaching to every target
The CDP fix is to treat each frame as its own debuggee. With auto-attach enabled, the browser fires a Target.attachedToTarget event whenever a new target (including an OOPIF) appears. You handle that event, get a session for the child target, and re-run your injection into it -- so the hook follows the widget into its own process. Without this, OOPIF widgets are a permanent blind spot.
Why visibility is not the whole problem
Per-target attachment solves visibility but not the observer-effect problem. You can now observe inside the widget, but the hooks you install there are still JavaScript wrappers that fail a toString check, and the act of attaching to many targets is itself a signal in CDP detection. A widget specifically built to resist analysis assumes someone is attaching. The only way to observe it without leaving a JavaScript-visible trace that the widget can react to is to move the observation point into the engine for every frame at once.
