Skip to main content
Glama
Leviathangk

Playwright MCP Server

by Leviathangk
test-new-tools.js5.74 kB
/** * 测试新增的4个工具 */ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; class NewToolsTest { constructor() { this.client = null; this.transport = null; } async connect() { console.log('🔌 连接到 MCP 服务器...\n'); this.transport = new StdioClientTransport({ command: 'node', args: [ 'build/index.js', '--browser', 'chromium', '--executable-path', 'D:\\Download\\chrome-win\\chrome-win\\chrome.exe', '--headless', 'false' ] }); this.client = new Client({ name: 'new-tools-test', version: '1.0.0' }, { capabilities: {} }); await this.client.connect(this.transport); console.log('✅ 已连接\n'); } async callTool(name, args = {}) { const response = await this.client.callTool({ name, arguments: args }); if (response.isError) { console.log('❌ 错误:', response.content[0].text); return null; } return JSON.parse(response.content[0].text); } async close() { await this.client.close(); } } async function main() { const test = new NewToolsTest(); try { await test.connect(); // 1. 创建会话 console.log('📝 创建浏览器会话...'); const session = await test.callTool('browser_create_session'); const sessionId = session.sessionId; console.log(`✅ 会话 ID: ${sessionId}\n`); // 2. 访问百度 console.log('🌐 访问百度...'); await test.callTool('browser_navigate', { sessionId: sessionId, url: 'https://www.baidu.com', waitUntil: 'networkidle' }); console.log('✅ 页面加载完成\n'); // 3. 测试 query_selector console.log('=' .repeat(60)); console.log('测试 browser_query_selector'); console.log('=' .repeat(60) + '\n'); console.log('查询搜索框 (#kw):'); const inputResult = await test.callTool('browser_query_selector', { sessionId: sessionId, selector: '#kw' }); console.log(JSON.stringify(inputResult, null, 2)); console.log(''); console.log('查询所有链接 (a):'); const linksResult = await test.callTool('browser_query_selector', { sessionId: sessionId, selector: 'a', multiple: true, includeAttributes: false }); console.log(`找到 ${linksResult.count} 个链接`); console.log('前3个:', JSON.stringify(linksResult.elements.slice(0, 3), null, 2)); console.log(''); // 4. 测试 get_page_content console.log('=' .repeat(60)); console.log('测试 browser_get_page_content'); console.log('=' .repeat(60) + '\n'); console.log('获取页面标题和 URL:'); const contentResult = await test.callTool('browser_get_page_content', { sessionId: sessionId, format: 'text', selector: 'title' }); console.log(`标题: ${contentResult.title}`); console.log(`URL: ${contentResult.url}`); console.log(`内容: ${contentResult.content.substring(0, 100)}...`); console.log(''); // 5. 测试 scroll console.log('=' .repeat(60)); console.log('测试 browser_scroll'); console.log('=' .repeat(60) + '\n'); console.log('滚动到底部...'); const scrollResult = await test.callTool('browser_scroll', { sessionId: sessionId, target: 'bottom', smooth: true }); console.log(JSON.stringify(scrollResult, null, 2)); console.log(''); await new Promise(resolve => setTimeout(resolve, 1000)); console.log('滚动到顶部...'); const scrollTopResult = await test.callTool('browser_scroll', { sessionId: sessionId, target: 'top', smooth: true }); console.log(JSON.stringify(scrollTopResult, null, 2)); console.log(''); // 6. 测试 execute_script console.log('=' .repeat(60)); console.log('测试 browser_execute_script'); console.log('=' .repeat(60) + '\n'); console.log('执行脚本获取页面信息:'); const scriptResult = await test.callTool('browser_execute_script', { sessionId: sessionId, script: ` return { title: document.title, url: document.location.href, linkCount: document.querySelectorAll('a').length, imageCount: document.querySelectorAll('img').length, scrollHeight: document.body.scrollHeight, viewportHeight: window.innerHeight }; ` }); console.log(JSON.stringify(scriptResult, null, 2)); console.log(''); console.log('执行脚本修改页面:'); const modifyResult = await test.callTool('browser_execute_script', { sessionId: sessionId, script: ` const input = document.querySelector('#kw'); if (input) { input.value = '测试文本'; input.style.border = '3px solid red'; return { success: true, value: input.value }; } return { success: false }; ` }); console.log(JSON.stringify(modifyResult, null, 2)); console.log(''); // 7. 等待观察 console.log('⏳ 等待 3 秒观察效果...\n'); await new Promise(resolve => setTimeout(resolve, 3000)); // 8. 关闭会话 console.log('🔒 关闭会话...'); await test.callTool('browser_close_session', { sessionId: sessionId }); console.log('✅ 测试完成!\n'); } catch (error) { console.error('❌ 测试失败:', error.message); console.error(error.stack); } finally { await test.close(); } } console.log('🎯 测试新增工具\n'); main().catch(error => { console.error('❌ 致命错误:', error); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Leviathangk/PlaywrightMCPForCrawler'

If you have feedback or need assistance with the MCP directory API, please join our Discord server