بنقرة واحدة
puppeteer
Use puppeteer to browse websites
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use puppeteer to browse websites
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
You must load this skill if you are creating or updating standalone documentation.
This skill should be used when the user asks to "skillify this", "turn this into a skill", "make a skill out of what we just did", "generalize this task into a reusable skill", or otherwise wants to capture a just-completed session task as a new skill or fold it into an existing one.
Browser automation using the puppeteer NPM package. Use when performing tasks on websites as a user would, taking screenshots, filling forms, or navigating web applications.
Load this skill immediately after a user mentions "@goodfoot/claude-code-hooks" or Claude Code hooks.
Load this skill immediately after a user mentions "@goodfoot/codex-hooks" or Codex hooks.
Load this skill immediately after a user mentions "@goodfoot/codex-hooks" or Codex hooks.
| name | puppeteer |
| description | Use puppeteer to browse websites |
curl -s --connect-timeout 2 http://127.0.0.1:9222/json/version | head -c 200
Empty / FAILED output means Chrome was not launched with --remote-debugging-port=9222 — stop and ask the user.
The browser UUID changes every launch. Always discover it:
WS=$(curl -s http://127.0.0.1:9222/json/version | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).webSocketDebuggerUrl))")
echo "$WS"
Run from /workspace so puppeteer-core resolves from the workspace node_modules. The heredoc form below uses tsx for top-level await; node --input-type=module works equivalently.
WS_ENDPOINT="$WS" tsx << 'EOF'
import puppeteer from "puppeteer-core";
const browser = await puppeteer.connect({
browserWSEndpoint: process.env.WS_ENDPOINT,
defaultViewport: null,
});
const page = (await browser.pages())[0] || await browser.newPage();
await page.goto("http://example.com:8080/", { waitUntil: "networkidle2", timeout: 20000 });
console.log(await page.title());
await browser.disconnect(); // never close() — keeps Chrome alive for next call
EOF