[BUG] Claude in Chrome (CDP) returns empty DOM for SPA+AJAX content (ASP.NET/AjaxPro) - get_page_text yields only page skeleton; read_network_requests can't capture pre-activation responses
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Scope: this occurs in Claude in Chrome (Cowork mode) driving Chrome via CDP — not the Claude Code CLI. Filing here as the public Anthropic issue tracker; if there is a dedicated Claude-in-Chrome/Cowork queue, please route rather than close.
get_page_text and DOM reads return only the page skeleton (nav, footer, UI buttons) for documents served by a Single Page Application with AJAX-injected content. The actual document text never appears in the DOM under CDP, even though the same URL renders correctly in the user's normal (human) Chrome with the same authenticated session.
Concrete site: Aranzadi Fusion (soluciones.aranzadilaley.es, Thomson Reuters legal database, authenticated firm account). Stack: ASP.NET + AjaxPro + Vue 2.6. This breaks the primary use case for a law firm — extracting text from legal databases — and generalizes to any SPA that injects its main content via an internal API (Westlaw, Tirant, vLex, La Ley; academic: Scopus, Web of Science, JSTOR SPA builds; any authenticated React/Angular/Vue business app).
Observed sequence:
- GET Documento.aspx?params=... -> HTML skeleton, status 200.
- 2. Page script issues POST /ajaxpro/...ashx (AjaxPro) -> status 200, confirmed in a network capture.
- 3. The POST response is supposed to be injected into #DocumentContent.
- 4. Under CDP the injection never happens: #DocumentContent.innerHTML stays at ~138 chars (<div id="pmDocDate"> only) after 15 s waits. Under human Chrome it fills with the full 5,000-50,000-char judgment.
Two secondary tool limitations compound it:
- read_network_requests only captures requests made AFTER its first invocation. The AjaxPro POST fires during initial page load, before the tool can be called, so its response body is unrecoverable. There is no way to enable network tracking before navigating.
- - javascript_tool "Cookie/query string data" filter is too aggressive. It blocks legitimate JS whenever the tab URL contains a query string (?params=...): reading the site's own JS, fetch() to parametrized URLs, even fn.toString() when the source embeds the current URL.
What Should Happen?
Content injected by the site after an AJAX/XHR call is present in the DOM read by CDP (as it is in human Chrome), OR a supported path exists to read the network response body that carried it.
Proposed Fixes (priority order):
- Launch Chrome for Cowork with --disable-blink-features=AutomationControlled (hides navigator.webdriver). Low cost, high impact; verify via https://bot.sannysoft.com/.
- 2. Expose CDP Network domain: get_network_response(tabId, urlPattern) via Network.getResponseBody, and/or activate_network_tracking pre-navigation.
- 3. Refine the javascript_tool filter to key on real profile cookie/token values, not on the presence of query strings.
Error Messages/Logs
Actual Behavior: The injected content never appears in the CDP-read DOM; the AJAX response body is not retrievable via read_network_requests; and JS introspection is blocked by the query-string filter — so there is no in-tool path to the document text. No error is surfaced by any tool; the failure is silent (empty content, not an exception).
Environment: Product: Claude in Chrome (Cowork), Claude Sonnet 4.6. OS: macOS. Site: soluciones.aranzadilaley.es (ASP.NET + AjaxPro + Vue 2.6), authenticated. Date: 10 July 2026. Impact: legal-database text extraction blocked; documented workaround (human export to PDF + pdftotext) costs ~5 min/document and defeats the automation value of Cowork.
Steps to Reproduce
- Authenticate to an SPA+AJAX site in normal Chrome (repro site: Aranzadi Fusion, requires account).
- 2. From Claude in Chrome, navigate to a document URL of the form .../Documento.aspx?params=...
- 3. get_page_text(tabId) -> skeleton only.
- 4. javascript_tool: document.getElementById('DocumentContent').innerHTML -> ~138 chars, empty.
- 5. Wait 15 s, repeat step 4 -> unchanged.
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
N/A - this bug occurs in Claude in Chrome (Cowork), not the Claude Code CLI; no CLI version is involved.
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_