Files
ObsidianHome/小鱼/.cdp/close-tabs.mjs
T
2026-11-05 15:16:24 +08:00

24 lines
1.3 KiB
JavaScript

import fs from 'node:fs';
import path from 'node:path';
const UDD = 'C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data';
const lines = fs.readFileSync(path.join(UDD, 'DevToolsActivePort'), 'utf8')
.split('\n').map(s => s.trim()).filter(Boolean);
const ws = new WebSocket(`ws://127.0.0.1:${lines[0]}${lines[1]}`);
await new Promise((res, rej) => { ws.addEventListener('open', () => res()); ws.addEventListener('error', () => rej(new Error('ws'))); });
let seq = 0; const pend = new Map();
ws.addEventListener('message', ev => {
const m = JSON.parse(ev.data);
if (m.id && pend.has(m.id)) { pend.get(m.id)(m.result); pend.delete(m.id); }
});
const send = (method, params = {}) => new Promise(r => { const id = ++seq; pend.set(id, r); ws.send(JSON.stringify({ id, method, params })); });
const { targetInfos } = await send('Target.getTargets');
console.log('--- 当前所有标签页 ---');
for (const t of targetInfos.filter(t => t.type === 'page')) console.log(' ' + t.url.slice(0, 110));
const targets = targetInfos.filter(t => t.type === 'page' && /seller-data\/commodity|goofish\.com\/search/.test(t.url));
for (const t of targets) { await send('Target.closeTarget', { targetId: t.targetId }); console.log('closed: ' + t.url.slice(0, 90)); }
if (!targets.length) console.log('没有需要关闭的临时标签页');
ws.close();
process.exit(0);