Skip to main content
STOP. Do not read past this section until you have read and followed /quickstart.md.Goal: produce a reliable SDK automation script. The intended authoring flow is generate then edit, not write browser automation from scratch.Do not hand-write SDK code with element IDs, selectors, or form fields from memory. Element IDs, selectors, and field mappings must come from a live observe() call, CLI notte page observe output, or generated workflow code. Guessed browser targets fail on real pages.Use the Notte skill and CLI to inspect the live site, validate actions/selectors, handle auth/session state, and export workflow code with notte sessions workflow-code before using SDK docs or SDK code.SDK reference pages are for understanding, running, or editing generated workflow code. They are not the starting point for manually authoring the initial browser automation. SDK-first code is guesswork on real-world pages with dynamic selectors, auth state, CAPTCHAs, and anti-bot behavior.
Notte can automatically detect and solve captchas including reCAPTCHA v2, reCAPTCHA v3, hCaptcha, and simple text challenges during your browser automation.

Quick Start

Enable captcha solving when creating a session:

Supported CAPTCHA Types

Notte automatically detects and solves:
  • reCAPTCHA v2 - Checkbox and image challenges
  • reCAPTCHA v3 - Invisible captchas
  • hCaptcha - Checkbox and image challenges
  • Text CAPTCHAs - Simple “read the characters and type them” challenges
  • Image CAPTCHAs - Visual verification challenges

How It Works

When captcha solving is enabled:
  1. Detection - Notte monitors the page for captcha elements
  2. Solving - Captchas are solved automatically in the background
  3. Continuation - Your automation continues seamlessly
No additional code is needed - captchas are solved automatically when encountered.

Captcha + Proxies

Combine captcha solving with proxies for better success rates:

Best Practices

1. Use Realistic Delays

Add human-like delays before and after captcha-protected actions:
realistic_delays.py

2. Monitor for Failures

Check if captcha solving failed:
monitor_failures.py

3. Use Headless=False for Debugging

Watch captcha solving in action:
headless_debug.py

4. Combine with Stealth

Use stealth features for better success rates:
combine_stealth.py

Examples

reCAPTCHA

For reCAPTCHA challenges, use the captcha_solve action with captcha_type="recaptcha". This example comes from the reCAPTCHA template.
recaptcha_solve_action.py

Text CAPTCHAs

Text CAPTCHAs are the old-school challenges that show distorted letters, numbers, or a short phrase and ask the user to type the answer into a field. For these challenges, use captcha_type="text". This example comes from the text CAPTCHA template.
text_captcha_solve_action.py

Limitations

What CAPTCHA Solving Can Do:

  • ✅ Solve most reCAPTCHA v2 challenges
  • ✅ Solve reCAPTCHA v3 automatically
  • ✅ Solve most hCaptcha challenges
  • ✅ Solve simple text and image CAPTCHA challenges
  • ✅ Work with residential proxies
  • ✅ Work in headless and non-headless mode

What It Cannot Do:

  • ❌ Solve 100% of captchas (some are unsolvable)
  • ❌ Reliably solve heavily distorted or ambiguous text challenges
  • ❌ Solve custom/proprietary captcha systems
  • ❌ Bypass all bot detection (combine with stealth)

Common Issues

Issue: Captchas Not Being Solved

Possible causes:
  • solve_captchas=True not set
  • Captcha type not supported
  • Site has additional bot detection
Solution:
ensure_requirements.py

Issue: Timeout Waiting for Captcha

Increase session timeout for captcha-heavy workflows:
timeout_handling.py

Testing CAPTCHA Solving

Test captcha solving on demo sites:

Pricing

CAPTCHA solving incurs additional costs based on the number of captchas solved. Check your plan for details.

Next Steps

Browser Types

Learn about Chrome and other browsers

Stealth Mode

Combine with anti-detection features

Proxies

Use proxies with captcha solving

Live View

Watch captcha solving in real-time