skills
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import puppeteer from "puppeteer-core";
|
||||
|
||||
const code = process.argv.slice(2).join(" ");
|
||||
if (!code) {
|
||||
console.log("Usage: browser-eval.js 'code'");
|
||||
console.log("\nExamples:");
|
||||
console.log(' browser-eval.js "document.title"');
|
||||
console.log(' browser-eval.js "document.querySelectorAll(\'a\').length"');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const b = await Promise.race([
|
||||
puppeteer.connect({
|
||||
browserURL: "http://localhost:9222",
|
||||
defaultViewport: null,
|
||||
}),
|
||||
new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), 5000)),
|
||||
]).catch((e) => {
|
||||
console.error("✗ Could not connect to browser:", e.message);
|
||||
console.error(" Run: browser-start.js");
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
const p = (await b.pages()).at(-1);
|
||||
|
||||
if (!p) {
|
||||
console.error("✗ No active tab found");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const result = await p.evaluate((c) => {
|
||||
const AsyncFunction = (async () => {}).constructor;
|
||||
return new AsyncFunction(`return (${c})`)();
|
||||
}, code);
|
||||
|
||||
if (Array.isArray(result)) {
|
||||
for (let i = 0; i < result.length; i++) {
|
||||
if (i > 0) console.log("");
|
||||
for (const [key, value] of Object.entries(result[i])) {
|
||||
console.log(`${key}: ${value}`);
|
||||
}
|
||||
}
|
||||
} else if (typeof result === "object" && result !== null) {
|
||||
for (const [key, value] of Object.entries(result)) {
|
||||
console.log(`${key}: ${value}`);
|
||||
}
|
||||
} else {
|
||||
console.log(result);
|
||||
}
|
||||
|
||||
await b.disconnect();
|
||||
Reference in New Issue
Block a user