Files
vps-management-bot/scripts/nodeseek-checkin.cjs
2026-03-21 01:10:53 +08:00

124 lines
3.2 KiB
JavaScript

#!/usr/bin/env node
const WebSocket = require("ws");
const fs = require("fs");
const CDP_URL = process.argv[2];
const COOKIE_VALUE = "dc4d1551406351a93c09082ea08e2d2e";
const TARGET_URL = "https://www.nodeseek.com";
const LOG_FILE = process.env.HOME + "/.openclaw/workspace/scripts/checkin.log";
async function sleep(ms) {
return new Promise(r => setTimeout(r, ms));
}
let msgId = 1;
function send(ws, method, params = {}, sessionId) {
return new Promise((resolve, reject) => {
const id = msgId++;
const payload = { id, method, params };
if (sessionId) payload.sessionId = sessionId;
ws.send(JSON.stringify(payload));
const handler = (data) => {
try {
const msg = JSON.parse(data);
if (msg.id === id) {
ws.removeListener("message", handler);
if (msg.error) reject(msg.error);
else resolve(msg.result);
}
} catch(e) {}
};
ws.on("message", handler);
});
}
async function main() {
const ws = new WebSocket(CDP_URL);
await new Promise((resolve, reject) => {
ws.on("open", resolve);
ws.on("error", reject);
});
console.log("Connected to CDP");
// 创建新标签页
const { targetId } = await send(ws, "Target.createTarget", {
url: "about:blank"
});
console.log("Created target:", targetId);
// 连接到新标签页
const { sessionId } = await send(ws, "Target.attachToTarget", {
targetId,
flatten: true
});
console.log("Attached to target, sessionId:", sessionId);
// 设置 cookie
await send(ws, "Network.setCookie", {
name: "_nk",
value: COOKIE_VALUE,
domain: ".nodeseek.com",
path: "/"
}, sessionId);
console.log("Cookie set");
// 启用 Page 域
await send(ws, "Page.enable", {}, sessionId);
// 导航到页面并等待加载
const loadPromise = new Promise((resolve) => {
const handler = (data) => {
try {
const msg = JSON.parse(data);
if (msg.method === "Page.loadEventFired") {
ws.removeListener("message", handler);
resolve();
}
} catch(e) {}
};
ws.on("message", handler);
});
await send(ws, "Page.navigate", { url: TARGET_URL }, sessionId);
console.log("Navigating to:", TARGET_URL);
await loadPromise;
console.log("Page loaded, waiting 8 seconds...");
await sleep(8000);
// 执行签到
const result = await send(ws, "Runtime.evaluate", {
expression: `fetch("/api/attendance", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ random: true })
}).then(r => r.json())`,
returnByValue: true,
awaitPromise: true
}, sessionId);
console.log("Check-in result:", JSON.stringify(result.result?.value || result));
// 记录日志
const logEntry = `[${new Date().toISOString()}] NodeSeek 朦胧签到: ${JSON.stringify(result.result?.value || result)}\n`;
fs.appendFileSync(LOG_FILE, logEntry);
console.log("Logged to:", LOG_FILE);
// 关闭标签页
await send(ws, "Target.closeTarget", { targetId });
console.log("Target closed");
ws.close();
console.log("Done");
return result.result?.value || result;
}
main().catch(err => {
console.error("Error:", err);
process.exit(1);
});