render.execute_js
Execute JavaScript code on webpages to analyze client-side behavior, test for vulnerabilities, and automate security assessments during bug bounty hunting.
Instructions
Execute JavaScript in the context of a webpage
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to load | |
| script | Yes | JavaScript code to execute |
Implementation Reference
- src/tools/render.ts:209-234 (handler)The handler function for 'render.execute_js'. It creates a new browser page, navigates to the given URL, executes the provided JavaScript using page.evaluate with eval, and returns the result or error.async ({ url, script }: any): Promise<ToolResult> => { let page: Page | null = null; try { const browserInstance = await getBrowser(); page = await browserInstance.newPage(); await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 }); const result = await page.evaluate((scriptToRun) => { try { return eval(scriptToRun); } catch (e) { return { error: e instanceof Error ? e.message : String(e) }; } }, script); await page.close(); return formatToolResult(true, { url, result, }); } catch (error: any) { if (page) await page.close().catch(() => {}); return formatToolResult(false, null, error.message); }
- src/tools/render.ts:200-207 (schema)Input schema defining the parameters 'url' and 'script' for the 'render.execute_js' tool.inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'URL to load' }, script: { type: 'string', description: 'JavaScript code to execute' }, }, required: ['url', 'script'], },
- src/tools/render.ts:196-236 (registration)Registration of the 'render.execute_js' tool using server.tool() within the registerRenderTools function.server.tool( 'render.execute_js', { description: 'Execute JavaScript in the context of a webpage', inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'URL to load' }, script: { type: 'string', description: 'JavaScript code to execute' }, }, required: ['url', 'script'], }, }, async ({ url, script }: any): Promise<ToolResult> => { let page: Page | null = null; try { const browserInstance = await getBrowser(); page = await browserInstance.newPage(); await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 }); const result = await page.evaluate((scriptToRun) => { try { return eval(scriptToRun); } catch (e) { return { error: e instanceof Error ? e.message : String(e) }; } }, script); await page.close(); return formatToolResult(true, { url, result, }); } catch (error: any) { if (page) await page.close().catch(() => {}); return formatToolResult(false, null, error.message); } } );
- src/index.ts:42-42 (registration)Top-level call to registerRenderTools(server), which includes registration of 'render.execute_js'.registerRenderTools(server);
- src/tools/render.ts:9-17 (helper)Helper function getBrowser() that provides a shared Puppeteer browser instance, used by the tool handler.async function getBrowser(): Promise<Browser> { if (!browser) { browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); } return browser; }