By the-focus-ai
Interact with web pages via Chrome DevTools Protocol using pure Perl
Check Chrome browser status
Manage browser cookies for session persistence across automation runs.
Extract content from a web page
Fill out and submit web forms
Interact with the current browser page WITHOUT navigating away. Essential for multi-step workflows on SPAs.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A Claude Code plugin that enables LLMs to interact with web pages through Chrome DevTools Protocol, implemented in pure Perl with no external dependencies.
Via Focus Marketplace (Recommended):
# Add the Focus marketplace (if not already added)
/plugin marketplace add The-Focus-AI/claude-marketplace
# Install the plugin
/plugin install chrome-driver@focus-marketplace
Then restart Claude Code.
Manual Installation:
# Clone repository
git clone https://github.com/The-Focus-AI/chrome-driver
cd chrome-driver
# The plugin is self-contained in .claude-plugin/
# Point Claude Code to this directory or copy to your plugins location
Simply ask Claude to interact with websites:
> Take a screenshot of example.com
> Extract the text from https://news.ycombinator.com
> Generate a PDF of this page
> Fill out the login form at https://example.com/login
The browser-automation skill will automatically activate.
Quick commands for common tasks:
/browser # Check browser status
/screenshot URL # Take screenshot
/pdf URL # Generate PDF
/extract URL # Extract content
/navigate URL # Navigate and interact
/interact # Multi-step interactions (no page reload)
/form URL # Fill and submit forms
/record URL DIR # Record screencast frames
/cookies # Manage sessions
use ChromeDriver;
use Page::Navigation;
use Content::Extraction;
# Start browser
my $chrome = ChromeDriver->new(headless => 1);
$chrome->connect_to_page() or die $chrome->error;
# Navigate
my $nav = Page::Navigation->new(chrome => $chrome);
$nav->goto('https://example.com');
# Extract content
my $content = Content::Extraction->new(chrome => $chrome);
my $markdown = $content->markdown();
my @links = $content->links();
# Clean up
$chrome->close();
| Module | Purpose |
|---|---|
ChromeDriver | Core CDP connection and messaging |
Page::Navigation | Navigate, reload, history |
Content::Extraction | Extract HTML, text, markdown, links, images |
Visual::Capture | Screenshots and viewport control |
Print::PDF | PDF generation with full options |
DOM::Elements | Query, click, type, interact with elements |
JS::Execute | Execute JavaScript in browser |
Session::Cookies | Cookie management and persistence |
Help::Browser | Interactive help system |
use ChromeDriver;
use Page::Navigation;
use Content::Extraction;
my $chrome = ChromeDriver->new(headless => 1);
$chrome->connect_to_page();
my $nav = Page::Navigation->new(chrome => $chrome);
my $content = Content::Extraction->new(chrome => $chrome);
$nav->goto('https://example.com');
my $text = $content->text('article');
my @links = $content->links();
print "Content: $text\n";
print "Found " . scalar(@links) . " links\n";
$chrome->close();
use ChromeDriver;
use Page::Navigation;
use DOM::Elements;
my $chrome = ChromeDriver->new(headless => 1);
$chrome->connect_to_page();
my $nav = Page::Navigation->new(chrome => $chrome);
my $dom = DOM::Elements->new(chrome => $chrome);
$nav->goto('https://example.com/login');
$dom->type('input[name="email"]', '[email protected]');
$dom->type('input[name="password"]', 'secret');
$dom->click('button[type="submit"]');
$dom->wait_for('.dashboard', 10);
print "Logged in successfully!\n";
$chrome->close();
use ChromeDriver;
use Page::Navigation;
use Print::PDF;
my $chrome = ChromeDriver->new(headless => 1);
$chrome->connect_to_page();
my $nav = Page::Navigation->new(chrome => $chrome);
my $pdf = Print::PDF->new(chrome => $chrome);
$nav->goto('https://example.com/report');
$pdf->a4(
file => '/tmp/report.pdf',
margin => 1,
print_background => 1
);
print "PDF saved to /tmp/report.pdf\n";
$chrome->close();
use ChromeDriver;
use Page::Navigation;
use Visual::Capture;
my $chrome = ChromeDriver->new(headless => 1);
$chrome->connect_to_page();
my $nav = Page::Navigation->new(chrome => $chrome);
my $capture = Visual::Capture->new(chrome => $chrome);
npx claudepluginhub joshuarweaver/cascade-web-research --plugin the-focus-ai-chrome-driverGenerate images and videos using Google Gemini and Veo models. Provides skills for AI image generation, image editing, text-to-video, and image-to-video workflows.
QuickBooks Online read-only access for Claude Code using OAuth 2.0
Pocket Casts integration - access starred episodes, listening history, show notes, and podcast metadata
Claude Code skills for managing Hetzner servers, Cloudflare DNS, and Docker deployments
Google services integration for Gmail, Calendar, Sheets, Docs, and YouTube using OAuth 2.0
Control a local Chrome browser from Claude Code — navigate, click, type, screenshot, OCR, and more. Powered by Puppeteer.
BETA: VERY LIGHTLY TESTED - Direct Chrome DevTools Protocol access via 'browsing' skill. Skill mode (17 CLI commands) + MCP mode (single use_browser tool). Zero dependencies, auto-starts Chrome.
Chrome DevTools Protocol (CDP) browser automation, web scraping, and crawling with React compatibility
Target-first local Chrome/Chromium browser control with signed-in profiles, labeled tabs, and guarded actions
Direct browser control via CDP. Drives the user's real Chrome (or a Browser Use cloud browser) with coordinate clicks, screenshots, and Python helpers — no selector hunting. Requires the one-time `browser-harness` CLI install (see the skill's references/install.md).
Browser automation with Puppeteer CLI scripts. Use for screenshots, performance analysis, network monitoring, web scraping, form automation, or encountering JavaScript debugging, browser automation errors.