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.
Vorbereitung
Abschnitt betitelt „Vorbereitung“pip install requests seleniumexport YESCAPTCHA_CLIENT_KEY=your_client_key- Kontrollkästchen anklicken. Es befindet sich im hCaptcha-iframe, dessen Adresse
frame=checkboxenthält. Wechseln Sie in das iframe und klicken Sie#checkboxan. - Zum iframe der Aufgabe wechseln. Die Aufgabe liegt in dem iframe, dessen Adresse
frame=challengeenthält. - Frage auslesen. Der Text von
.prompt-textist 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 inanchors. - Bilder abrufen. Das Hintergrundbild von
.task-image .imagejedes Feldes ist ein Einzelbild. Laden Sie die Bilder der Reihe nach herunter, wandeln Sie sie in Base64 um und bilden Sie daraus die Listequeries. - Erkennen. Rufen Sie
createTaskmit dem TypHCaptchaClassificationauf. Die zurückgegebenenobjectsentsprechen den Feldern eins zu eins;truebedeutet Treffer. - 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.
- Fertig. Nach bestandener Prüfung steht das Token im Feld
h-captcha-responseauf der Seite; senden Sie es zusammen mit dem Formular ab.
Vollständiger Code
Abschnitt betitelt „Vollständiger Code“"""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.pyEach 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 base64import osimport reimport time
import requestsfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom 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()Hinweise
Abschnitt betitelt „Hinweise“- 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_QUESTIONzurückgegeben wird, laden Sie die Seite neu, um eine andere Aufgabe zu erhalten, oder wenden Sie sich an den Support.
© YesCaptcha