| name | general-browsing |
| description | Browse websites like a human to avoid bot detection. Build browsing history before target site. Navigate by clicking elements instead of direct URLs. Auto-loaded when using browser tools. |
Anti-Bot Browsing Patterns
Bot detection systems flag automated browsers by watching for: no browsing history, direct URL navigation with no referer, instant page loads with no human-like exploration, and skipping cookie/consent banners.
Rule 1: Build Browsing History First
Before navigating to your target site, visit 2-3 benign sites to create a realistic browsing trail. This establishes cookies, referer headers, and a history graph that looks human.
Warm-up Sequence
When starting a fresh browser session or visiting a target site for the first time:
1. Navigate to a search engine (rotate: google.com, bing.com, duckduckgo.com)
2. Take a snapshot, wait 2-3 seconds (simulate reading)
3. Navigate to an innocuous site (wikipedia.org, reddit.com, github.com)
4. Take a snapshot, scroll briefly
5. NOW navigate to your target site
Warm-up Site Rotation
Don't always use the same warm-up sites. Pick 2-3 from this list in random order:
- Search engines: google.com, bing.com, duckduckgo.com
- Reference: wikipedia.org, stackoverflow.com
- Social: reddit.com, news.ycombinator.com
- Developer: github.com, npmjs.com
When Warm-up is Required
- Always on first page load of a new session
- Always after container restart (new fingerprint)
- Always for sites known to use aggressive bot detection (Upwork, LinkedIn, etc.)
- Optional if you already have an active session with cookies and the target site already trusts you
Rule 2: Click, Don't Navigate
Once you're on the target site, never use browser_navigate to move between pages. Instead:
- Take a
browser_snapshot
- Find the link/button that leads to your destination
- Use
browser_click on that element
Why
browser_navigate to a URL has no referer context — bot-like
- Clicking a link sends the correct referer header
- Bot systems track navigation method, not just destination
- Clicking creates mouse movement and interaction patterns
Example: Login Page
# BAD - direct URL, no referer, bot-like
browser_navigate "https://www.target.com/login"
# GOOD - natural click-based navigation
browser_navigate "https://www.target.com/" # initial load (with warm-up first)
browser_snapshot # find the "Log In" link
browser_click "@eN" # click the login link/button
browser_snapshot # now you're on the login page naturally
Example: Finding Jobs on Upwork
# BAD
browser_navigate "https://www.upwork.com/nx/search/jobs/?q=python"
# GOOD
browser_navigate "https://www.upwork.com/" # homepage
browser_snapshot # find search or navigation elements
browser_click "@eN" # click "Find Work" or search input
browser_fill "@eM" "python" # type in search (uses humanized typing)
browser_click "@eP" # click search button
browser_snapshot # now you're on results page naturally
Rule 3: Handle Cookie/Consent Banners
Always dismiss cookie consent dialogs before proceeding. These are common on EU-targeted sites and are a tell if ignored.
browser_snapshot # look for consent banner
browser_click "@eN" # click "Accept" or "Close"
browser_snapshot # proceed with page (refs reset after dismiss!)
Rule 4: Add Human-Like Delays
Between actions, use brief pauses. Don't rapid-fire tool calls:
- After page load: wait for navigation or snapshot to confirm load
- Before typing: snapshot first to verify element is ready
- Between form fields: don't fill username and password in the same millisecond
- After clicking a button: wait for navigation/response
Rule 5: Handle Stale Refs
Refs (element references like @e2) invalidate after any navigation or page change. Always take a new browser_snapshot before interacting with elements — especially after:
- Navigation
- Clicking something that changes the page
- Scrolling (if lazy-loaded content appears)
- Dismissing dialogs/modals
# WRONG - refs from old snapshot
browser_snapshot # refs: e1-e13
browser_click "@e3" # page changes
browser_click "@e7" # ERROR: @e7 is stale now
# RIGHT - refresh refs after page change
browser_snapshot # refs: e1-e13
browser_click "@e3" # page changes
browser_snapshot # NEW refs: e1-e11
browser_click "@e5" # use fresh refs
Complete Example: Logging into Upwork
# Step 1: Warm-up
browser_navigate "https://www.google.com"
browser_snapshot # browse briefly
browser_navigate "https://en.wikipedia.org"
browser_snapshot
browser_scroll "down"
# Step 2: Go to target homepage
browser_navigate "https://www.upwork.com/"
browser_wait_for_navigation # handle Cloudflare if present
targetUrl: "upwork.com"
timeout: 15000
browser_snapshot
# Step 3: Dismiss cookie banner if present
# (click "Close" or "Accept" on the consent dialog)
browser_click "@e115" # cookie banner close button
# Step 4: Navigate to login by CLICKING, not URL
browser_snapshot # fresh refs after banner dismiss
browser_click "@e9" # click the "Log In" link in nav
browser_snapshot # now on login page with proper referer
# Step 5: Fill credentials (humanized typing is automatic)
browser_click "@e2" # click username field
browser_fill "@e2" "user@example.com"
browser_click "@e3" # click Continue or go to password
browser_snapshot # fresh refs
browser_fill "@ePasswordRef" "password123"
# Step 6: Submit
browser_snapshot # fresh refs
browser_click "@eSubmit" # click Continue/Submit button
browser_wait_for_navigation
targetUrl: "upwork.com"
timeout: 15000