55 lines
1.8 KiB
JavaScript
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);
|