Rename to hkt.sh
This commit is contained in:
101
scripts/checkin-cdp.mjs
Normal file
101
scripts/checkin-cdp.mjs
Normal file
@@ -0,0 +1,101 @@
|
||||
import fs from 'fs';
|
||||
import { createRequire } from 'module';
|
||||
const require = createRequire(import.meta.url);
|
||||
const WebSocket = require('ws');
|
||||
|
||||
const LOG = '/Users/jianzhang/.openclaw/workspace/scripts/checkin.log';
|
||||
const ts = new Date().toISOString();
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
const verRes = await fetch('http://127.0.0.1:18800/json/version');
|
||||
const ver = await verRes.json();
|
||||
const wsUrl = ver.webSocketDebuggerUrl;
|
||||
if (!wsUrl) throw new Error('No webSocketDebuggerUrl');
|
||||
|
||||
const ws = new WebSocket(wsUrl);
|
||||
let id = 1;
|
||||
const pending = new Map();
|
||||
ws.on('message', d => {
|
||||
const m = JSON.parse(d);
|
||||
if (m.id && pending.has(m.id)) { pending.get(m.id)(m); pending.delete(m.id); }
|
||||
});
|
||||
const send = (method, params = {}) => new Promise(r => {
|
||||
const i = id++;
|
||||
pending.set(i, r);
|
||||
ws.send(JSON.stringify({ id: i, method, params }));
|
||||
});
|
||||
await new Promise(r => ws.on('open', r));
|
||||
|
||||
// Create new tab
|
||||
const target = await send('Target.createTarget', { url: 'about:blank' });
|
||||
const targetId = target.result.targetId;
|
||||
|
||||
// Attach
|
||||
const sess = await send('Target.attachToTarget', { targetId, flatten: true });
|
||||
const sessionId = sess.result.sessionId;
|
||||
|
||||
const sendS = (method, params = {}) => new Promise(r => {
|
||||
const i = id++;
|
||||
pending.set(i, r);
|
||||
ws.send(JSON.stringify({ id: i, method, params, sessionId }));
|
||||
});
|
||||
|
||||
await sendS('Network.enable');
|
||||
await sendS('Page.enable');
|
||||
|
||||
// Set cookie
|
||||
await sendS('Network.setCookie', {
|
||||
name: '_nk',
|
||||
value: 'dc4d1551406351a93c09082ea08e2d2e',
|
||||
domain: '.nodeseek.com',
|
||||
path: '/',
|
||||
httpOnly: true,
|
||||
secure: true
|
||||
});
|
||||
|
||||
// Navigate
|
||||
await sendS('Page.navigate', { url: 'https://www.nodeseek.com' });
|
||||
|
||||
// Wait for page load
|
||||
await new Promise(r => {
|
||||
const handler = d => {
|
||||
const m = JSON.parse(d);
|
||||
if (m.method === 'Page.loadEventFired') { ws.removeListener('message', handler); r(); }
|
||||
};
|
||||
ws.on('message', handler);
|
||||
});
|
||||
|
||||
// Wait 8s
|
||||
await new Promise(r => setTimeout(r, 8000));
|
||||
|
||||
// Call attendance API
|
||||
await sendS('Runtime.enable');
|
||||
const result = await sendS('Runtime.evaluate', {
|
||||
expression: `(async () => {
|
||||
const res = await fetch('/api/attendance', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ random: true })
|
||||
});
|
||||
return await res.text();
|
||||
})()`,
|
||||
awaitPromise: true,
|
||||
returnByValue: true
|
||||
});
|
||||
|
||||
const val = result.result?.result?.value || JSON.stringify(result.result);
|
||||
const logMsg = `[${ts}] NodeSeek 签到: ${val}\n`;
|
||||
fs.appendFileSync(LOG, logMsg);
|
||||
console.log('签到结果:', val);
|
||||
|
||||
// Close tab
|
||||
await send('Target.closeTarget', { targetId });
|
||||
ws.close();
|
||||
|
||||
} catch (e) {
|
||||
const logMsg = `[${ts}] 签到失败: ${e.message}\n`;
|
||||
fs.appendFileSync(LOG, logMsg);
|
||||
console.error('失败:', e.message);
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user