Files
2026-04-12 01:06:31 +07:00

57 lines
1.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Execute JavaScript in page context
* Usage: node evaluate.js --script "document.title" [--url https://example.com]
*/
import { getBrowser, getPage, closeBrowser, disconnectBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
async function evaluate() {
const args = parseArgs(process.argv.slice(2));
if (!args.script) {
outputError(new Error('--script is required'));
return;
}
try {
const browser = await getBrowser({
headless: args.headless
});
const page = await getPage(browser);
// Navigate if URL provided
if (args.url) {
await page.goto(args.url, {
waitUntil: args['wait-until'] || 'networkidle2'
});
}
const result = await page.evaluate(async (script) => {
// Wrap in async IIFE so user scripts can use await
// eslint-disable-next-line no-eval
return await eval(`(async () => { return ${script}; })()`);
}, args.script);
outputJSON({
success: true,
result: result,
url: page.url()
});
// Default: disconnect to keep browser running for session persistence
// Use --close true to fully close browser
if (args.close === 'true') {
await closeBrowser();
} else {
await disconnectBrowser();
}
process.exit(0);
} catch (error) {
outputError(error);
process.exit(1);
}
}
evaluate();