Browser Use Skill
Overview
This skill enables browsing websites and interacting with web pages using Playwright.
Quick Start - Use Scripts
Important: All uv run commands must be executed from the scripts folder (not the project root):
cd .claude/skills/browser-use/scripts # === MANUAL BROWSING (opens browser for user interaction) === # Open browser for manual use (waits for user to close) uv run browser.py open https://example.com --wait 60 uv run browser.py open https://example.com --account myaccount --wait 120 # === AUTOMATION (headless, returns content) === # Navigate to a URL and get content uv run browser.py auto https://example.com uv run browser.py auto https://example.com --account myaccount # Take a screenshot uv run browser.py screenshot https://example.com -o screenshot.png # Extract text from a page uv run browser.py text https://example.com --selector "h1" # Get all links from a page uv run browser.py links https://example.com # Save page as PDF uv run browser.py pdf https://example.com -o page.pdf # Download a file by clicking a download link uv run browser.py download https://example.com/downloads "a.download-btn" -o ~/Downloads # Upload file(s) to a page uv run browser.py upload https://example.com/upload "input[type=file]" myfile.pdf uv run browser.py upload https://example.com/upload "input[type=file]" file1.txt file2.txt --submit "button[type=submit]" # Upload via file chooser dialog (for dynamic inputs) uv run browser.py upload-chooser https://example.com/upload "button.upload-trigger" myfile.pdf # Click an element uv run browser.py click https://example.com "button.submit" # Fill an input field and press Enter uv run browser.py fill https://google.com "input[name=q]" "search term" --press Enter # Extract attribute from elements uv run browser.py extract https://example.com "img" --attr src --all
Image Download Commands
Download images from websites with optimized performance:
cd .claude/skills/browser-use/scripts # Download images directly from src attribute uv run browser.py download-images https://example.com "img.gallery" -n 10 -o ./images # Download from Google Images (19x faster with regex extraction) uv run browser.py download-from-gallery \ "https://www.google.com/search?q=keyword&tbm=isch&tbs=isz:l" \ "div[data-id] img" \ "img[jsname='kn3ccd']" \ -n 100 \ -o ~/Downloads \ -a myaccount # Search Google Images with size filter uv run browser.py google-image "landscape wallpaper" -n 50 -o ~/Downloads -s Large # Download 4K images (3840px+ minimum) uv run browser.py google-image "wallpaper" -n 20 -o ~/Downloads -s 4k # Download FullHD images (1920px+ minimum) uv run browser.py google-image "wallpaper" -n 50 -o ~/Downloads -s fullhd
Google Images Size Filters
CLI size options (filters by minimum dimension):
- •
-s 4k- 3840px minimum (4K resolution) - •
-s fullhd- 1920px minimum (Full HD) - •
-s Large- 1000px minimum - •
-s Medium- 400px minimum - •
-s Icon- No minimum
Google URL params (used internally):
- •
tbs=isz:l- Large images - •
tbs=isz:m- Medium images - •
tbs=isz:i- Icon size
YouTube Commands
Search and download YouTube videos with duration and date filtering:
cd .claude/skills/browser-use/scripts # Search YouTube and get video URLs (returns JSON) uv run browser.py youtube-search "python tutorial" -n 10 uv run browser.py youtube-search "lofi music" -n 5 -o results.json -s screenshot.png # Search with duration filter (4-20 minutes) uv run browser.py youtube-search "lofi music" -n 5 -min 4 -max 20 # Search videos from the last week uv run browser.py youtube-search "news" -n 10 -t week # Search with custom date range (YYYYMMDD format) uv run browser.py youtube-search "tutorial" -n 10 -df 20240101 -dt 20241231 # Download a single video by URL uv run browser.py youtube-download "https://www.youtube.com/watch?v=dQw4w9WgXcQ" -o ~/Downloads # Download with quality options uv run browser.py youtube-download "https://youtube.com/watch?v=..." -q 720p -o ~/Downloads uv run browser.py youtube-download "https://youtube.com/watch?v=..." -q 1080p -o ~/Downloads # Download audio only (mp3) uv run browser.py youtube-download "https://youtube.com/watch?v=..." -a -o ./music # Search and download in one command uv run browser.py youtube-download "lofi hip hop" --search -o ~/Downloads uv run browser.py youtube-download "python tutorial" --search -n 3 -o ~/Downloads # Search and download with duration filter (4-20 min videos only) uv run browser.py youtube-download "lofi music" --search -n 5 -min 4 -max 20 -o ~/Downloads # Search and download videos from a date range uv run browser.py youtube-download "tutorial" --search -n 5 -df 20240101 -dt 20241231 -o ~/Downloads
YouTube Duration Filters
- •
-min N- Minimum duration in minutes - •
-max N- Maximum duration in minutes - •Filters use YouTube URL parameters for speed, with Python-side validation as backup
YouTube Date Filters
- •
-t, --upload-date- Filter by upload date:hour,today,week,month,year - •
-df, --date-from- Custom date range start (YYYYMMDD format, e.g., 20240101) - •
-dt, --date-to- Custom date range end (YYYYMMDD format, e.g., 20241231)
YouTube Quality Options
- •
best- Best available quality (default) - •
1080p- 1080p or lower - •
720p- 720p or lower - •
480p- 480p or lower - •
360p- 360p or lower - •
audio- Best audio only
YouTube Search Output Format
[
{
"url": "https://www.youtube.com/watch?v=...",
"title": "Video Title",
"channel": "Channel Name",
"duration": "10:30",
"views": "1.2M views",
"date": "2024-12-01"
}
]
TikTok Commands
IMPORTANT: TikTok blocks headless browsers. Use --no-headless for search operations.
cd .claude/skills/browser-use/scripts # Login and save session for authenticated operations uv run browser.py tiktok-login -a mytiktok uv run browser.py tiktok-login -a mytiktok -w 180 # Extended wait for 2FA # Search videos (--no-headless required for TikTok) uv run browser.py tiktok-search "keyword" -n 10 --no-headless uv run browser.py tiktok-search "#dance" -n 5 --no-headless # By hashtag uv run browser.py tiktok-search "cooking" -n 10 -a mytiktok --no-headless # With account # Download single video uv run browser.py tiktok-download "https://tiktok.com/@user/video/123" -o ~/Downloads # Search and download uv run browser.py tiktok-download "funny cats" --search -n 5 -o ~/Downloads --no-headless uv run browser.py tiktok-download "#cooking" --search -n 10 -o ~/Downloads -p 3 --no-headless
TikTok Search Output Format
[
{
"url": "https://www.tiktok.com/@user/video/123456789",
"title": "Video description...",
"author": "username",
"views": "1.2M",
"likes": "50K",
"date": "2d ago"
}
]
Authentication
Save and reuse login sessions across browser commands. Uses Chrome with stealth mode to bypass automation detection (works with Google, etc.):
# Run from scripts folder cd .claude/skills/browser-use/scripts # Step 1: Create a login session (opens Chrome for manual login) # Browser will open maximized - login manually then CLOSE THE BROWSER when done uv run browser.py create-login https://gemini.google.com/app --account myaccount # Options: # --wait, -w Seconds to wait for login (default: 120) # --channel, -c Browser: chrome, msedge, chromium (default: chrome) # Step 2: List saved accounts uv run browser.py accounts # Step 3: Use saved account with commands # Manual browsing (opens browser for user interaction) uv run browser.py open https://gemini.google.com/app --account myaccount # Automation (headless, returns content) uv run browser.py auto https://gemini.google.com/app --account myaccount uv run browser.py screenshot https://gemini.google.com/app -o gemini.png --account myaccount
Storage Location
Authentication is stored in user's home directory ~/.auth/:
~/.auth/
├── account-name.json # Storage state (cookies, localStorage)
└── profiles/
└── account-name/ # Persistent browser profile
This location is shared across all projects and not committed to git.
Best Practices
- •Use
headless=Truefor automation tasks - •Use
headless=Falsewhen debugging or when visual confirmation is needed - •Always close the browser after use
- •Use specific selectors (id, data-testid) over generic ones when possible
- •Add appropriate waits for dynamic content
- •Handle timeouts gracefully with try/except blocks
Common Selectors
- •By ID:
#element-id - •By class:
.class-name - •By text:
text=Button Text - •By role:
role=button[name="Submit"] - •By CSS:
div.container > p.content - •By XPath:
xpath=//div[@class='item']