page-as-data
Limits
- Chrome-family browsers only. It uses the Chrome DevTools Protocol.
- "Settled" is a good guess, not a promise. It waits for router requests,
React streams, skeletons (
aria-busy,[data-skeleton],.animate-pulse,.skeleton) and animations. A page that polls forever, or shows a permanently pulsing indicator, times out and says why. - Text on a background image gets no contrast number; it says it needs a screenshot instead of guessing.
- Shadow DOM and cross-origin iframes are not read yet.
- A background tab never finishes React 19 streaming, because Chrome does not run animation frames there. The CLI brings its tab to the front; if you inject the script yourself, keep the tab in front.