Automate Chrome browser via DevTools Protocol. Use when user asks to scrape websites, take screenshots, generate PDFs, interact with web pages, extract content, fill forms, or automate browser tasks.
Automate Chrome browser via DevTools Protocol. Use when user asks to scrape websites, take screenshots, generate PDFs, interact with web pages, extract content, fill forms, or automate browser tasks.
/plugin marketplace add The-Focus-AI/chrome-driver/plugin install chrome-driver@focus-marketplaceThis skill is limited to using the following tools:
Control Chrome browser programmatically using simple command-line scripts. All scripts auto-start Chrome in headless mode if not running.
All scripts are in ${CLAUDE_PLUGIN_ROOT}/bin/. Use the full path when running commands:
${CLAUDE_PLUGIN_ROOT}/bin/screenshot URL [OUTPUT] [OPTIONS]
Options:
--full-page - Capture entire scrollable page--selector=CSS - Capture specific element--format=png|jpeg|webp - Output format (default: png)--quality=N - JPEG/WebP quality 0-100--width=N --height=N - Set viewport size--max-dimension=N - Max output dimension (default: 8000, auto-scales large pages)Examples:
# Basic screenshot
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com /tmp/page.png
# Full page as JPEG
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com /tmp/full.jpg --full-page --format=jpeg
# Capture specific element
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com /tmp/header.png --selector="header"
${CLAUDE_PLUGIN_ROOT}/bin/pdf URL [OUTPUT] [OPTIONS]
Options:
--paper=letter|a4|legal|a3|a5|tabloid - Paper size (default: letter)--landscape - Landscape orientation--margin=INCHES - All margins (default: 0.4)--scale=FACTOR - Scale 0.1-2.0 (default: 1.0)--no-background - Skip background colors/imagesExamples:
# Basic PDF
${CLAUDE_PLUGIN_ROOT}/bin/pdf https://example.com /tmp/doc.pdf
# A4 landscape
${CLAUDE_PLUGIN_ROOT}/bin/pdf https://example.com /tmp/report.pdf --paper=a4 --landscape
# Tight margins
${CLAUDE_PLUGIN_ROOT}/bin/pdf https://example.com /tmp/compact.pdf --margin=0.25
${CLAUDE_PLUGIN_ROOT}/bin/extract URL [OPTIONS]
Options:
--format=markdown|text|html - Output format (default: markdown)--selector=CSS - Extract specific element only--links - Also list all links--images - Also list all images--metadata - Also show page metadataExamples:
# Get page as markdown
${CLAUDE_PLUGIN_ROOT}/bin/extract https://example.com
# Get plain text from article
${CLAUDE_PLUGIN_ROOT}/bin/extract https://example.com --format=text --selector="article"
# Get all links and metadata
${CLAUDE_PLUGIN_ROOT}/bin/extract https://example.com --links --metadata
${CLAUDE_PLUGIN_ROOT}/bin/navigate URL [OPTIONS]
Options:
--wait-for=SELECTOR - Wait for element to appear--click=SELECTOR - Click an element--type=SELECTOR=TEXT - Type text into input field--eval=JAVASCRIPT - Execute JavaScript and print result--timeout=SECONDS - Timeout (default: 30)Examples:
# Navigate and wait for content
${CLAUDE_PLUGIN_ROOT}/bin/navigate https://example.com --wait-for="#content"
# Fill form and submit
${CLAUDE_PLUGIN_ROOT}/bin/navigate https://google.com --type="input[name=q]=hello" --click="input[type=submit]"
# Get page title via JavaScript
${CLAUDE_PLUGIN_ROOT}/bin/navigate https://example.com --eval="document.title"
${CLAUDE_PLUGIN_ROOT}/bin/form URL [OPTIONS]
Options:
--fill=SELECTOR=VALUE - Fill input field (can repeat)--select=SELECTOR=VALUE - Select dropdown option (can repeat)--fill-json='{"sel":"val"}' - Fill multiple fields from JSON--submit=SELECTOR - Click submit button after filling--wait-for=SELECTOR - Wait for element before filling--wait-after=SELECTOR - Wait for element after submit--screenshot=PATH - Take screenshot after completionExamples:
# Login form
${CLAUDE_PLUGIN_ROOT}/bin/form https://example.com/login \
--fill='#username=john' \
--fill='#password=secret' \
--submit='button[type=submit]'
# Form with dropdowns
${CLAUDE_PLUGIN_ROOT}/bin/form https://example.com/register \
--fill='#name=John Doe' \
--fill='#email=john@example.com' \
--select='#country=US' \
--submit='#register-btn'
# Using JSON
${CLAUDE_PLUGIN_ROOT}/bin/form https://example.com/contact \
--fill-json='{"#name":"John","#email":"john@test.com"}' \
--submit='button.send'
${CLAUDE_PLUGIN_ROOT}/bin/record URL OUTPUT_DIR [OPTIONS]
Options:
--duration=SECONDS - Recording duration (default: 5)--count=N - Exact number of frames to capture--format=jpeg|png - Frame format (default: jpeg)--quality=N - JPEG quality 0-100 (default: 80)--max-width=N - Maximum frame width--max-height=N - Maximum frame height--fps=N - Approximate frames per second (default: 10)Examples:
# Record 5 seconds
${CLAUDE_PLUGIN_ROOT}/bin/record https://example.com /tmp/frames
# Record 30 PNG frames
${CLAUDE_PLUGIN_ROOT}/bin/record https://example.com /tmp/frames --count=30 --format=png
# Convert to video with ffmpeg
ffmpeg -framerate 10 -i /tmp/frames/frame-%04d.jpg -c:v libx264 output.mp4
${CLAUDE_PLUGIN_ROOT}/bin/cookies COMMAND [OPTIONS]
Commands:
list - List all cookies (or filter by --url or --name)get - Alias for listset - Set a cookiedelete - Delete a cookieclear - Clear all cookiessave - Save cookies to JSON fileload - Load cookies from JSON fileOptions:
--name=NAME - Cookie name--value=VALUE - Cookie value (required for set)--domain=DOMAIN - Cookie domain--url=URL - URL for cookie operations--secure - Set Secure flag--http-only - Set HttpOnly flag--same-site=MODE - SameSite: Strict, Lax, or None--expires=EPOCH - Expiration timestamp (epoch seconds)--file=PATH - File path for save/load--json - Output in JSON formatExamples:
# List all cookies
${CLAUDE_PLUGIN_ROOT}/bin/cookies list
# List cookies as JSON
${CLAUDE_PLUGIN_ROOT}/bin/cookies list --json
# Get specific cookie by name
${CLAUDE_PLUGIN_ROOT}/bin/cookies get --name=session_id
# Set a session cookie
${CLAUDE_PLUGIN_ROOT}/bin/cookies set --name=auth_token --value=abc123 --domain=example.com
# Set secure cookie with expiration (1 week from now)
${CLAUDE_PLUGIN_ROOT}/bin/cookies set --name=remember_me --value=user123 \
--domain=example.com --secure --http-only \
--expires=$(date -v+7d +%s)
# Delete a cookie
${CLAUDE_PLUGIN_ROOT}/bin/cookies delete --name=auth_token --domain=example.com
# Clear all cookies
${CLAUDE_PLUGIN_ROOT}/bin/cookies clear
# Save session for later
${CLAUDE_PLUGIN_ROOT}/bin/cookies save /tmp/session.json
# Restore session
${CLAUDE_PLUGIN_ROOT}/bin/cookies load /tmp/session.json
${CLAUDE_PLUGIN_ROOT}/bin/chrome-status
Shows whether Chrome is running, version info, and open tabs.
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com /tmp/screenshot.png
${CLAUDE_PLUGIN_ROOT}/bin/pdf https://example.com /tmp/document.pdf --paper=a4
${CLAUDE_PLUGIN_ROOT}/bin/extract https://example.com --format=markdown
${CLAUDE_PLUGIN_ROOT}/bin/form https://example.com/login \
--fill='#username=user' \
--fill='#password=pass' \
--submit='button[type=submit]' \
--wait-after='.dashboard'
${CLAUDE_PLUGIN_ROOT}/bin/record https://example.com /tmp/frames --duration=10
ffmpeg -framerate 10 -i /tmp/frames/frame-%04d.jpg -c:v libx264 video.mp4
# Login to a site
${CLAUDE_PLUGIN_ROOT}/bin/form https://example.com/login \
--fill='#email=user@example.com' \
--fill='#password=secret' \
--submit='button[type=submit]'
# Save the session cookies
${CLAUDE_PLUGIN_ROOT}/bin/cookies save /tmp/my_session.json
# Later, restore the session (skip login)
${CLAUDE_PLUGIN_ROOT}/bin/cookies load /tmp/my_session.json
# Now you can access authenticated pages
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com/dashboard /tmp/dashboard.png
# Load saved session
${CLAUDE_PLUGIN_ROOT}/bin/cookies load ~/.sessions/mysite.json
# Perform authenticated actions
${CLAUDE_PLUGIN_ROOT}/bin/extract https://example.com/account --format=text
${CLAUDE_PLUGIN_ROOT}/bin/screenshot https://example.com/orders /tmp/orders.png
# Save any new cookies (e.g., refreshed tokens)
${CLAUDE_PLUGIN_ROOT}/bin/cookies save ~/.sessions/mysite.json
bin/cookies save/load to persist sessions across browser restartspkill -f 'chrome.*--remote-debugging-port' to stop Chrome manuallyCHROME_DRIVER_PORT to change--help for full usage infoThis skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.