playwright_get_visible_text
Extract visible text content from web pages for web scraping, content analysis, or accessibility testing using browser automation.
Instructions
Get the visible text content of the current page
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/browser/visiblePage.ts:12-66 (handler)Core handler logic for 'playwright_get_visible_text': Uses TreeWalker to extract visible text nodes from the page body, filters by CSS display/visibility, concatenates trimmed text, applies truncation, and returns the result.async execute(args: any, context: ToolContext): Promise<ToolResponse> { // Check if browser is available if (!context.browser || !context.browser.isConnected()) { // If browser is not connected, we need to reset the state to force recreation resetBrowserState(); return createErrorResponse( "Browser is not connected. The connection has been reset - please retry your navigation." ); } // Check if page is available and not closed if (!context.page || context.page.isClosed()) { return createErrorResponse( "Page is not available or has been closed. Please retry your navigation." ); } return this.safeExecute(context, async (page) => { try { const visibleText = await page!.evaluate(() => { const walker = document.createTreeWalker( document.body, NodeFilter.SHOW_TEXT, { acceptNode: (node) => { const style = window.getComputedStyle(node.parentElement!); return (style.display !== "none" && style.visibility !== "hidden") ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; }, } ); let text = ""; let node; while ((node = walker.nextNode())) { const trimmedText = node.textContent?.trim(); if (trimmedText) { text += trimmedText + "\n"; } } return text.trim(); }); // Truncate logic const maxLength = typeof args.maxLength === 'number' ? args.maxLength : 20000; let output = visibleText; let truncated = false; if (output.length > maxLength) { output = output.slice(0, maxLength) + '\n[Output truncated due to size limits]'; truncated = true; } return createSuccessResponse(`Visible text content:\n${output}`); } catch (error) { return createErrorResponse(`Failed to get visible text content: ${(error as Error).message}`); } }); }
- src/tools.ts:343-350 (schema)Tool schema definition including name, description, and empty input schema.name: "playwright_get_visible_text", description: "Get the visible text content of the current page", inputSchema: { type: "object", properties: {}, required: [], }, },
- src/toolHandler.ts:517-519 (registration)Dispatch registration in handleToolCall switch statement routing to visibleTextTool.execute.case "playwright_get_visible_text": return await visibleTextTool.execute(args, context);
- src/toolHandler.ts:332-332 (registration)Instantiation of VisibleTextTool instance used for handling the tool call.if (!visibleTextTool) visibleTextTool = new VisibleTextTool(server);
- src/tools.ts:465-465 (registration)Inclusion in BROWSER_TOOLS array for conditional browser launching."playwright_get_visible_text",