txw/txw-mhzc-web scripts/shot-fix.mjs
2026-06-02 23:28:48 +08:00

55 lines
1.8 KiB
JavaScript

// 截图验证
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);