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

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_FILESIZEdö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.
| Kod | Anlamı | Ne yapmalı |
|---|---|---|
CAPCHA_NOT_READY | Hâlâ üzerinde çalışılıyor | Aynı ID'yi yoklamaya devam edin |
ERROR_INVALID_IMAGE | Biçim yanlış veya veri bozuk | Resmi yeniden kaydedin ve baytları kontrol edin |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | 600 kB'ın veya 1000 pikselin üzerinde | CAPTCHA'nın kendisine kırpın |
ERROR_INVALID_BASE64 | base64 yükü çözülemiyor | data URI önekini kaldırın veya dolguyu düzeltin |
ERROR_UPLOAD | Hiç resim verisi gelmedi | Alan adını ve istek gövdesini kontrol edin |
ERROR_GOOGLEKEY | Sitekey doğrudan reddedildi | Canlı sayfadan yeniden okuyun |
ERROR_PAGEURL | Sayfa 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.
