ERROR_PAGEURL ist in den meisten Fällen in wenigen Minuten erledigt: Der Fehler signalisiert lediglich, dass die im Parameter pageurl übergebene Adresse nicht zu der Seite passt, auf der das CAPTCHA tatsächlich erscheint. Der Solver prüft jedes Token gegen die Ursprungsdomäne – weicht Protokoll, Domain oder Pfad ab, weist die API die Anfrage zurück, bevor überhaupt ein Lösungsversuch startet. Dieser Leitfaden zeigt die typischen Ursachen, eine Validierungsfunktion in Python und eine Diagnosetabelle, mit der Sie den Fehler systematisch eingrenzen.
Drei Angaben müssen dabei zusammenpassen:
- Protokoll –
https://gehört zwingend an den Anfang der Adresse. - Domain – exakt so, wie sie in der Adressleiste steht, inklusive oder ohne
www. - Pfad – die real aufgerufene Route, und zwar nach allen Weiterleitungen.
Häufige Ursachen für ERROR_PAGEURL
Sechs Konstellationen lösen den Fehler in der Praxis am häufigsten aus:
| Ursache | Beispiel |
|---|---|
| Fehlendes Protokoll | example.com statt https://example.com |
| Falsche Domain | www.example.com statt example.com |
| URL durch Weiterleitung geändert | Formular unter /login landet nach Redirect auf /auth/login |
| Abweichende SPA-Route | JS-Route /app/login entspricht nicht der Server-URL |
| Fehlerhafte URL-Kodierung | Leerzeichen oder Sonderzeichen sind nicht kodiert |
| Iframe von fremder Domain | CAPTCHA wird aus einer Subdomain geladen |
Allen Fällen liegt dasselbe Prinzip zugrunde: Entscheidend ist die Adresse, unter der das CAPTCHA im Browser sichtbar ist – nicht der Endpunkt, an den Ihr Formular die Daten sendet, und nicht die interne Route Ihres Frameworks.
Die richtige pageurl ermitteln
Faustregel: Verwenden Sie die Adresse aus der Browserleiste, unter der das CAPTCHA sichtbar ist.
Öffnen Sie die betreffende Seite im Browser, warten Sie, bis das CAPTCHA gerendert ist, und kopieren Sie die vollständige Adresse inklusive https://. Genau dieser Wert gehört in pageurl:
# WRONG — incomplete URL
pageurl = "example.com/login"
# WRONG — wrong protocol
pageurl = "http://example.com/login"
# CORRECT — full URL with protocol
pageurl = "https://example.com/login"
# CORRECT — with www if that's what the page uses
pageurl = "https://www.example.com/login"
Ob mit oder ohne www entscheidet die Seite selbst – übernehmen Sie exakt die Schreibweise, die im Browser steht, statt eine Variante zu raten.
pageurl vor dem Absenden validieren
Ein kurzer Validierungsschritt fängt die meisten Fehler ab, bevor die Anfrage die API erreicht. Die folgende Funktion stellt sicher, dass ein Protokoll vorhanden ist, entfernt das Fragment (den #-Anker, der ohnehin nicht an den Server übertragen wird) und behält notwendige Query-Parameter bei:
from urllib.parse import urlparse
def validate_pageurl(url):
"""Validate pageurl before API submission."""
parsed = urlparse(url)
if not parsed.scheme:
raise ValueError(f"Missing protocol: {url}. Use https://")
if parsed.scheme not in ("http", "https"):
raise ValueError(f"Invalid protocol: {parsed.scheme}")
if not parsed.netloc:
raise ValueError(f"Missing domain: {url}")
# Remove fragment (hash) — not sent to server
clean = f"{parsed.scheme}://{parsed.netloc}{parsed.path}"
if parsed.query:
clean += f"?{parsed.query}"
return clean
# Usage
url = validate_pageurl("https://example.com/login#section")
# Returns: "https://example.com/login"
Bauen Sie diesen Aufruf fest in Ihre Übermittlungslogik ein – so scheitert eine fehlerhafte URL sofort mit einer verständlichen Meldung, statt später als anonymes ERROR_PAGEURL zurückzukommen.
Hinweis: Rufen Sie
validate_pageurl()unmittelbar vor jeder Übermittlung auf, nicht nur einmal beim Start. Dynamisch erzeugte Adressen ändern sich zur Laufzeit, und nur die Prüfung direkt vor dem Absenden fängt diese Fälle zuverlässig ab.
Weiterleitungen richtig verfolgen
Funktioniert eine URL im Browser, schlägt aber im Skript fehl, steckt fast immer eine Weiterleitung dahinter. Der Browser folgt Redirects automatisch; Ihr Code muss das ebenfalls tun und anschließend die finale Adresse verwenden:
import requests
def get_final_url(url):
"""Follow redirects to get the actual page URL."""
resp = requests.get(url, allow_redirects=True, timeout=15)
return resp.url
# If the login page redirects
original = "https://example.com/login"
final = get_final_url(original)
print(f"Final URL: {final}")
# Use final URL as pageurl
Typisches DACH-Szenario: www- und Sprachpräfix-Weiterleitungen
Viele im DACH-Raum betriebene Portale – etwa Termin-, Kunden- oder Behördenportale – leiten anonyme Aufrufe automatisch auf eine www-Variante oder auf ein Sprachpräfix wie /de/ um. Ein Aufruf von https://example.com/login landet dann real auf https://www.example.com/de/login, und genau diese Zieladresse erwartet der Solver. Wenn Sie etwa ein Terminportal für Visa- oder Behördenanträge automatisieren, prüfen Sie zuerst mit get_final_url(), wohin die Seite tatsächlich auflöst, und übergeben erst das Ergebnis als pageurl. Halten Sie sich dabei an die Nutzungsbedingungen des jeweiligen Portals und die datenschutzrechtlichen Vorgaben (DSGVO), insbesondere wenn personenbezogene Daten im Spiel sind.
Single-Page-Applications (SPAs) korrekt behandeln
SPAs ändern die URL per JavaScript, ohne die Seite vollständig neu zu laden. Maßgeblich ist die Domain, unter der das CAPTCHA angezeigt wird – nicht der API-Endpunkt, an den das Formular absendet:
# For SPAs, use the domain root + the route shown in the address bar
# NOT the API endpoint that the form submits to
# WRONG — API endpoint
pageurl = "https://api.example.com/v1/auth/login"
# CORRECT — the page URL shown in browser
pageurl = "https://example.com/login"
Frameworks wie React oder Vue verwalten das Routing clientseitig; die sichtbare Adresse in der Leiste ist trotzdem die richtige Referenz.
In Iframes eingebettete CAPTCHAs
Lädt ein CAPTCHA in einem Iframe von einer anderen Domain, ist die src des Iframes irrelevant. Verwenden Sie immer die Adresse der Hauptseite, auf der der Iframe eingebettet ist:
# If the CAPTCHA is on the MAIN page
pageurl = "https://example.com/register" # Main page URL
# If the CAPTCHA is in an IFRAME with a different domain
# Still use the main page URL, not the iframe src
pageurl = "https://example.com/register"
# NOT: "https://captcha-frame.example.com/challenge"
Korrekte Übermittlung an die API
Sobald die URL validiert ist, übergeben Sie sie zusammen mit googlekey an den in.php-Endpunkt. Der Aufruf zeigt das Muster für reCAPTCHA; für Cloudflare Turnstile passen Sie lediglich method und den Sitekey-Parameter an:
import requests
# Validate URL first
pageurl = validate_pageurl("https://example.com/login")
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": pageurl,
"json": 1,
})
result = resp.json()
if result.get("status") == 1:
print(f"Task ID: {result['request']}")
else:
print(f"Error: {result.get('request')}")
Schnelle Fehlerdiagnose
Hilft die Validierung allein nicht weiter, grenzen Sie das Problem mit dieser Tabelle ein:
| Problem | Ursache | Lösung |
|---|---|---|
| Fehler trotz korrekt aussehender URL | Konflikt zwischen www und Nicht-www | Adressleiste exakt prüfen und übernehmen |
| URL funktioniert mal, mal nicht | Seite nutzt A/B-Test-URLs | URL zum Zeitpunkt der Lösung erfassen |
| Token gelöst, aber von der Seite abgelehnt | Domain der pageurl weicht ab | Token-Domain muss der Site-Domain entsprechen |
| Funktioniert im Browser, scheitert im Code | Weiterleitung nicht verfolgt | get_final_url() verwenden |
| URL enthält Query-Parameter | Parameter sind eventuell erforderlich | Nötige Query-Parameter beibehalten |
Häufige Fragen
Warum erscheint ERROR_PAGEURL, obwohl die Seite im Browser einwandfrei lädt?
Meist folgt der Browser einer Weiterleitung, Ihr Skript aber nicht. Ermitteln Sie mit get_final_url() die tatsächliche Zieladresse und verwenden Sie diese als pageurl – nicht die ursprünglich aufgerufene URL.
Spielt der Pfad eine Rolle oder genügt die Domain?
Für die Token-Validierung ist die Domain der entscheidende Teil. Geben Sie den vollständigen Pfad dennoch an, da manche Seiten die komplette URL prüfen – so vermeiden Sie unnötige Fehlschläge.
Wie gehe ich mit URLs um, die sich pro Sitzung ändern?
Extrahieren Sie die Adresse zur Laufzeit aus Ihrem Automatisierungsskript. Schreiben Sie niemals URLs fest ein, die Sitzungs-IDs oder Token enthalten, denn diese sind beim nächsten Aufruf bereits ungültig.
Das Token wurde gelöst, aber die Seite lehnt es ab – woran liegt das?
Dann stimmt die Domain der pageurl nicht mit der Domain überein, gegen die die Zielseite das Token prüft. Achten Sie besonders auf www gegenüber Nicht-www sowie auf Sprach- oder Regionspräfixe im Pfad.
Beeinflusst ERROR_PAGEURL die Abrechnung meiner Threads?
Nein. CaptchaAI rechnet pro gleichzeitigem Thread ab, nicht pro Anfrage oder Fehlversuch. Eine wegen ERROR_PAGEURL abgewiesene Übermittlung startet keinen Lösungsvorgang und belegt keinen Thread über den Moment der Anfrage hinaus.
Verwandte Leitfäden
pageurl sauber setzen – CAPTCHAs mit CaptchaAI lösen.