Troubleshooting

ERROR_PAGEURL: URL Uyuşmazlığı Sorun Giderme Kılavuzu

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.

Bu makale için yorumlar devre dışı bırakılmıştır.