logo
bars

Görsel CAPTCHA (ComplexImage)
ve CapMonster Cloud

CAPTCHA çözümü, siteye kurulumu ve testleri.
Captcha veya başka bir koruma katmanı olan bir site devraldınız ama kaynak koda erişemiyor musunuz? O zaman hangi çözümün kurulu olduğunu, doğru ayarlanıp ayarlanmadığını ve nasıl test edileceğini bilmek istersiniz.

Bu makalede tüm önemli sorulara cevap vermeye çalıştık. Bir problemi çözmeye başlamanın ilk adımı, hangi koruma sisteminin kullanıldığını belirlemektir. Bunun için, görsel örneklerin ve neyle karşı karşıya olduğunuzu hızlıca anlamanıza yardımcı olabilecek temel işaretlerin yer aldığı popüler captcha ve anti-bot koruma sistemleri listesine başvurabilirsiniz.

Sitenizde ComplexImage kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, ComplexImage sisteminin entegrasyonuna ilişkin kılavuzu da bulabilir ve böylece sitenizde nasıl çalıştığını tamamen anlayabilirsiniz. Bu da yalnızca mevcut korumayı anlamanıza değil, aynı zamanda bakımını doğru şekilde planlamanıza da yardımcı olur.

Görsel CAPTCHA nedir
Görsel CAPTCHA nedir
Görsel CAPTCHA, kullanıcıların görüntüleri analiz ederek bir görev gerçekleştirmesini gerektiren bir CAPTCHA türüdür. Genellikle sistem, belirli bir koşulu karşılayan görüntüleri seçmeyi, nesneleri saymayı, bir nesnenin doğru konumunu belirlemeyi veya başka bir görsel işlem gerçekleştirmeyi ister. Metin tabanlı CAPTCHA'dan farklı olarak, kullanıcı yalnızca resimdeki karakterleri yazmak yerine görsel bilgileri yorumlama ve mantıksal işlemleri gerçekleştirme yeteneği test edilir. Bu, otomatik tanımayı zorlaştırır ve kayıt, giriş ve diğer kritik site noktalarını botlara karşı daha etkili şekilde korur.

CapMonster Cloud ile Görsel CAPTCHA nasıl çözülür

Tencent CAPTCHA ile formları test ederken, CAPTCHA’nın doğru şekilde çalıştığını ve düzgün entegre edildiğini doğrulama ihtiyacı doğabilir.
Sitenize eklenen CAPTCHA’yı manuel olarak test edebilirsiniz:
  • Formun bulunduğu sayfayı açın ve CAPTCHA’nın görüntülendiğinden emin olun.
  • CAPTCHA’yı çözmeden formu göndermeyi deneyin — sunucu hata vermelidir.
  • CAPTCHA doğru şekilde çözüldükten sonra form hatasız gönderilmelidir.
Otomatik CAPTCHA çözümü için CapMonster Cloud gibi özel servisleri kullanabilirsiniz — bu araç, CAPTCHA parametrelerini alır, kendi sunucularında işler ve çözümü döndürür; örneğin tıklama koordinatları veya sayılar, kullanıcı müdahalesi olmadan doğrulama için kullanılabilir.

CapMonster Cloud API ile çalışma genellikle şu adımlardan oluşur:

Görev oluşturmaGörev oluşturma
arrow
API isteği göndermeAPI isteği gönderme
arrow
Sonucu almaSonucu alma
arrow
Token'ı sayfaya yerleştirmeToken'ı sayfaya yerleştirme
arrow
Hazır kütüphaneler ile görsel CAPTCHA tanıma
CapMonster Cloud servisi, Python, JavaScript (Node.js) ve C# dillerinde hazır kütüphaneler sağlar.
Python
JavaScript
C#
Yanıtın girilmesi ve form gönderimi
Node.js örneği, web sayfanızdaki CAPTCHA’yı çözmek için tam döngüyü gösterir. Yaklaşımlar: HTML ve koruma sistemi parametrelerini almak için HTTP isteği yapın, yanıtı gönderin ve sonucu işleyin. Veya aşağıdaki örnekte olduğu gibi otomasyon araçları (Playwright) kullanın — sayfayı açın, doğrulamanın tamamlanmasını bekleyin, CapMonster Cloud ile parametreleri gönderin, sonucu alın, ilgili alana yerleştirin (test için doğru veya yanlış veriler kullanılabilir) ve sonucu kontrol edin.

// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, ComplexImageTaskRecognitionRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY";
const TARGET_URL = "https://example.com/captcha-page";

async function solveComplexImageTaskPlaywright() {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto(TARGET_URL);

    // CAPTCHA görüntüsünü bulun
    const captchaHandle = await page.$('#captcha'); // gerçek seçici ile değiştirin
    const captchaBase64 = await captchaHandle.evaluate(img => {
        const canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;
        const ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0);
        return canvas.toDataURL('image/png').split(',')[1];
    });

    console.log("Captcha base64:", captchaBase64.substring(0, 50) + "...");

    const cmcClient = CapMonsterCloudClientFactory.Create(
        new ClientOptions({ clientKey: API_KEY })
    );

    // CAPTCHA’yı tanımaya gönder
    const citRecognitionRequest = new ComplexImageTaskRecognitionRequest({
        imagesBase64: [captchaBase64],
        metaData: { Task: 'oocl_rotate' } // CAPTCHA tipinizi değiştirin
    });

    const result = await cmcClient.Solve(citRecognitionRequest);
    console.log("Solution received:", result);

    // Çözümün işlenmesi
    const solution = result.solution;

    if (!solution) {
        console.error("No solution received");
        return;
    }

    if (solution.metadata?.AnswerType === "Coordinate") {
        // Koordinatlı CAPTCHA
        const box = await captchaHandle.boundingBox();
        for (const point of solution.answer) {
            const clickX = box.x + point.X;
            const clickY = box.y + point.Y;
            console.log(`Clicking at: (${clickX}, ${clickY})`);
            await page.mouse.click(clickX, clickY);
        }
    } else if (solution.metadata?.AnswerType === "Grid") {
        // Grid CAPTCHA (true/false dizisi)
        const box = await captchaHandle.boundingBox();
        const gridItems = await page.$$('#captcha_grid div'); // grid eleman seçicilerini değiştirin
        const answers = solution.answer;

        for (let i = 0; i < answers.length; i++) {
            if (answers[i] && gridItems[i]) {
                const itemBox = await gridItems[i].boundingBox();
                const clickX = itemBox.x + itemBox.width / 2;
                const clickY = itemBox.y + itemBox.height / 2;
                console.log(`Clicking grid item ${i} at: (${clickX}, ${clickY})`);
                await page.mouse.click(clickX, clickY);
            }
        }
    } else {
        console.warn("Unknown captcha solution type:", solution.metadata?.AnswerType);
    }

    // Onay butonuna tıklayın (varsa)
    await page.click('#submit_button'); // gerçek buton seçici ile değiştirin

    console.log("Captcha solved.");
}

solveComplexImageTaskPlaywright().catch(console.error);
  
Görsel CAPTCHA’yı sitenize bağlama
CAPTCHA’nın sitenizde nasıl çalıştığını güvenle anlamak, doğrulama mantığını çözmek veya yeniden yapılandırmak için bu bölümü incelemenizi öneririz. Genel entegrasyon sürecini anlatır ve tüm detayları hızlıca anlamanıza yardımcı olur.

1. CAPTCHA’nın sunucuda oluşturulması.

  • Tek bir resim veya bir görüntü ızgarası oluşturulur.
  • Botlara karşı korumak için gürültü, kayma ve rastgele öğeler eklenir.
  • Benzersiz bir captchaId oluşturulur ve doğru çözüm saklanır (hafıza, veritabanı veya önbellek).

2. CAPTCHA’nın kullanıcıya iletilmesi

  • Sunucu kullanıcıya captchaId ve resmi (base64 veya URL) gönderir.
  • Kullanıcı CAPTCHA’yı görüntüler, örn: <img> veya bir ızgara <div> ile talimatlar.
Kullanıcı tarafı örneği (HTML + JS)Kullanıcı tarafı örneği (HTML + JS)
arrow

3. Kullanıcının yanıtı girmesi

  • Kullanıcı metin girer, resimlere tıklar veya nesneyi döndürür.
  • Kullanıcı tarafı yanıtı uygun yapıda oluşturur:
    • Metin CAPTCHA → string
    • Izgara → true/false dizisi
    • Koordinatlar → {X, Y} dizisi

4. Yanıtın sunucuya gönderilmesi:

  • Kullanıcı POST ile captchaId ve yanıt (answer) gönderir.
  • Tekrar kullanım koruması için oturum tokeni iletilebilir.

