Reference

CAPTCHA Type Identification Guide

Before solving a CAPTCHA, you need to know what type it is. Using the wrong CaptchaAI method wastes time and credits. This reference covers every major CAPTCHA type — how to identify it visually, what HTML markers to look for, and which CaptchaAI method to use.


Quick identification table

What you see CAPTCHA type CaptchaAI method
"I'm not a robot" checkbox reCAPTCHA v2 userrecaptcha
Checkbox + "Enterprise" badge reCAPTCHA v2 Enterprise userrecaptcha + enterprise=1
No visible widget (score-based) reCAPTCHA v3 userrecaptcha + version=v3
Image grid (3×3 or 4×4) from reCAPTCHA reCAPTCHA v2 image challenge userrecaptcha (or post for grid)
Cloudflare "Verify you are human" widget Cloudflare Turnstile turnstile
Full-page "Checking your browser" Cloudflare Challenge cloudflare_challenge
Slider puzzle GeeTest v3 geetest
Distorted text/characters image Image/OCR CAPTCHA base64 or post
Grid of separate images with instruction BLS / Grid Image post + grid_size
Math problem image Image/OCR CAPTCHA base64

reCAPTCHA v2

Visual identification:

  • Green checkbox with "I'm not a robot" text
  • Google reCAPTCHA branding (Privacy/Terms links)
  • May trigger image grid challenge after clicking

HTML markers:

<div class="g-recaptcha" data-sitekey="..."></div>
<script src="https://www.google.com/recaptcha/api.js"></script>

CaptchaAI parameters:

{
    "method": "userrecaptcha",
    "googlekey": "SITEKEY_FROM_DATA_ATTRIBUTE",
    "pageurl": "https://example.com/page"
}

reCAPTCHA v2 Enterprise

Visual identification:

  • Same as reCAPTCHA v2 but with Enterprise badge
  • Often on corporate or high-security sites

HTML markers:

<script src="https://www.google.com/recaptcha/enterprise.js"></script>
<!-- OR -->
<script src="https://www.google.com/recaptcha/enterprise.js?render=SITEKEY"></script>

CaptchaAI parameters:

{
    "method": "userrecaptcha",
    "googlekey": "SITEKEY",
    "pageurl": "https://example.com",
    "enterprise": 1
}

reCAPTCHA v2 Invisible

Visual identification:

  • No visible widget — triggered on form submit or button click
  • reCAPTCHA badge in bottom-right corner (may be hidden via CSS)

HTML markers:

<div class="g-recaptcha" data-sitekey="..." data-size="invisible"></div>
<!-- OR -->
<button data-sitekey="..." data-callback="onSubmit" class="g-recaptcha">Submit</button>

CaptchaAI parameters:

{
    "method": "userrecaptcha",
    "googlekey": "SITEKEY",
    "pageurl": "https://example.com",
    "invisible": 1
}

reCAPTCHA v3

Visual identification:

  • No visible widget at all
  • May show reCAPTCHA badge in corner (often hidden)
  • Score-based — runs silently in background

HTML markers:

<script src="https://www.google.com/recaptcha/api.js?render=SITEKEY"></script>

Look for render=SITEKEY in the script URL (not render=explicit).

CaptchaAI parameters:

{
    "method": "userrecaptcha",
    "googlekey": "SITEKEY",
    "pageurl": "https://example.com",
    "version": "v3",
    "action": "login"  # Match the site's action
}

Cloudflare Turnstile

Visual identification:

  • Cloudflare-branded widget ("Verify you are human")
  • Small, embedded within forms
  • Similar to reCAPTCHA checkbox but Cloudflare-styled

HTML markers:

<div class="cf-turnstile" data-sitekey="0x4AAAAAAAA..."></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>

CaptchaAI parameters:

{
    "method": "turnstile",
    "sitekey": "0x4AAAAAAAA...",
    "pageurl": "https://example.com"
}

Cloudflare Challenge

Visual identification:

  • Full-page interstitial — blocks all content
  • "Checking your browser before accessing..." message
  • Cloudflare loading spinner
  • Page title: "Just a moment..."

HTML markers (in the challenge page):

<title>Just a moment...</title>
<div id="challenge-running">...</div>

CaptchaAI parameters:

{
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "host:port:user:pass",      # Mandatory
    "proxytype": "HTTP",                  # Mandatory
    "userAgent": "Mozilla/5.0 ..."        # Mandatory
}

GeeTest v3

Visual identification:

  • Slider puzzle — drag a puzzle piece into position
  • GeeTest branding
  • May show icon-click or 3D challenges

HTML markers:

<script src="https://static.geetest.com/static/tools/gt.js"></script>
<!-- JavaScript calls initGeetest() -->

CaptchaAI parameters:

{
    "method": "geetest",
    "gt": "GT_VALUE",           # From page JavaScript or API
    "challenge": "CHALLENGE",   # Dynamic per load
    "pageurl": "https://example.com"
}

Image/OCR CAPTCHA

Visual identification:

  • An image showing distorted text, numbers, or a math problem
  • Text input field below the image
  • No third-party branding (custom implementation)

HTML markers:

<img src="/captcha.php" id="captcha-image" />
<input type="text" name="captcha" />

CaptchaAI parameters:

# Base64 method
{
    "method": "base64",
    "body": "BASE64_ENCODED_IMAGE"
}

# File upload method
files = {"file": open("captcha.png", "rb")}
data = {"key": "YOUR_API_KEY", "method": "post"}

Programmatic detection script

import requests

def identify_captcha(url):
    """Identify CAPTCHA type on a URL."""
    resp = requests.get(url, allow_redirects=True)
    html = resp.text

    # Cloudflare Challenge (check first — blocks content)
    if resp.status_code in [403, 503]:
        if "Just a moment" in html or "challenge-platform" in html:
            return "cloudflare_challenge"

    # reCAPTCHA Enterprise
    if "recaptcha/enterprise.js" in html:
        if "render=" in html:
            return "recaptcha_v3_enterprise"
        return "recaptcha_v2_enterprise"

    # reCAPTCHA v3
    if "recaptcha/api.js?render=" in html and 'render=explicit' not in html:
        return "recaptcha_v3"

    # reCAPTCHA v2
    if "g-recaptcha" in html or "recaptcha/api.js" in html:
        if 'data-size="invisible"' in html:
            return "recaptcha_v2_invisible"
        return "recaptcha_v2"

    # Cloudflare Turnstile
    if "cf-turnstile" in html or "challenges.cloudflare.com/turnstile" in html:
        return "turnstile"

    # GeeTest
    if "geetest" in html.lower() or "gt.js" in html:
        return "geetest"

    # Generic image CAPTCHA
    if "captcha" in html.lower():
        return "image_ocr"

    return "none_detected"

result = identify_captcha("https://example.com")
print(f"CAPTCHA type: {result}")

FAQ

What if I cannot identify the CAPTCHA type?

Inspect the page source for script URLs, div class names, and data attributes. Search for keywords: recaptcha, turnstile, geetest, captcha. If none match, it is likely a custom image CAPTCHA — try the base64 method.

Can a page have multiple CAPTCHA types?

Yes. A site might use Cloudflare Challenge on initial access and Turnstile on the login form. Detect and solve each separately.

How do I tell reCAPTCHA v2 from v3?

v2 has a visible checkbox or image grid. v3 has no visible widget — it loads via api.js?render=SITEKEY. Check the script tag.


Solve any CAPTCHA type at CaptchaAI

Identify and solve CAPTCHAs at captchaai.com.


Discussions (0)

No comments yet.