ERROR_CAPTCHA_UNSOLVABLE Nasıl Düzeltilir ve Güvenle Yeniden Denenir

error_captcha_unsolvable - How to Fix ERROR_CAPTCHA_UNSOLVABLE and Retry Safely

Kısa yanıt: ERROR_CAPTCHA_UNSOLVABLE çözücünün görevinizi kabul ettiği, denediği ve bir yanıt üretemediği anlamına gelir. Anahtarınız iyi, kurulumunuz iyi, yalnızca bu tek deneme başarısız oldu. Belgelenen çözüm, yeni bir görev gönderip yeniden denemektir; aynı captcha ID'sini tekrar yoklamak değil. Bu rehber, yeniden yoklamanın neden asla işe yaramadığını, her CAPTCHA türü için hatanın gerçek nedenini ve sonsuza kadar dönmeyen bir yeniden deneme döngüsünü anlatıyor.

Hata ne anlama geliyor ve nereden geliyor

Bir anahtar veya parametre hatasının aksine bu, gönderim anında ortaya çıkmaz. /in.php çağrınız başarılı oldu ve bir ID döndürdü. Hata daha sonra, sonucu almak için /res.php yokladığınızda yüzeye çıkar.

# Submit: this part worked, you got an ID back
curl "http://127.0.0.1:8080/in.php?key=YOUR_API_KEY&method=userrecaptcha&googlekey=YOUR_SITEKEY&pageurl=https://example.com/page-with-recaptcha"
OK|2122988149

# Poll: the attempt finished, and it finished badly
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149"
ERROR_CAPTCHA_UNSOLVABLE

Dolayısıyla bu sıralama size işe yarar bir şey söyler: gönderim dahil her şey doğruydu. Sorun nasıl gönderdiğinizde değil, ne gönderdiğinizdedir.

Aynı ID'yi yeniden denemek neden asla yardımcı olmaz

İki neden var ve ikisi de yapısal.

Birincisi, deneme bitti. O ID için sonuç nihaidir ve tekrar yoklamak ikinci bir deneme başlatmaz. İkincisi, sonuçlar yalnızca bir kez okunabilir. Bir sonucu /res.phpüzerinden okuduğunuzda, o ID'nin size verecek başka bir şeyi kalmaz.

Hata yönetiminiz bir başarısızlıktan sonra aynı ID üzerinde dönmeye devam ederse, zaman aşımınız devreye girene kadar döner ve ardından bir zaman aşımı bildirir; bu da sizi yanlış şeyi ayıklamaya gönderir. Yeniden denemek, /in.php çağrısını tekrar yapıp yeni bir ID almak demektir. Bu, CAPCHA_NOT_READYdurumunun tam tersidir; orada doğru hamle elinizdeki ID'yi yoklamaya devam etmektir.

CAPTCHA türüne göre gerçek nedenler

Resim CAPTCHA'ları: sorun genellikle girdide

Gerçekten çözülemez bir girdinin sık görüldüğü tür resim çözmedir, çünkü pikselleri siz belirlersiniz. Çözücüyü suçlamadan önce dosyayı kontrol edin.

  • Boyut sınırları. 600 kB'ın veya herhangi bir boyutta 1000 pikselin üzeri, bu hata yerine ERROR_TOO_BIG_CAPTCHA_FILESIZE döndürür; ancak bu sınırlara yakın resimler çoğu zaman tüm sayfanın ekran görüntüsüdür.
  • Yanlış bölgeyi kırptınız. Etiketi, kenarlığı veya bir sonraki alanın yarısını içeren bir kırpma, tek başına CAPTCHA'dan çok daha zor bir görüntüdür.
  • Yer tutucuyu kaydettiniz. Resim URL'sini ayrıca istemek çoğu zaman yepyeni ve farklı bir CAPTCHA, süresi dolmuş bir tanesi ya da 1×1 piksel döndürür. Tarayıcının hâlihazırda sahip olduğu baytları yakalayın.
  • Biçim. Bozuk veya beklenmeyen bir biçim ERROR_INVALID_IMAGEverir, hatalı bir data URI ise şunu verir: ERROR_INVALID_BASE64.