5. Sunucuda doğrulama

  • Sunucu captchaId ile CAPTCHA oturumunu bulur.
  • Kullanıcı yanıtını doğru çözüm ile karşılaştırır.
  • success: true/false döndürür.
  • Başarısızsa CAPTCHA güncellenebilir.
Sunucu tarafı örneğiSunucu tarafı örneği
arrow

6. Sonraki adımlar

  • CAPTCHA başarılı → korumalı işlem (form, kayıt vb.) izin verilir.
  • CAPTCHA başarısız → yeni CAPTCHA oluştur, deneme sayısı sınırlandırılabilir.

Ek

  • Oturumlar için TTL (yaşam süresi) kullanın, otomatik sona erme sağlar.
  • Görüntüleri önbelleğe alın ve geçici URL’ler kullanın.
  • Mobil cihazlarda tıklama ve dokunma işlevselliğini sağlayın.
  • Hataları ve analitiği kaydedin, kullanıcı deneyimini ve bot korumasını geliştirin.
Background
Olası hatalar ve hata ayıklama
Bug Icon
Görsel CAPTCHA yüklenmiyor
(Boş ızgara, bozuk görseller, 404/500 hataları, base64 sorunları) — sunucunun görselleri doğru şekilde oluşturduğunu, base64 verilerinin bozuk olmadığını, görsel formatının tarayıcı tarafından desteklendiğini ve istemcinin geçerli bir captchaId aldığını kontrol edin.
Bug Icon
Kullanıcı tıklamaları işlenmiyor
(Hücreler seçilmiyor veya yanıt boş) — tıklama koordinatlarının veya indekslerinin sunucuya gönderildiğinden, verilerin doğru şekilde serileştirildiğinden ve mobil cihazlarda dokunma olaylarının desteklendiğinden emin olun.
Bug Icon
Doğru tıklamalara rağmen captcha geçmiyor
Doğrulamadan önce captcha’nın yeniden oluşturulmadığını, doğru yanıtın her oturum için ayrı ayrı saklandığını, yanıt formatının beklenenle eşleştiğini ve captcha TTL’sinin süresinin dolmadığını kontrol edin.
Bug Icon
CAPTCHA süresi doldu
Kullanıcı CAPTCHA’yı çözmekte gecikirse TTL’yi artırın, yeni denemede CAPTCHA’yı güncelleyin ve kullanıcıyı resimleri yeniden yüklemesi gerektiği konusunda bilgilendirin.
Korumanın dayanıklılığını test etme
Entegrasyondan sonra sistemin gerçekten otomatik işlemleri engellediğinden emin olun.
Güvenlik ve optimizasyon önerileri
Doğru CAPTCHA yanıtını <b>sadece sunucuda</b> saklayın (hafıza, Redis veya DB), istemciye asla göndermeyin.
Benzersiz CAPTCHA ID’leri (<b>captchaId</b>) kullanın.
Bir CAPTCHA çözme deneme sayısını sınırlayın.
Görüntü ve tıklamaları iletirken her zaman <b>HTTPS</b> kullanın.
Görüntüleri önbelleğe alın ve mümkünse geçici URL’ler kullanın.
Oluşturma ve doğrulama hatalarını kaydedin (zaman, IP/fingerprint, reddetme nedeni).
CAPTCHA mekaniklerini düzenli olarak güncelleyin (görüntü seti, ızgara boyutu/yapısı, görev türleri).
Sonuç

Siteye önceden kurulmuş CAPTCHA veya başka bir koruma sistemi ile karşılaşırsanız ve koda erişiminiz yoksa endişelenmeyin! Teknolojiyi belirlemek nispeten kolaydır. Doğru çalışmayı test etmek için CapMonster Cloud’u izole test ortamında kullanabilirsiniz; token işleme ve doğrulama mantığının doğru çalıştığını doğrular.

Görsel CAPTCHA için sistemi tanıyın, davranışını inceleyin ve korumanın işlevsel olduğunu doğrulayın. Bu makalede görsel CAPTCHA (ComplexImage) tespit etme ve entegrasyon veya yeniden yapılandırma yollarını gösterdik, böylece korumayı yönetebilir ve izleyebilirsiniz.

Conclusion
Faydalı bağlantılar
DocIconCapMonster Cloud Dokümantasyonu (ComplexImage)DocIconKendi CAPTCHA’nızı oluşturma rehberiDocIconCapMonster Cloud kaydı