Skip to main content
Read the Notte skill and follow its setup instructions when setting up Notte or building browser automation. This is the shared source for CLI setup, authentication, and the browser-to-code workflow.
Notte can automatically detect and solve captchas including reCAPTCHA v2, hCaptcha, Cloudflare Turnstile, press-and-hold challenges, and simple text challenges during your browser automation. Captcha solving is on by default (solve_captchas=True).

Quick Start

Captcha solving is enabled by default. You can set it explicitly when creating a session:

Supported CAPTCHA Types

Notte automatically detects and solves:
  • ✅ reCAPTCHA v2 - Checkbox and image challenges
  • ✅ hCaptcha - Checkbox and image challenges
  • ✅ Cloudflare Turnstile
  • ✅ Press-and-hold challenges
  • ✅ Text CAPTCHAs - Simple “read the characters and type them” 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 the Live Viewer for Debugging

Watch captcha solving in action:
headless_debug.py

4. Combine with Stealth

Use stealth features for better success rates:

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

Waiting for a solve in Python

The Python SDK polls one ongoing solve through short HTTP requests. Repeated captcha_solve calls join that solve or return its completed result. Configure the total wait separately from ordinary action timeouts:
The default CAPTCHA wait is three minutes. A terminal solver failure, page change, or expired wait budget follows the usual raise_on_failure behavior. Polling does not restart the solve or extend the session’s maximum lifetime. SDK actions blocked before execution wait for the CAPTCHA and then retry. If an action already executed and triggered a CAPTCHA, the SDK waits without replaying it. This coordination applies to Python SDK actions; direct Playwright/CDP calls do not participate. It requires a backend version that supports CAPTCHA polling.

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 most hCaptcha challenges
  • ✅ Solve Cloudflare Turnstile and press-and-hold challenges
  • ✅ Solve simple text CAPTCHA challenges
  • ✅ Work with residential proxies
  • ✅ Work in remote browser sessions

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 was set to False
  • Captcha type not supported
  • Site has additional bot detection
Solution:

Issue: Timeout Waiting for Captcha

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

Testing CAPTCHA Solving

Test captcha solving on demo sites:

Next Steps

Session Configuration

All session configuration options

Stealth Mode

Combine with anti-detection features

Proxies

Use proxies with captcha solving

Live View

Watch captcha solving in real-time