Gönderdiğiniz baytları olduğu gibi diske kaydedin ve açın. Tüm resim hatalarının yarısı iki saniyede görülür. görüntü CAPTCHA çözücü sayfası kabul edilen girdi biçimlerini listeliyor: bir dosya yolu, uzak bir URL veya bir data:image/png;base64, URI.

reCAPTCHA: eski sitekey ya da yanlış sayfa URL'si

Önbelleğe alınmış sayfa kaynağından okunan veya bir hazırlık ortamından kopyalanan bir sitekey sorunsuz gönderilir, sonra başarısız olur. Widget'ın gerçekte bulunduğu sayfayla eşleşmeyen bir pageurl için de aynısı geçerlidir; eksik bir şema veya takip etmediğiniz bir yönlendirme dahil.

Enterprise diğer sık görülen nedendir. Site reCAPTCHA Enterprise kullanıyorsa ve siz enterprise bayrağı olmadan gönderirseniz, görev yanlış yapılandırmaya karşı çözülür. v3 için de aynısı: şunu geçin: version, ve varsayılan yerine sitenin gerçek action değerini geçin: verify.

CapSkip'te minimum puan seçeneği yoktur; bu nedenle başka bir servisten kod taşıyorsanız her min_score veya minScore parametresini kaldırın. Bu hatanın nedeni değildir, ama beklediğiniz işi de yapmaz.

Turnstile: challenge sayfaları sitekey'den fazlasını ister

Widget biçimindeki Turnstile bir sitekey ve bir URL alır. Tam bir challenge sayfası ayrıca data (cData değeri) ve pagedata (chlPageData) ister; ikisi de o an sayfadan okunur. Bir challenge sayfasını widget'mış gibi gönderirseniz, çözücünün tamamlayamayacağı bir görev elde edersiniz. Her iki değer de kısa ömürlüdür, bu yüzden göndermeden hemen önce toplayın.

GeeTest: genellikle yanıt, süresi dolmuş bir challenge'dır

The gt değeri site başına sabittir. challenge değeri ise tek kullanımlıktır ve yaklaşık bir dakikada süresi dolar. Bir challenge alır, başka işler yapar ve sonra gönderirseniz, çoktan ölmüş olabilir. Çözmeden hemen önce alın. Ayrıntılar şu sayfada: GeeTest çözücü sayfası.

Gerçekten yeniden deneyen bir döngü

Yeniden gönderin, deneme sayısını sınırlayın ve aralarda bekleyin. Üç deneme makul bir tavandır: bir hedef üç taze gönderimde başarısız oluyorsa girdi yanlıştır ve dördüncüsü bunu düzeltmez.

# pip install capskip
import time
from capskip import CapSkip, ApiException

solver = CapSkip(host="127.0.0.1", port=8080)

def solve_with_retry(sitekey, url, attempts=3):
    for n in range(attempts):
        try:
            # A fresh call means a fresh task, which is the fix.
            return solver.recaptcha(sitekey=sitekey, url=url)
        except ApiException as e:
            if "UNSOLVABLE" not in str(e) or n == attempts - 1:
                raise
            time.sleep(2 ** n)   # 1s, then 2s

token = solve_with_retry("YOUR_SITEKEY", "https://example.com/page-with-recaptcha")
print(token["code"][:40])

Ne yapmadığına dikkat edin: şunu yeniden denemez: ValidationException, çünkü hatalı parametreler her seferinde aynı şekilde başarısız olur; şunu da yeniden denemez: NetworkException, çünkü bu, uygulamaya erişilemediği ve diğer tüm hedeflerin de birazdan başarısız olacağı anlamına gelir.

Node.js'te aynı yapı:

// npm install capskip
const { CapSkip } = require('capskip');

const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });

async function solveWithRetry(sitekey, url, attempts = 3) {
  for (let n = 0; n < attempts; n++) {
    try {
      return await solver.recaptcha(sitekey, url);
    } catch (e) {
      const last = n === attempts - 1;
      if (last || !String(e).includes('UNSOLVABLE')) throw e;
      await new Promise(r => setTimeout(r, 1000 * 2 ** n));
    }
  }
}

