ERROR_PAGEURL, otomasyonunuz teknik olarak kusursuz göründüğü halde takıldığı sinir bozucu hatalardan biridir: kod çalışıyor, API anahtarınız geçerli, ama çözücü görevi reddediyor. Nedeni neredeyse her zaman aynıdır — gönderdiğiniz pageurl değeri, CAPTCHA'nın tarayıcıda gerçekten yüklendiği adresle birebir eşleşmiyor. CaptchaAI ürettiği token'ı kaynak alan adına (origin) göre doğrular; adres tek karakter bile şaşarsa token geçersiz sayılır. İyi haber şu: bu hatanın kaynağı bellidir ve çoğu zaman tek satırlık bir düzeltmeyle geçer.
ERROR_PAGEURL neden çıkar? En sık görülen nedenler
Hatanın arkasında genelde birkaç küçük URL yanlışından biri vardır. Çoğu vakada sorun kodun mantığında değil, pageurl olarak gönderilen tek bir dizede saklıdır — bu yüzden önce adresi izole edip doğrulamak, saatlerce hata ayıklamaktan hızlıdır. Aşağıdaki tablo, üretimde en çok karşılaşılan nedenleri ve tetikleyen tipik durumu gösterir:
| Neden | Örnek |
|---|---|
| Eksik protokol | example.com (başında https:// yok) |
| Yanlış alan adı | www.example.com ile example.com karışıklığı |
| Yönlendirme sonrası değişen URL | /login formu /auth/login'e yönlendiriliyor |
| SPA rota uyuşmazlığı | JS rotası /app/login, sunucu URL'siyle örtüşmüyor |
| URL kodlama sorunu | Boşluk veya özel karakterler kodlanmamış |
| Farklı alan adından iframe | CAPTCHA bir alt alan adından yükleniyor |
Doğru pageurl'ü nasıl bulursunuz?
Kural: CAPTCHA'nın göründüğü sayfada tarayıcının adres çubuğundaki URL'yi kullanın.
Adres çubuğunda ne yazıyorsa pageurl de aynen o olmalıdır — protokolüyle, alt alan adıyla, yoluyla birlikte. Tahmin etmeyin; kopyalayın. URL'nin sonundaki #bölüm gibi fragment kısımları sunucuya gönderilmez, o yüzden bunları çıkarabilirsiniz. Buna karşılık sayfanın içeriğini belirleyen sorgu parametreleri (?lang=tr gibi) görünür adresin parçasıysa korunmalıdır — bunları silmek yeni bir uyuşmazlık kaynağı yaratır.
# WRONG — incomplete URL
pageurl = "staging.example.com/qa-login"
# WRONG — wrong protocol
pageurl = "http://staging.example.com/qa-login"
# CORRECT — full URL with protocol
pageurl = "https://staging.example.com/qa-login"
# CORRECT — with www if that's what the page uses
pageurl = "https://www.staging.example.com/qa-login"
pageurl'ü göndermeden önce doğrulayın
İdeal çözüm, hatayı API'ye hiç göndermeden önce yerelde yakalamaktır. Küçük bir doğrulama fonksiyonu; protokol var mı, alan adı geçerli mi ve gereksiz #fragment temizlenmiş mi diye kontrol eder:
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://staging.example.com/qa-login#section")
# Returns: "https://staging.example.com/qa-login"
Yönlendirmeleri (redirect) izleyin
Tarayıcıda açtığınız adres ile CAPTCHA'nın sonunda yüklendiği adres farklı olabilir. Özellikle oturum açma sayfalarındaki 301 ve 302 yönlendirmeleri gözünüze çarpmadan gerçekleşir; sunucu isteği sessizce başka bir URL'ye taşıdığında pageurl eski değerinde kalır ve token reddedilir. Son adresi programatik olarak yakalayın:
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://staging.example.com/qa-login"
final = get_final_url(original)
print(f"Final URL: {final}")
# Use final URL as pageurl
SPA (tek sayfa uygulamaları) ile pageurl
SPA'lar tam sayfa yenilemeden URL'yi JavaScript ile değiştirir. Burada belirleyici olan CAPTCHA'nın bulunduğu alan adıdır; formun POST ettiği API uç noktası değil. Adres çubuğunda görünen rotayı gönderin:
# 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://staging.example.com/qa-login"
iframe içinden yüklenen CAPTCHA'lar
CAPTCHA farklı bir alan adındaki iframe içinde görünse bile pageurl her zaman ana sayfanın adresidir — iframe'in src değeri değil. Bu, en çok yanlış yorumlanan durumlardan biridir:
# 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"
Doğrulanmış URL ile doğru gönderim
Önce URL'yi doğrulayın, sonra görevi gönderin. Bu iki adımı tek bir akışta birleştirmek, ekipteki herkesin aynı doğrulanmış adresi göndermesini sağlar ve aynı ERROR_PAGEURL hatasının farklı script'lerde tekrar etmesini önler. Doğru pageurl ile istek şu şekilde görünür:
import requests
# Validate URL first
pageurl = validate_pageurl("https://staging.example.com/qa-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')}")
Hızlı tanı tablosu
Hata devam ediyorsa belirtiye göre nedeni daraltın:
| Belirti | Olası neden | Çözüm |
|---|---|---|
| URL doğru göründüğü halde hata alıyorsunuz | www / www olmayan uyuşmazlığı | Adres çubuğunu birebir kontrol edin |
| URL bazen çalışıyor, bazen başarısız oluyor | Sayfada A/B testi URL'leri var | URL'yi çözüm anında yakalayın |
| Token çözüldü ama site reddetti | pageurl alan adı uyuşmazlığı | Token'ın alan adı, site alan adıyla eşleşmeli |
| Tarayıcıda çalışıyor, kodda başarısız oluyor | Yönlendirme izlenmemiş | get_final_url() kullanın |
| URL'de sorgu parametreleri var | Parametreler gerekli olabilir | Gerekli sorgu parametrelerini ekleyin |
Gerçek bir senaryo: staging ortamında ödeme akışı testi
Türkiye'deki ekiplerin bu hatayla en sık karşılaştığı yer, canlıya çıkmadan önce staging ortamında yürütülen QA testleridir. Örneğin bir e-ticaret ekibi, staging.example.com/qa-login üzerindeki reCAPTCHA'yı otomatik doğrularken load balancer isteği sessizce www.staging.example.com adresine yönlendirir; kod hâlâ eski adresi gönderdiği için token reddedilir ve ERROR_PAGEURL düşer. Çözüm, get_final_url() ile son adresi yakalayıp pageurl olarak onu kullanmaktır.
Aynı desen, alt alan adları arasında gezinen çok adımlı kayıt akışlarında da ortaya çıkar; her adımda adres çubuğunu yeniden okumak güvenli bir alışkanlıktır.
Not: bu tür otomasyonları yalnızca yetkiniz olan, kendi sahip olduğunuz ortamlarda çalıştırın. Kişisel veri içeren sayfalarda test yapıyorsanız KVKK yükümlülüklerini de göz önünde bulundurun.
SSS
ERROR_PAGEURL ile WRONG_GOOGLEKEY aynı şey mi?
Hayır. ERROR_PAGEURL adresle, WRONG_GOOGLEKEY ise sitekey/googlekey değeriyle ilgilidir. İkisi birlikte başarısız oluyorsa önce URL'yi düzeltin, ardından sitekey'i doğrulayın.
http yerine mutlaka https mi kullanmalıyım?
Sayfa hangi protokolle açılıyorsa pageurl de onu içermelidir. Bugün siteler pratikte https üzerinden çalıştığı için http göndermek en yaygın uyuşmazlık nedenlerinden biridir.
www'lu ve www'suz adres neden farklı sonuç veriyor?
Token doğrulaması alan adına duyarlıdır ve www.example.com ile example.com teknik olarak iki ayrı alan adıdır. Adres çubuğunda hangisi görünüyorsa pageurl de tam olarak onunla eşleşmelidir.
Token çözüldü ama site kabul etmiyor, neden?
Çözüm başarılı olsa bile pageurl alan adı sitenin alan adıyla örtüşmüyorsa site token'ı reddeder. Token'ı ürettiğiniz adresle kullandığınız adresin aynı olduğundan emin olun.
Her oturumda değişen URL'leri nasıl yönetirim?
Oturum kimliği veya token içeren adresleri sabit yazmayın. URL'yi otomasyon script'inizde çalışma anında dinamik olarak çıkarın ve gönderimden hemen önce doğrulayın.
İlgili Kılavuzlar
pageurl'ü doğru gönderin, gerisini CaptchaAI halletsin — hemen çözmeye başlayın.