Loading...
Loading...
Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.
npx skill4agent add zircote/.claude chrome-devtoolspwdpwd # Should show current working directory
cd .claude/skills/chrome-devtools/scripts
./install-deps.sh # Auto-detects OS and installs required libsnpm install # Installs puppeteer, debug, yargsbrew install imagemagicksudo apt-get install imagemagickmagick -version # or: convert -versionnode navigate.js --url https://example.com
# Output: {"success": true, "url": "https://example.com", "title": "Example Domain"}.claude/skills/chrome-devtools/scripts/pwd./scripts/README.mdnavigate.jsscreenshot.jsclick.jsfill.jsevaluate.jssnapshot.jsconsole.jsnetwork.jsperformance.jspwd # Should show current working directory
cd .claude/skills/chrome-devtools/scripts
node screenshot.js --url https://example.com --output ./docs/screenshots/page.png./docs/screenshots# Default: auto-compress if >5MB
node screenshot.js --url https://example.com --output page.png
# Custom size threshold (e.g., 3MB)
node screenshot.js --url https://example.com --output page.png --max-size 3
# Disable compression
node screenshot.js --url https://example.com --output page.png --no-compress{
"success": true,
"output": "/path/to/page.png",
"compressed": true,
"originalSize": 8388608,
"size": 3145728,
"compressionRatio": "62.50%",
"url": "https://example.com"
}# Keep browser open with --close false
node navigate.js --url https://example.com/login --close false
node fill.js --selector "#email" --value "user@example.com" --close false
node fill.js --selector "#password" --value "secret" --close false
node click.js --selector "button[type=submit]"# Extract specific fields with jq
node performance.js --url https://example.com | jq '.vitals.LCP'
# Save to file
node network.js --url https://example.com --output /tmp/requests.jsonpwd.claude/skills/chrome-devtools/scripts/cdpwd # Should show: .../chrome-devtools/scripts
# If wrong:
cd .claude/skills/chrome-devtools/scriptsls -lh <output-path>node screenshot.js --url https://example.com --output ./docs/screenshots/page.png
ls -lh ./docs/screenshots/page.png # Verify file exists
# Then use Read tool to visually inspect# CSS selector fails
node click.js --url https://example.com --selector ".btn-submit"
# Error: waiting for selector ".btn-submit" failed
# Discover correct selector
node snapshot.js --url https://example.com | jq '.elements[] | select(.tagName=="BUTTON")'
# Try XPath
node click.js --url https://example.com --selector "//button[contains(text(),'Submit')]"pwdnode evaluate.js --url https://example.com --script "
Array.from(document.querySelectorAll('.item')).map(el => ({
title: el.querySelector('h2')?.textContent,
link: el.querySelector('a')?.href
}))
" | jq '.result'PERF=$(node performance.js --url https://example.com)
LCP=$(echo $PERF | jq '.vitals.LCP')
if (( $(echo "$LCP < 2500" | bc -l) )); then
echo "✓ LCP passed: ${LCP}ms"
else
echo "✗ LCP failed: ${LCP}ms"
finode fill.js --url https://example.com --selector "#search" --value "query" --close false
node click.js --selector "button[type=submit]"node console.js --url https://example.com --types error,warn --duration 5000 | jq '.messageCount'--headless false--close false--timeout 30000--wait-until networkidle2./scripts/README.md{
"success": true,
"url": "https://example.com",
... // script-specific data
}{
"success": false,
"error": "Error message"
}snapshot.jsnode snapshot.js --url https://example.com | jq '.elements[] | {tagName, text, selector}'npm install./install-deps.shsudo apt-get install -y libnss3 libnspr4 libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1ls ~/.cache/puppeteernpm rebuildnpm installnpm installnpx puppeteer browsers install chromenode snapshot.js --url <url>--timeout 60000--wait-until load--wait-until domcontentloaded--wait-until networkidle2--timeout 30000chmod +x *.sh--max-size 3--format jpeg --quality 80--selector .main-contentmagick -versionconvert -version"compressed": true--selector./references/import { getBrowser, getPage, closeBrowser, outputJSON } from './lib/browser.js';
// Your automation logicconst client = await page.createCDPSession();
await client.send('Emulation.setCPUThrottlingRate', { rate: 4 });