Bunun daha az yaşanmasını nasıl sağlarsınız

  • Sitekey'i canlı DOM'dan okuyun, kodunuzdaki bir sabitten değil. Siteler bunları değiştirir.
  • Gerçekten üzerinde bulunduğunuz URL'yi gönderin, yönlendirmelerden sonra ve şema dahil.
  • Kısa ömürlü değerleri en son alın. GeeTest challenge'ları ve Turnstile cData değerleri bir dakikadan kısa sürede bayatlar.
  • Resimleri sıkı kırpın ve sayfanın hâlihazırda yüklediği baytları gönderin.
  • Her hatada captcha ID'sini loglayın. Bu, bir örüntüyü görünür kılar: tek bir kötü hedef mi, yoksa genel bir sorun mu.
  • Önce bilinen çalışan bir sayfaya karşı test edin. Normalde çalışan bir sayfa da başarısız oluyorsa, sorun hedefte değil ortamınızdadır.

Komşu hata kodları

Aşağıdakiler çözülemez bir görevle karıştırılanlardır. Farklı anlamlara gelirler ve farklı çözümler isterler.

KodAnlamıNe yapmalı
CAPCHA_NOT_READYHâlâ üzerinde çalışılıyorAynı ID'yi yoklamaya devam edin
ERROR_INVALID_IMAGEBiçim yanlış veya veri bozukResmi yeniden kaydedin ve baytları kontrol edin
ERROR_TOO_BIG_CAPTCHA_FILESIZE600 kB'ın veya 1000 pikselin üzerindeCAPTCHA'nın kendisine kırpın
ERROR_INVALID_BASE64base64 yükü çözülemiyordata URI önekini kaldırın veya dolguyu düzeltin
ERROR_UPLOADHiç resim verisi gelmediAlan adını ve istek gövdesini kontrol edin
ERROR_GOOGLEKEYSitekey doğrudan reddedildiCanlı sayfadan yeniden okuyun
ERROR_PAGEURLSayfa URL'si eksik veya hatalı biçimlendirilmişŞema dâhil tam URL'yi gönderin

API'nin döndürebileceği her kod, tam anlamıyla birlikte şurada: API dokümantasyonu.

Sık sorulan sorular

Başarısız bir çözüm bana bir şeye mal olur mu?

Hayır. Çözüm başına ücret ve bakiye yoktur, çünkü iş kendi makinenizde yapılır. Yeniden denemek size zaman ve CPU dışında hiçbir şeye mal olmaz; üç denemelik bir döngünün burada makul olmasının nedeni budur.

Bir kez okuduktan sonra sonucu tekrar alabilir miyim?

Hayır. Sonuçlar bir kez okunabilir. Token'ı aldığınız anda saklayın ve aynı ID'nin ikinci kez okunmasını bir kurtarma yolu değil, kodunuzdaki bir hata olarak değerlendirin.

Proxy, çözülemeyen bir resim CAPTCHA'sını düzeltir mi?

Düzeltemez. Proxy'ler yalnızca reCAPTCHA, Turnstile ve GeeTest için geçerlidir, resim çözme için değil. Bir resim görevi tamamen gönderdiğiniz piksellere göre değerlendirilir, bu yüzden bunun yerine kırpmayı düzeltin.

Bir sitedeki her görev başarısız oluyor. Bu yine de bu hata mı?

Genellikle her yerde kullanılan tek bir yanlış sabittir: eski bir sitekey, eksik bir enterprise bayrağı ya da widget olarak gönderilen bir challenge sayfası. Hedefi bir kez düzeltin, tüm küme geçmeye başlasın.

Özet

Şunu error_captcha_unsolvable gönderdiğiniz görev hakkında verilmiş bir karar olarak değerlendirin. Eski ID'yi yoklamayın. Yenisini gönderin, denemeleri üçle sınırlayın ve hata ayıklama zamanını girdilere ayırın: sitekey, sayfa URL'si, kırpma ve çok erken aldığınız kısa ömürlü her şey.

Yerel bir yerel captcha çözücü çalıştırmanın güzel yanı, bunun ucuz bir hata olmasıdır. Kredi yanmaz, hız sınırı tüketilmez ve hangi değerin yanlış olduğunu anlayana kadar aynı görevi istediğiniz kadar yeniden üretebilirsiniz.