reCAPTCHA Enterprise mit Python lösen
Fordern Sie mit dem offiziellen Python SDK ein reCAPTCHA v3 Enterprise-Token an und übermitteln Sie anschließend solution.token mit der zurückgegebenen Browseridentität und demselben Proxy. Sie benötigen Python 3.10 oder neuer, einen API-Schlüssel für Ihren Workspace und ein aktives Profil für die Zielwebsite.
Auf dieser Seite
SDK installieren und Website konfigurieren
Installieren Sie das offizielle Python SDK:
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl- 1.
Websiteprofil erstellen
Richten Sie den Zielhostnamen in der solvethree-Konsole ein und stellen Sie sicher, dass sein Profil aktiv und für Ihren Workspace verfügbar ist. Das Senden eines Hostnamens in einer Lösungsanfrage erstellt kein Profil. Falls Sie noch keines konfiguriert haben, lesen Sie Websiteprofil einrichten.
- 2.
SOLVETHREE_API_KEY setzen
Setzen Sie
SOLVETHREE_API_KEYin der Shell oder Deployment-Umgebung, in der das Skript ausgeführt wird, auf den API-Schlüssel Ihres Workspace. Bewahren Sie ihn auf dem Server auf, nicht im Browsercode oder in einer ins Repository eingecheckten Quelldatei. - 3.
SOLVETHREE_PROXY setzen
Setzen Sie
SOLVETHREE_PROXYauf die Proxy-URL, die für den Lösungsvorgang und die anschließende Anwendungsanfrage verwendet wird. Das Beispiel verwendet einen Proxy; fügen Sie daher nicht zusätzlichproxyCandidateshinzu.
Enterprise-Token anfordern
Speichern Sie dieses Beispiel als solve.py. Ersetzen Sie accounts.example.com durch Ihren konfigurierten Hostnamen – ohne Schema oder Pfad – und login durch die von der Zielseite verwendete Aktion.
import os
from uuid import uuid4
from solvethree import Solvethree, SolvethreeError, TaskFailedError
client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
request = {
"site": "accounts.example.com", # Use your configured hostname.
"action": "login", # Use the page's actual action.
"proxy": os.environ["SOLVETHREE_PROXY"],
"requestId": str(uuid4()),
}
try:
result = client.solve(request, timeout=180)
except TaskFailedError as error:
raise SystemExit(f"Task failed: {error.error_code}") from None
except SolvethreeError as error:
# Keep these IDs so an interrupted request can be recovered.
raise SystemExit(f"Recover request {error.request_id}, task {error.task_id}") from None
solution = result["solution"]
token = solution["token"]
user_agent = solution["userAgent"]
client_hints = solution["secChUa"]
print("Ready task:", result["id"]) # Do not print the token or proxy password.Die Anfrage verwendet standardmäßig enterprise-v3 und benötigt daher kein Feld recaptchaType. Fügen Sie weder type noch url hinzu; dies sind keine reCAPTCHA-Anfragefelder.
Solvethree arbeitet synchron. client.solve erstellt die Aufgabe einmal und fragt ihren Status dann wiederholt ab, bis ein fertiges Ergebnis zurückgegeben oder eine Ausnahme ausgelöst wird. Hier begrenzt timeout=180 die Wartezeit des Clients auf 180 Sekunden. Bei Erfolg extrahiert das Skript das Token, den User-Agent und die Client Hints, ohne vertrauliche Werte auszugeben.
Token an Ihre Anwendung übermitteln
Fahren Sie nach dem Lösungsvorgang im selben Skript fort. Installieren Sie requests separat, wie im Beispiel angegeben. Ersetzen Sie die Login-URL und die Formulardaten durch die tatsächliche Anfrage Ihrer Anwendung, einschließlich aller erforderlichen Zugangsdaten, CSRF-Token und Sitzungscookies.
# Continue after client.solve(). Install requests separately: pip install requests.
import requests
# This example endpoint accepts the standard reCAPTCHA form field.
# Use your application's real URL, form fields, CSRF token and session.
response = requests.post(
"https://accounts.example.com/login",
data={"g-recaptcha-response": solution["token"]},
headers={
"User-Agent": solution["userAgent"],
"sec-ch-ua": solution["secChUa"],
},
proxies={"http": request["proxy"], "https": request["proxy"]},
timeout=30,
allow_redirects=False,
)
# Inspect the application's response to determine whether it accepted the request.
print("Application HTTP status:", response.status_code)Dieses Beispiel setzt voraus, dass die Anwendung das Token in g-recaptcha-response akzeptiert. Prüfen Sie die tatsächliche Anfrage, statt diesen Feldnamen vorauszusetzen. Wenn das Formular eine bestehende Sitzung benötigt, übermitteln Sie es über diese Sitzung, statt eine neue Anfrage ohne Cookies zu senden.
Behalten Sie die zurückgegebenen Werte für userAgent und secChUa bei und verwenden Sie denselben Proxy wie beim Lösungsvorgang. Ein Wechsel der IP-Adresse oder das Ersetzen durch eine andere Browseridentität kann dazu führen, dass die Anfrage fehlschlägt.
Eine fertige Aufgabe bedeutet, dass eine Lösung generiert wurde, nicht, dass die Anwendung sie akzeptiert hat. Prüfen Sie die Antwort der Anwendung und die daraus entstandene Sitzung; ein HTTP-Status allein belegt keine erfolgreiche Anmeldung. Wenn die Anwendung das Token ablehnt, prüfen Sie die ausgehende Anfrage, bevor Sie für einen weiteren Lösungsvorgang bezahlen: Sie muss solution.token enthalten, nicht die Aufgaben-ID oder ein altes Token. Siehe Diagnose bei abgelehnten Tokens.
Unterbrochenen Lösungsvorgang fortsetzen, ohne eine weitere Aufgabe zu erstellen
Das Beispiel generiert bei jedem Skriptstart eine neue requestId. Speichern Sie diese ID und die ursprüngliche Anfrage vor dem Aufruf von solve, wenn Sie den Vorgang nach einem Prozessneustart fortsetzen müssen. Ein einfaches erneutes Ausführen des Skripts erstellt eine neue logische Anfrage.
- Wenn eine Ausnahme
task_identhält, verwenden Sieget_task, um die Statusabfrage dieser Aufgabe fortzusetzen. Erstellen Sie keine Ersatzaufgabe, nur weil bei der Verbindung eine Zeitüberschreitung aufgetreten ist. - Wenn die Erstellung unterbrochen wurde und Ihnen nur
request_idvorliegt, senden Sie die identische Aufgabenanfrage mit derselbenrequestIderneut. Dadurch wird die vorhandene Aufgabe zurückgegeben; geänderte Aufgabeneingaben bei gleichzeitiger Wiederverwendung der ID führen zu einem Konflikt. - Beenden Sie bei
TaskFailedErrordie Statusabfrage dieser Aufgabe. Prüfen Sie vor einem erneuten Versuch ihre Werte fürerrorCodeunderror; unveränderte ungültige Eingaben werden durch einen weiteren Lösungsvorgang nicht korrigiert. Fehlgeschlagene Lösungsvorgänge werden erstattet.
Das SDK wiederholt die Aufgabenerstellung nicht automatisch. Bei vorübergehenden Fehlern während der Statusabfrage berücksichtigt es jedoch Retry-After innerhalb der Frist für den Lösungsvorgang. Weitere Möglichkeiten zur Steuerung von Wartezeiten und zur Wiederaufnahme finden Sie unter Statusabfragen und Zeitüberschreitungen bei Aufgaben.
Quellen und API-Referenz
Führe deinen ersten Task aus.
Starte mit $5 Workspace-Guthaben.