import { WebSocket } from 'ws'; const list = await (await fetch('http://127.0.0.1:9222/json/list')).json(); const page = list.find(t => t.type === 'page'); const ws = new WebSocket(page.webSocketDebuggerUrl); let id = 0; const pend = new Map(); const send = (m, p = {}) => new Promise(r => { const i = ++id; pend.set(i, r); ws.send(JSON.stringify({ id: i, method: m, params: p })); }); await new Promise(r => ws.on('open', r)); ws.on('message', d => { const m = JSON.parse(d); if (m.id && pend.has(m.id)) { pend.get(m.id)(m.result); pend.delete(m.id); } }); await send('Emulation.setDeviceMetricsOverride', { width: 430, height: 932, deviceScaleFactor: 2, mobile: true }); await send('Page.navigate', { url: 'http://127.0.0.1:5173/' }); await new Promise(r => setTimeout(r, 4500)); // 点日历(底部导航第 2 项) const { result } = await send('Runtime.evaluate', { expression: `(()=>{const els=[...document.querySelectorAll('button,a,div')];const t=els.find(e=>e.textContent?.trim()==='日历');if(t){t.click();return 'clicked'}return 'not found'})()`, returnByValue: true }); console.log('点击结果:', result?.value); await new Promise(r => setTimeout(r, 2500)); const { data } = await send('Page.captureScreenshot', { format: 'png' }); (await import('node:fs')).writeFileSync('/tmp/webui-cal.png', Buffer.from(data, 'base64')); console.log('已截图 /tmp/webui-cal.png'); ws.close();