diff --git a/README.md b/README.md index a8075e7..5a540d8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # veb -Headless browser automation CLI for agents and humans. Full Playwright parity. +Headless browser automation CLI for agents and humans. ## Installation @@ -10,447 +10,253 @@ npx playwright install chromium pnpm build ``` -## Usage +## Quick Start ```bash -# Navigation -veb open https://example.com -veb back # Go back -veb forward # Go forward -veb reload # Reload page - -# Page info -veb url # Get current URL -veb title # Get page title - -# Clicking -veb click "#submit-btn" -veb dblclick "#item" -veb tap "#mobile-btn" # Touch tap - -# Form input -veb type "#search" "query" # Type character by character -veb fill "#email" "test@example.com" # Clear and fill (faster) -veb check "#agree" # Check checkbox/radio -veb uncheck "#newsletter" # Uncheck checkbox -veb select "#country" "US" # Select dropdown -veb clear-input "#field" # Clear input field -veb setvalue "#hidden" "val" # Set value directly - -# Keyboard -veb press Enter -veb press Tab -veb press "Control+a" # Keyboard shortcuts -veb press "Shift+Tab" - -# Mouse -veb hover "#menu" -veb focus "#input" -veb drag "#source" "#target" -veb wheel 300 # Scroll wheel (deltaY) -veb wheel 0 100 # Scroll wheel (deltaX, deltaY) -veb mousemove 100 200 # Move mouse to coordinates -veb mousedown # Press mouse button -veb mouseup # Release mouse button -veb mousedown right # Right-click down - -# Text operations -veb selectall "#input" # Select all text -veb clipboard copy # Copy to clipboard -veb clipboard paste # Paste from clipboard -veb clipboard read # Read clipboard content - -# File upload -veb upload "#file-input" ./document.pdf -veb upload "#files" ./a.png ./b.png - -# Downloads -veb download "#download-btn" ./file.zip - -# Waiting -veb wait "#loading" # Wait for selector -veb wait --text "Welcome" # Wait for text -veb wait 2000 # Wait 2 seconds -veb waitforurl "**/dashboard" # Wait for URL pattern -veb waitforload networkidle # Wait for network idle -veb waitforload domcontentloaded # Wait for DOM ready - -# Screenshots & PDF +veb open example.com +veb click "#submit" +veb fill "#email" "test@example.com" +veb get text "h1" veb screenshot page.png -veb screenshot --full page.png # Full page -veb screenshot -s "#hero" # Specific element -veb pdf report.pdf - -# Content extraction -veb snapshot # Accessibility tree (best for agents) -veb extract "#main" # Get HTML -veb eval "document.title" # Run JavaScript -veb innertext "#message" # Get inner text -veb innerhtml "#container" # Get inner HTML -veb inputvalue "#field" # Get input value - -# Element info -veb gettext "#message" # Get text content -veb getattr "#link" "href" # Get attribute -veb isvisible "#modal" # Check visibility -veb isenabled "#submit" # Check if enabled -veb ischecked "#checkbox" # Check if checked -veb count ".items" # Count matching elements -veb boundingbox "#element" # Get position/size -veb highlight "#element" # Highlight element (debugging) - -# Scrolling -veb scroll down 500 -veb scroll up -veb scroll -s "#container" down - -# Semantic locators (Playwright's recommended approach) -veb role button click --name "Submit" -veb role textbox fill "hello" --name "Email" -veb text "Sign In" click -veb text "Submit" click --exact -veb label "Email" fill "test@test.com" -veb placeholder "Search..." fill "query" -veb alt "Logo" click # By alt text -veb bytitle "Close" click # By title attribute -veb testid "submit-btn" click # By data-testid - -# Nth element (when multiple match) -veb first "a" click # Click first link -veb last "a" click # Click last link -veb nth "a" 2 click # Click 3rd link (0-indexed) -veb first ".item" text # Get text of first item - -# Frames/iframes -veb frame "#iframe" # Switch to iframe -veb mainframe # Switch back to main - -# Network interception -veb route "**/*.png" --abort # Block images -veb route "**/api/*" --body '{"mock":true}' # Mock API -veb unroute # Remove all routes -veb requests # View tracked requests -veb requests --filter "api" # Filter requests - -# Browser settings -veb viewport 1920 1080 # Set viewport size -veb device "iPhone 14" # Emulate device -veb geolocation 37.7749 -122.4194 # Set location (SF) -veb permissions grant geolocation notifications -veb media --dark # Dark mode -veb media --light # Light mode -veb media --print # Print media type -veb media --reduced-motion # Reduced motion -veb offline # Enable offline mode -veb offline off # Disable offline mode -veb headers '{"X-Custom":"value"}' # Set extra headers -veb credentials user pass # HTTP basic auth -veb timezone America/New_York # Set timezone (at launch) -veb locale fr-FR # Set locale (at launch) - -# Cookies -veb cookies # Get all cookies -veb cookies set '[{"name":"session","value":"abc123","domain":".example.com"}]' -veb cookies clear - -# Storage -veb storage local # Get all localStorage -veb storage local myKey # Get specific key -veb storage local set key value # Set value -veb storage local clear # Clear localStorage -veb storage session # sessionStorage (same commands) - -# Dialogs (alerts, confirms, prompts) -veb dialog accept # Accept next dialog -veb dialog accept "input text" # Accept prompt with text -veb dialog dismiss # Dismiss next dialog - -# Debugging & Tracing -veb trace start # Start recording trace -veb trace start --screenshots # With screenshots -veb trace stop ./trace.zip # Stop and save trace -veb state save ./auth.json # Save cookies/storage -veb state load ./auth.json # Load saved state -veb console # View console messages -veb console --clear # Clear console -veb errors # View page errors -veb errors --clear # Clear errors -veb pause # Pause (opens inspector) - -# Inject scripts/styles -veb addscript "console.log('hi')" -veb addscript https://example.com/lib.js -veb addstyle "body { background: red; }" -veb addstyle https://example.com/styles.css -veb setcontent '