Nicht alle CAPTCHAs sind reCAPTCHA oder Standardtextbilder. Benutzerdefinierte CAPTCHAs erfordern kreative Ansätze für die Parameterextraktion und -übermittlung.
Identifizieren benutzerdefinierter CAPTCHAs
| Typ | Eigenschaften | Ansatz |
|---|---|---|
| Slider-CAPTCHA | An die Position ziehen | Screenshot als Bild, Textanweisungen verwenden |
| Puzzle (Puzzle) | Ziehen Sie das Teil, um es anzupassen | Kann einer Lösung im GeeTest-Stil zugeordnet werden |
| Audio-CAPTCHA | Hören Sie zu und tippen Sie | Audiodatei einreichen |
| Bild drehen | Zur korrekten Ausrichtung drehen | Screenshot + Anleitung |
| Bestellung auswählen | Klicken Sie nacheinander auf die Elemente | Verwenden Sie den Bildrasteransatz |
| Mathematische Gleichung | Arithmetik lösen | Verwenden Sie den Parameter calc=1 |
| Benutzerdefinierte interaktiv | Sitespezifisches JS-Widget | Screenshot + Textanweisungen |
Senden benutzerdefinierter Bilder mit Anweisungen
Machen Sie für jedes visuelle CAPTCHA einen Screenshot und geben Sie Anweisungen:
import requests
import base64
import time
import os
API_KEY = os.environ["CAPTCHAAI_API_KEY"]
def solve_custom_captcha(image_b64, instructions):
"""Solve any visual CAPTCHA using image + text instructions."""
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"textinstructions": instructions,
"json": 1,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(result.get("request"))
task_id = result["request"]
time.sleep(10)
for _ in range(30):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"]
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(5)
raise TimeoutError("Solve timeout")
Slider-Position CAPTCHAs
CAPTCHAs, die das Ziehen eines Schiebereglers an eine bestimmte Position erfordern:
# slider_captcha.py
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
def solve_slider_captcha(driver, captcha_selector):
"""Screenshot slider CAPTCHA and solve via CaptchaAI."""
captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
image_b64 = captcha.screenshot_as_base64
result = solve_custom_captcha(
image_b64,
"What pixel position should the slider be dragged to? "
"Return only the X offset number."
)
try:
offset = int(result)
except ValueError:
return False
# Drag slider to position
slider = driver.find_element(By.CSS_SELECTOR, ".slider-handle")
ActionChains(driver).click_and_hold(slider).move_by_offset(offset, 0).release().perform()
return True
Rotations-CAPTCHAs
CAPTCHAs, bei denen ein Bild in die richtige Ausrichtung gedreht werden muss:
# rotation_captcha.py
def solve_rotation_captcha(driver, captcha_selector):
"""Solve rotation CAPTCHA."""
captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
image_b64 = captcha.screenshot_as_base64
result = solve_custom_captcha(
image_b64,
"How many degrees should this image be rotated clockwise "
"to be in the correct upright orientation? Return only the number."
)
try:
degrees = int(result)
except ValueError:
return False
# Click rotation button the correct number of times
rotate_btn = driver.find_element(By.CSS_SELECTOR, ".rotate-button")
clicks = degrees // 90 # Each click rotates 90 degrees
for _ in range(clicks):
rotate_btn.click()
time.sleep(0.3)
return True
Auswahlreihenfolge CAPTCHAs
CAPTCHAs, bei denen Elemente in einer bestimmten Reihenfolge angeklickt werden müssen:
# order_captcha.py
def solve_order_captcha(driver, captcha_selector, item_selector):
"""Solve click-in-order CAPTCHA."""
captcha = driver.find_element(By.CSS_SELECTOR, captcha_selector)
image_b64 = captcha.screenshot_as_base64
result = solve_custom_captcha(
image_b64,
"What is the correct order? Return as comma-separated "
"numbers (1-indexed) representing positions left-to-right, top-to-bottom."
)
# Parse order
try:
order = [int(x.strip()) for x in result.split(",")]
except ValueError:
return False
# Click items in order
items = driver.find_elements(By.CSS_SELECTOR, item_selector)
for idx in order:
if 1 <= idx <= len(items):
items[idx - 1].click()
time.sleep(0.5)
return True
Audio-CAPTCHAs
Einige Websites bieten Audio-Alternativen an:
# audio_captcha.py
import requests
def solve_audio_captcha(audio_url):
"""Download and solve an audio CAPTCHA."""
# Download audio
resp = requests.get(audio_url, timeout=30)
audio_b64 = base64.b64encode(resp.content).decode("ascii")
# Submit as image with instructions
# CaptchaAI may support audio via the base64 method
result = solve_custom_captcha(
audio_b64,
"This is an audio CAPTCHA. Transcribe the spoken characters."
)
return result
Benutzerdefinierte Widget-CAPTCHAs
Für vollständig benutzerdefinierte CAPTCHA-Widgets:
# custom_widget.py
from selenium import webdriver
from selenium.webdriver.common.by import By
def handle_custom_widget(driver, widget_selector):
"""Handle an unknown custom CAPTCHA widget."""
# Step 1: Screenshot the entire widget
widget = driver.find_element(By.CSS_SELECTOR, widget_selector)
image_b64 = widget.screenshot_as_base64
# Step 2: Get any visible instructions
try:
instructions_el = widget.find_element(By.CSS_SELECTOR, ".instructions, .prompt, p")
visible_instructions = instructions_el.text
except Exception:
visible_instructions = "Solve this CAPTCHA"
# Step 3: Submit with descriptive instructions
result = solve_custom_captcha(
image_b64,
f"CAPTCHA instructions: {visible_instructions}. "
f"Return the answer text."
)
# Step 4: Try to submit result
try:
input_el = widget.find_element(By.CSS_SELECTOR, "input")
input_el.clear()
input_el.send_keys(result)
except Exception:
# No input — try clicking based on result
driver.execute_script("""
var input = document.querySelector('input[name*="captcha"]');
if (input) input.value = arguments[0];
""", result)
return result
CAPTCHA-Typerkennung
# detector.py
import re
def detect_captcha_type(page_html):
"""Detect which CAPTCHA type is on a page."""
checks = {
"recaptcha_v2": r'data-sitekey.*g-recaptcha',
"recaptcha_v3": r'recaptcha/api\.js\?render=',
"turnstile": r'cf-turnstile|challenges\.cloudflare\.com/turnstile',
"geetest": r'gt\b.*challenge|geetest',
"bls": r'method.*bls|bls-captcha',
"image_text": r'captcha.*\.(png|jpg|gif|jpeg)',
"slider": r'slider.*captcha|slide.*verify',
"audio": r'audio.*captcha|captcha.*audio',
}
detected = []
for captcha_type, pattern in checks.items():
if re.search(pattern, page_html, re.IGNORECASE):
detected.append(captcha_type)
return detected if detected else ["unknown"]
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
Bild unklar oder Anweisungen vage | Verbessern Sie die Qualität und Anleitung des Screenshots |
| Falsches Antwortformat | Der Solver hat eine Beschreibung anstelle eines Werts zurückgegeben | Seien Sie konkret: „Nur die Nummer zurückgeben“ |
| Benutzerdefiniertes Widget wurde nicht erfasst | Element außerhalb des Ansichtsfensters | Scrollen Sie vor dem Screenshot zum Element |
| Die Interaktion schlägt fehl | Falsche Klickkoordinaten | Ordnen Sie die Lösung sorgfältig den tatsächlichen UI-Elementen zu |
FAQ
Kann CaptchaAI jeden CAPTCHA-Typ lösen?
CaptchaAI unterstützt nativ mehr als 27.500 CAPTCHA-Typen. Für wirklich neuartige benutzerdefinierte CAPTCHAs bietet der Ansatz mit Bild- und Textanweisungen die beste Abdeckung.
Was passiert, wenn sich das benutzerdefinierte CAPTCHA häufig ändert?
Verwenden Sie die Typerkennungsfunktion, um die aktuelle Herausforderung zu identifizieren und sie an den entsprechenden Löser weiterzuleiten.
Wie erhalte ich Unterstützung für einen neuen CAPTCHA-Typ?
Kontaktieren Sie den CaptchaAI-Support mit Beispielbildern und der Site-URL. Der Plattform können neue Typen hinzugefügt werden.
Verwandte Leitfäden
- Lösungsstrategien für mehrere Zeichen
- Best Practices für die Base64-Kodierung
Lösen Sie alle CAPTCHAs – Beginnen Sie mit CaptchaAI.