BLS başvuru portallarında karşınıza çıkan 3x3'lük görsel ızgara ve yanındaki sayısal talimat kodu, Node.js tabanlı otomasyon akışlarını en sık durduran doğrulama biçimlerinden biridir. İyi haber şu: bu ızgarayı elle çözmek zorunda değilsiniz. Bu rehberde ızgara görsellerini sayfadan çıkarıp CaptchaAI API'sine gönderiyor, dönen hücre indeksleriyle doğru kutucukları tıklıyorsunuz — dört adımda, tamamı Node.js ile.
BLS, CaptchaAI'nin bls yöntemiyle genel kullanıma açık (GA) olarak desteklediği türlerden biridir; ekstra bir eklentiye ya da tarayıcı numarasına gerek yoktur. Aşağıdaki kod tarayıcı tarafında Puppeteer, HTTP tarafında ise yalnızca axios kullanır; her ikisi de tek satırlık npm install ile kurulur ve örnekler olduğu gibi kopyalanabilir.
BLS CAPTCHA nasıl çalışır?
BLS doğrulaması, soldan sağa ve yukarıdan aşağıya numaralandırılmış 3 × 3'lük bir hücre ızgarası gösterir:
1 | 2 | 3
---------
4 | 5 | 6
---------
7 | 8 | 9
Izgaranın yanındaki sayısal talimat (örneğin "664") hangi hücrelerin seçileceğini kodlar. Siz dokuz hücre görselini ve bu talimat kodunu CaptchaAI'ye gönderirsiniz; API de eşleşen hücrelerin indekslerini (örneğin [1, 4, 7, 8]) döndürür. Yani buradan dönen şey bir token değil, tıklamanız gereken hücre numaralarıdır — reCAPTCHA veya Turnstile akışlarından temel fark budur.
Başlamadan önce: gereksinimler
| Öğe | Değer |
|---|---|
| CaptchaAI API anahtarı | captchaai.com panelinden |
| Node.js | 14+ |
| Kütüphane | axios (npm install axios) |
API anahtarınızı CaptchaAI panelinizden alırsınız; hesabınızda çözümleri karşılayacak bakiye bulunduğundan emin olun.
Adım 1: Izgara görsellerini çıkarın
Önce sayfadaki talimat kodunu ve dokuz hücre görselini toplayın. Görseller data: URI biçiminde gelmiyorsa her birini indirip base64'e çevirin:
const axios = require('axios');
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com/bls-form');
// Get instruction code
const instruction = await page.$eval('.bls-instruction', (el) => el.textContent.trim());
// Get all 9 cell image URLs and convert to base64
const cellImages = await page.$$eval('.bls-grid img', (imgs) =>
imgs.map((img) => img.src)
);
const images = [];
for (const src of cellImages) {
if (src.startsWith('data:')) {
images.push(src);
} else {
const { data } = await axios.get(src, { responseType: 'arraybuffer' });
const b64 = Buffer.from(data).toString('base64');
images.push(`data:image/png;base64,${b64}`);
}
}
Adım 2: CaptchaAI'ye gönderin
Dokuz görseli ve talimat kodunu bls yöntemiyle in.php uç noktasına gönderin. Yanıttaki request alanı, sonucu sorgularken kullanacağınız görev kimliğini (task ID) taşır:
const API_KEY = 'YOUR_API_KEY';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const params = new URLSearchParams({
key: API_KEY,
method: 'bls',
instructions: instruction,
json: '1',
});
// Add all 9 images
images.forEach((img, i) => {
params.append(`image_base64_${i + 1}`, img);
});
const { data: submitData } = await axios.post(
'https://ocr.captchaai.com/in.php',
params.toString()
);
if (submitData.status !== 1) throw new Error(submitData.request);
const taskId = submitData.request;
console.log(`Task submitted: ${taskId}`);
Adım 3: Sonucu sorgulayın
Görev kimliğini elde ettikten sonra res.php uç noktasını periyodik olarak sorgulayın. CaptchaAI çözümü hazırladığında status alanı 1 döner ve request alanı seçilecek hücre indekslerini içerir. Çözüm hazır değilse API CAPCHA_NOT_READY döndürür — bu bir hata değil, yalnızca beklemeniz gerektiğinin işaretidir:
await sleep(5000);
let selectedCells;
for (let i = 0; i < 30; i++) {
const { data: pollData } = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: 1 },
});
if (pollData.status === 1) {
selectedCells = JSON.parse(pollData.request);
console.log('Selected cells:', selectedCells);
break;
}
if (pollData.request !== 'CAPCHA_NOT_READY') {
throw new Error(pollData.request);
}
await sleep(5000);
}
Döngü, her 5 saniyede bir olmak üzere en fazla 30 kez sorgular; bu, üretim için makul bir zaman aşımı üst sınırıdır.
Adım 4: Doğru hücreleri tıklayın
Elinizde hücre indeksleri olduğunda geri kalanı standart tarayıcı otomasyonudur: her indekse karşılık gelen görseli tıklayın ve formu gönderin:
// Click each identified cell
const gridCells = await page.$$('.bls-grid img');
for (const cellNum of selectedCells) {
await gridCells[cellNum - 1].click();
}
// Submit the form
await page.click('.bls-submit');
console.log(`Solved: clicked cells ${JSON.stringify(selectedCells)}`);
await browser.close();
Beklenen çıktı:
Selected cells: [1, 4, 7, 8]
Solved: clicked cells [1,4,7,8]
Üretimde sağlamlık: sorgulama, zaman aşımı ve maliyet
Tek seferlik bir betik bu haliyle çalışır, ama üretime taşırken birkaç noktaya dikkat edin. Sorgulama döngüsüne her zaman bir üst sınır koyun (yukarıdaki 30 deneme gibi) ki bir görev takıldığında betiğiniz sonsuza kadar beklemesin. Ağ kaynaklı geçici hatalarda isteği birkaç kez yeniden deneyin; sabit aralık yerine üstel geri çekilme (exponential backoff) kullanmak, API yoğunken gereksiz yükü azaltır. ERROR_ZERO_BALANCE gibi durumları yakalayıp erken bir uyarıya dönüştürün — bakiye bitince tüm işçileriniz sessizce durur. Her görev için gönderdiğiniz talimat kodunu ve dönen hücre indekslerini loglayın; bir ızgara yanlış çözüldüğünde sorunu ancak bu kayıtlarla geriye dönük izleyebilirsiniz.
Yoğun akışlarda birden fazla ızgarayı eşzamanlı çözmeniz gerekiyorsa plan seçiminiz belirleyici olur. CaptchaAI çözüm başına değil, eşzamanlı thread başına ücretlendirir ve her plan o ay için thread başına sınırsız çözüm içerir. Tek bir otomasyon işçisi için BASIC ($15/ay, 5 thread) yeterlidir; paralel işçi sayınız arttıkça STANDARD ($30/ay, 15 thread) ya da ADVANCE ($90/ay, 50 thread) daha uygun olur. Fiyatların USD üzerinden ve aylık sabit olması, TL kur dalgalanmasıyla uğraşan ekipler için öngörülebilir bir maliyet demektir: çözüm hacminiz artsa bile faturanız thread sayınıza bağlı kalır.
Son bir hatırlatma: Bu otomasyonu yalnızca erişim yetkiniz olan ve şartları buna izin veren akışlarda kullanın. Kişisel veri işlediğinizde KVKK yükümlülüklerinizin geçerli olduğunu unutmayın.
Sık karşılaşılan hatalar
| Hata | Sebep | Çözüm |
|---|---|---|
ERROR_BAD_PARAMETERS |
Eksik görsel veya talimat | 9 görselin tamamını ve talimat kodunu gönderin |
CAPCHA_NOT_READY |
Çözüm hâlâ işleniyor | Her 5 saniyede bir sorgulamaya devam edin |
ERROR_ZERO_BALANCE |
Bakiye yok | CaptchaAI hesabınıza bakiye yükleyin |
Sık sorulan sorular
BLS CAPTCHA çözümü ne kadar sürüyor?
Genellikle 5–15 saniye. Süre, sorgulama aralığınıza ve o andaki API yüküne göre bir miktar değişebilir.
CaptchaAI neden token değil hücre indeksleri döndürüyor?
Çünkü BLS bir görsel ızgara türüdür: doğrulamayı tamamlamak için bir token değil, tıklanacak hücreler gerekir. API [1, 4, 7, 8] gibi bir indeks dizisi döndürür ve siz karşılık gelen kutucukları tıklarsınız.
Hangi CaptchaAI planı BLS otomasyonu için yeterli?
Tek bir işçi çalıştırıyorsanız BASIC ($15/ay, 5 thread) başlamak için yeterlidir. Paralel işçi sayınız arttıkça STANDARD ($30/ay, 15 thread) veya ADVANCE ($90/ay, 50 thread) tercih edin; ücretlendirme eşzamanlı thread başınadır ve thread başına çözüm sayısı sınırsızdır.
CAPCHA_NOT_READY yanıtı sürekli dönüyorsa ne yapmalıyım?
Bu bir hata değil, çözümün henüz hazır olmadığını belirten normal bir yanıttır. Her 5 saniyede bir sorgulamaya devam edin; buna rağmen sonuç gelmiyorsa dokuz görselin ve talimat kodunun eksiksiz gönderildiğini kontrol edin.
BLS CAPTCHA'yı başka dillerde de çözebilir miyim?
Evet. API akışı dilden bağımsızdır; yalnızca HTTP isteklerini o dilde yaparsınız. Python örneği için aşağıdaki İlgili kılavuzlar bölümüne bakabilirsiniz.