// 截图验证 import WebSocket from 'ws'; import { writeFileSync } from 'fs'; const res = await fetch('http://127.0.0.1:9222/json'); const targets = await res.json(); const target = targets.find((t) => t.type === 'page') || targets[0]; const ws = new WebSocket(target.webSocketDebuggerUrl); let msgId = 0; const pending = new Map(); function send(method, params = {}) { return new Promise((resolve, reject) => { const id = ++msgId; pending.set(id, { resolve, reject }); ws.send(JSON.stringify({ id, method, params })); }); } ws.on('open', async () => { try { await send('Page.enable'); await send('Runtime.enable'); await send('Emulation.setDeviceMetricsOverride', { width: 1280, height: 800, deviceScaleFactor: 1, mobile: false }); await send('Page.navigate', { url: 'http://localhost:9002/gxnlpt' }); await new Promise((r) => setTimeout(r, 6000)); const state = await send('Runtime.evaluate', { expression: `JSON.stringify({ dialogs: document.querySelectorAll('.t-dialog').length, sections: document.querySelectorAll('.gxnlpt-block').length, cards: document.querySelectorAll('.gxnlpt-card').length, })`, returnByValue: true, }); console.log('state:', state.result?.value); const shot = await send('Page.captureScreenshot', { format: 'png' }); writeFileSync('E:/develop/code/txw/txw-mhzc-web/scripts/final-fix.png', Buffer.from(shot.data, 'base64')); } catch (e) { console.error(e); } finally { ws.close(); } }); ws.on('message', (data) => { const msg = JSON.parse(data); if (msg.id && pending.has(msg.id)) { const { resolve, reject } = pending.get(msg.id); pending.delete(msg.id); if (msg.error) reject(new Error(msg.error.message)); else resolve(msg.result); } }); ws.on('error', console.error);