Zum Inhalt springen
StatusDashboard

Anleitungen

hCaptcha-Bilderkennung per Klick-Simulation (Selenium)

Diese Seite wurde maschinell aus der chinesischen Version übersetzt und kann Fehler enthalten. Maßgeblich ist die chinesische Version.

Diese Anleitung öffnet die Demoseite von hCaptcha mit Selenium 4 und löst die Aufgabe mit dem 3×3-Raster in einem echten Browser: Sie liest die Frage und die 9 Bilder aus, lässt per hCaptcha-Bilderkennung (HCaptchaClassification) bestimmen, welche Felder Treffer sind, und klickt diese an.

hCaptcha kennt außerdem Aufgaben wie „Klicken Sie auf eine bestimmte Stelle“ oder „Ziehen“. Sie liefern Koordinaten statt Rasterfelder; die Vorgehensweise steht unter hCaptcha-Bilderkennung. Wenn Sie keinen Code schreiben möchten, nutzen Sie direkt die Browser-Erweiterung; sie unterstützt alle diese Aufgabentypen.

pip install requests selenium
export YESCAPTCHA_CLIENT_KEY=your_client_key
  1. Kontrollkästchen anklicken. Es befindet sich im hCaptcha-iframe, dessen Adresse frame=checkbox enthält. Wechseln Sie in das iframe und klicken Sie #checkbox an.
  2. Zum iframe der Aufgabe wechseln. Die Aufgabe liegt in dem iframe, dessen Adresse frame=challenge enthält.
  3. Frage auslesen. Der Text von .prompt-text ist die Frage; übergeben Sie ihn unverändert an die API (es empfiehlt sich, die Oberfläche von hCaptcha auf Englisch oder vereinfachtes Chinesisch umzustellen). Wenn neben der Frage ein kleines Beispielbild angezeigt wird, übergeben Sie es ebenfalls in anchors.
  4. Bilder abrufen. Das Hintergrundbild von .task-image .image jedes Feldes ist ein Einzelbild. Laden Sie die Bilder der Reihe nach herunter, wandeln Sie sie in Base64 um und bilden Sie daraus die Liste queries.
  5. Erkennen. Rufen Sie createTask mit dem Typ HCaptchaClassification auf. Die zurückgegebenen objects entsprechen den Feldern eins zu eins; true bedeutet Treffer.
  6. Klicken und absenden. Klicken Sie die Treffer-Felder an und dann auf die Schaltfläche zum Absenden. Es können mehrere Runden nacheinander folgen; wiederholen Sie dann die Schritte 3 bis 6.
  7. Fertig. Nach bestandener Prüfung steht das Token im Feld h-captcha-response auf der Seite; senden Sie es zusammen mit dem Formular ab.
hcaptcha_click_selenium.py
"""Click through an hCaptcha 3x3 image challenge with Selenium 4 and HCaptchaClassification.
Flow: open the page -> click the checkbox -> read the question and the 9 images ->
ask YesCaptcha which images match -> click them -> submit. Repeat while new rounds appear.
Run: pip install requests selenium
export YESCAPTCHA_CLIENT_KEY=your_client_key
python hcaptcha_click_selenium.py
Each recognized round is charged (see the price list; rounds with no target found are free).
hCaptcha changes its page structure often; adjust the selectors below if a step stops working.
Click and drag questions return coordinates instead; see the HCaptchaClassification page.
"""
import base64
import os
import re
import time
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
PAGE_URL = "https://accounts.hcaptcha.com/demo"
def classify(question, images_b64):
task = {"type": "HCaptchaClassification", "question": question, "queries": images_b64}
data = requests.post(
"https://api.yescaptcha.com/createTask",
json={"clientKey": CLIENT_KEY, "task": task},
timeout=60,
).json()
if data.get("errorId"):
raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
return data["solution"] # synchronous
def background_image_b64(element):
"""The tiles are <div>s with a CSS background image; download it and Base64-encode it."""
style = element.get_attribute("style") or ""
match = re.search(r'url\("?(.*?)"?\)', style)
if not match:
return None
return base64.b64encode(requests.get(match.group(1), timeout=30).content).decode()
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 15)
try:
driver.get(PAGE_URL)
# 1. Click the checkbox (inside the first hCaptcha iframe)
wait.until(EC.frame_to_be_available_and_switch_to_it(
(By.CSS_SELECTOR, 'iframe[src*="hcaptcha"][src*="frame=checkbox"]')))
wait.until(EC.element_to_be_clickable((By.ID, "checkbox"))).click()
driver.switch_to.default_content()
# 2. Solve rounds in the challenge iframe
wait.until(EC.frame_to_be_available_and_switch_to_it(
(By.CSS_SELECTOR, 'iframe[src*="hcaptcha"][src*="frame=challenge"]')))
for _ in range(5):
question = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".prompt-text"))).text.strip()
tiles = driver.find_elements(By.CSS_SELECTOR, ".task-image")
images = [background_image_b64(t.find_element(By.CSS_SELECTOR, ".image")) for t in tiles]
if not tiles or None in images:
print("not a 3x3 image challenge; see the docs for click/drag questions")
break
solution = classify(question, images)
for tile, hit in zip(tiles, solution.get("objects", [])):
if hit:
tile.click()
time.sleep(0.3)
driver.find_element(By.CSS_SELECTOR, ".button-submit").click()
time.sleep(3)
if not driver.find_elements(By.CSS_SELECTOR, ".task-image"):
break
driver.switch_to.default_content()
token = driver.find_element(By.NAME, "h-captcha-response").get_attribute("value")
print("token received" if token else "not passed")
finally:
driver.quit()
  • Die Seitenstruktur von hCaptcha ändert sich häufig. Wenn die Selektoren im Code nicht mehr funktionieren, passen Sie sie an die tatsächliche Seite an.
  • Jede Erkennungsrunde verursacht einen Punkteabzug; wird kein Treffer erkannt, werden keine Punkte abgezogen. Wurde die Prüfung nach dem Klicken abgelehnt, können Sie dies innerhalb von 1 Stunde melden und eine Erstattung nach Meldung beantragen.
  • Wenn bei einer neuen Frage ERROR_UNKNOWN_QUESTION zurückgegeben wird, laden Sie die Seite neu, um eine andere Aufgabe zu erhalten, oder wenden Sie sich an den Support.