Mintplex-Labs/anything-llm · error · Error
No browser pages open.
Error message
No browser pages open.
What it means
Thrown by cdp-eval.js after Target.getTargets returns zero pages (all targets are chrome://, devtools://, or non-page types). The browser is up and CDP works, but there is no evaluatable page to inject the expression into.
Source
Thrown at open-computer/services/interface-service/utils/cdp-eval.js:85
async function main() {
const versionRaw = await httpGet("http://127.0.0.1:9222/json/version");
const version = JSON.parse(versionRaw);
const browserWsUrl = version.webSocketDebuggerUrl;
if (!browserWsUrl) throw new Error("No webSocketDebuggerUrl — is Chromium running?");
const ws = await new Promise((resolve, reject) => {
const socket = new WebSocket(browserWsUrl);
const t = setTimeout(() => reject(new Error("WS connect timeout")), 5000);
socket.on("open", () => { clearTimeout(t); resolve(socket); });
socket.on("error", (err) => { clearTimeout(t); reject(err); });
});
try {
const { targetInfos } = await cdpSend(ws, "Target.getTargets");
const pages = targetInfos.filter(
(t) => t.type === "page" && !t.url.startsWith("chrome://") && !t.url.startsWith("devtools://")
);
if (pages.length === 0) throw new Error("No browser pages open.");
let target = pages[pages.length - 1];
if (targetUrl) {
const match = pages.find(
(p) => p.url.includes(targetUrl) || p.title.toLowerCase().includes(targetUrl.toLowerCase())
);
if (!match) {
const openTabs = pages.map((p) => `- ${p.title} ${p.url}`).join("\n");
throw new Error(`No browser tab matching "${targetUrl}". Open tabs:\n${openTabs}`);
}
if (match) target = match;
}
const { sessionId } = await cdpSend(ws, "Target.attachToTarget", {
targetId: target.targetId,
flatten: true,
});
View on GitHub (pinned to 526360e320)
Solutions
- Open at least one http/https/content page in Chromium before invoking cdp-eval.
- Launch Chromium with `--app=http://localhost` or similar so a content page exists.
- For headless mode, pass a startup URL so a page target is created.
Example fix
# before — no content page chromium-browser --remote-debugging-port=9222 # after — startup URL creates a page target chromium-browser --remote-debugging-port=9222 about:blank
Defensive patterns
Strategy: validation
Validate before calling
// Confirm at least one content page exists before evaluating.
async function hasOpenPage() {
const tabs = JSON.parse(await httpGet('http://127.0.0.1:9222/json'));
return Array.isArray(tabs) && tabs.some(t => t.type === 'page' && !t.url.startsWith('chrome://'));
} Try / catch
if (!await hasOpenPage()) {
console.error('Open at least one content page in Chromium.');
process.exit(2);
} Prevention
- Launch Chromium with a startup URL (about:blank or the app URL) so a page target exists.
- Avoid closing every tab before invoking cdp-eval.
- In headless mode, pass --app=<url> to create an initial page.
When it happens
Trigger: Chromium was launched with no startup URL and only shows the new-tab page filtered out, all tabs were closed leaving only devtools windows, or the browser is headless with no about:blank page.
Common situations: Headless Chrome started without a URL arg; user closed every tab manually; only chrome://settings and devtools windows remain; the launcher opened DevTools-for-DevTools but no content page.
Related errors
- No webSocketDebuggerUrl — is Chromium running?
- No browser tab matching "${targetUrl}". Open tabs: ${openTab
- No webSocketDebuggerUrl — is Chromium running?
- No browser pages open.
- No browser tab matching "${targetUrl}". Open tabs: ${openTab
AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13).
Data as JSON: /api/errors/d4ea5693ba14dea9.
Report an issue: GitHub.