API Tutorials

Matematik CAPTCHA CaptchaAI calc Parametresi ile Çözme

Matematik CAPTCHA'larında asıl iş denklemi okumak değil, sonucu hesaplamaktır — ve bu hesabı elle yapmanıza gerek yok. CaptchaAI'nin görüntü/OCR çözücüsüne bir gönderimde calc=1 eklediğinizde motor görüntüdeki aritmetiği kendisi çözer ve size doğrudan sayısal yanıtı döndürür: "3+7" değil, "10". Bu, formu otomatik dolduran bir betikte tek satırlık bir fark yaratır; ifadeyi ayrıştırıp kendiniz hesaplamak zorunda kalmazsınız. Bu rehberde bir görevi in.php üzerinden nasıl göndereceğinizi, sonucu res.php ile nasıl sorgulayacağınızı ve ondalık, negatif ya da metin tabanlı denklemler gibi uç durumları nasıl yöneteceğinizi çalışan Python örnekleriyle adım adım göreceksiniz.

calc parametresi ne işe yarar?

Bir matematik CAPTCHA gönderiminde çözücünün davranışını tek bir alan belirler: calc. Varsayılan değeri 0'dır ve görüntüdeki ifadeyi olduğu gibi metin olarak geri verir; yani "3+7" alırsınız ve hesabı kendiniz yaparsınız. Değeri 1 yaptığınızda ise sunucu aritmetiği kendisi çözer ve yalnızca sonucu döndürür. Buna ek olarak numeric=1 eklemek, beklenen yanıtın bir sayı olduğunu belirtir; bu, OCR motorunun harf yerine rakam okumasına yardımcı olur ve yanlış karakter okumalarını azaltır. İki değerin davranışı şöyle özetlenebilir:

Hesaplama Değeri Davranış
0 (varsayılan) Metni olduğu gibi döndürür (ör. "3+7")
1 Sonucu hesaplar ve döndürür (örn. "10")

Temel matematik CAPTCHA çözümü

Aşağıdaki fonksiyon tam döngüyü kapsar: base64 kodlu görüntüyü calc=1 ve numeric=1 ile in.php uç noktasına gönderir, yanıttaki görev kimliğini alır ve sonuç hazır olana kadar res.php uç noktasını periyodik olarak sorgular. İlk sorgudan önce yaklaşık 8 saniye beklemek OCR çözümleri için makul bir başlangıçtır; ardından her denemede 5 saniye aralık bırakmak sunucuyu gereksiz yere yormaz. Yanıt CAPCHA_NOT_READY dönerken sorgulamayı sürdürür, başka bir hata kodunda ise döngüyü durdurursunuz.

import requests
import base64
import time
import os

API_KEY = os.environ["CAPTCHAAI_API_KEY"]


def solve_math_captcha(image_b64):
    """Solve a math CAPTCHA — returns the computed result."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 1,          # Compute the math
        "numeric": 1,       # Result will be a number
        "json": 1,
    }, timeout=30)

    result = resp.json()
    if result.get("status") != 1:
        raise RuntimeError(result.get("request"))

    task_id = result["request"]

    time.sleep(8)
    for _ in range(24):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = resp.json()
        if data.get("status") == 1:
            return data["request"]
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("Solve timeout")


# Example: Image shows "3 + 7 = ?"
# With calc=0: Returns "3+7"
# With calc=1: Returns "10"

Yaygın matematik CAPTCHA formatları

CaptchaAI'nin çözebildiği matematik CAPTCHA'ları tek bir biçimle sınırlı değildir. Toplama, çıkarma, çarpma ve bölmenin yanı sıra karışık işlemler ve yazıyla ifade edilmiş denklemler de gelir. Aşağıdaki tabloda en sık karşılaşacağınız biçimleri ve calc=1 ile beklenen sonuçları görebilirsiniz:

Format              Example        Result
─────────────────────────────────────────
Addition            3 + 7 = ?      10
Subtraction         15 - 8 = ?     7
Multiplication      4 × 6 = ?      24
Division            20 ÷ 5 = ?     4
Mixed               3 + 4 × 2 = ?  11
Text-based          "three plus five"  8

Metin talimatlarıyla zor denklemleri çözme

Görüntü standart bir 3 + 7 = ? yerine daha alışılmadık bir biçim kullanıyorsa — örneğin işlemi kelimelerle yazıyor ya da operatörü net göstermiyorsa — textinstructions alanıyla motora ne beklediğinizi açıkça söyleyebilirsiniz. Bu talimatlar özellikle çok dilli veya biçimi bozuk denklemlerde doğruluğu artırır. Talimatı kısa ve tek bir eyleme odaklı tutun; birden çok soruyu tek alana sıkıştırmayın.

def solve_text_math_captcha(image_b64, instructions):
    """Solve a math CAPTCHA with custom instructions."""
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 1,
        "textinstructions": instructions,
        "json": 1,
    }, timeout=30)
    return resp.json()


# Example instructions:
# "Solve the math expression and enter the number"
# "What is the result of the equation shown?"
# "Enter the sum of the two numbers"

Uç durumları yönetme: ondalık, negatif ve yedek çözüm

Üretim akışında her yanıt temiz bir tamsayı olmayabilir: negatif sonuçlar, ondalık değerler ya da beklenmedik karakterler gelebilir. Aşağıdaki yardımcı fonksiyonlar sonucu önce doğrular ve temizler; "12.0" gibi bir değeri "12"'ye indirger, negatif işareti korur. Eğer calc=1 beklenen sayısal sonucu döndürmezse, kod calc=0 ile ham ifadeyi alır ve yalnızca izin verilen karakterleri kabul eden bir desen denetiminden geçirdikten sonra yerel olarak güvenli biçimde hesaplar.

# edge_cases.py


def validate_math_result(answer):
    """Validate and clean math CAPTCHA result."""
    if not answer:
        return None

    # Remove spaces
    answer = answer.strip()

    # Handle negative results
    if answer.startswith("-"):
        try:
            return str(int(answer))
        except ValueError:
            return answer

    # Handle decimal results
    try:
        num = float(answer)
        if num == int(num):
            return str(int(num))
        return str(num)
    except ValueError:
        return answer


def solve_math_with_fallback(image_b64):
    """Try calc=1, fall back to manual parsing if needed."""
    # Try with calc
    result = solve_math_captcha(image_b64)

    # Validate result is actually a number
    try:
        float(result)
        return result
    except (ValueError, TypeError):
        pass

    # Fallback: solve without calc and compute locally
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "base64",
        "body": image_b64,
        "calc": 0,      # Get the expression text
        "json": 1,
    }, timeout=30)

    # ... poll for result ...
    expression = "3+7"  # Example OCR result

    # Safely evaluate
    return str(safe_eval(expression))


def safe_eval(expression):
    """Safely evaluate a simple math expression."""
    # Only allow digits and basic operators
    import re
    cleaned = expression.replace("×", "*").replace("÷", "/").replace("=", "").replace("?", "")
    cleaned = cleaned.strip()

    if not re.match(r'^[\d\s+\-*/().]+$', cleaned):
        raise ValueError(f"Unsafe expression: {expression}")

    return eval(cleaned)  # Safe because we validated the pattern

Selenium ile uçtan uca entegrasyon

Parçaları birleştirdiğinizde akış nettir: sayfadaki CAPTCHA görüntüsünü Selenium ile yakalayın, calc=1 ile çözün ve dönen sonucu ilgili alana yazıp formu gönderin. Aşağıdaki örnek, bir tarayıcı oturumunda bu adımları uçtan uca nasıl bağlayacağınızı gösterir; seçicileri kendi hedef formunuza göre değiştirmeniz yeterlidir.

# full_flow.py
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
import os


def solve_math_captcha_on_page(driver, captcha_selector, input_selector, submit_selector):
    """Complete flow: capture math CAPTCHA, solve, enter answer."""

    # Capture CAPTCHA image
    captcha_el = driver.find_element(By.CSS_SELECTOR, captcha_selector)
    image_b64 = captcha_el.screenshot_as_base64

    # Solve with calc=1
    answer = solve_math_captcha(image_b64)
    print(f"Math answer: {answer}")

    # Enter the computed result
    input_el = driver.find_element(By.CSS_SELECTOR, input_selector)
    input_el.clear()
    input_el.send_keys(answer)

    # Submit
    driver.find_element(By.CSS_SELECTOR, submit_selector).click()


# Usage
driver = webdriver.Chrome()
driver.get("https://example.com/form")

solve_math_captcha_on_page(
    driver,
    captcha_selector="#captcha-image",
    input_selector="#captcha-answer",
    submit_selector="#submit-btn",
)

Sorun giderme

Matematik CAPTCHA çözümünde en sık karşılaşılan sorunlar genellikle eksik bir parametreden ya da yanlış okunan bir operatörden kaynaklanır. Aşağıdaki tablo, belirtiyi olası nedene ve hızlı bir düzeltmeye eşler:

Sorun Sebep Düzeltme
Sonuç yerine ifadeyi döndürür calc=1 eksik calc=1'yi gönderime ekle
Yanlış sonuç Operatör yanlış okundu (× vs +) Denklem formatını açıklayan textinstructions'yi ekleyin
Tamsayı denklemi için ondalık sayıyı döndürür Kayan nokta İnt'ye dönüştür: str(int(float(result)))
ERROR_CAPTCHA_UNSOLVABLE Çok çarpık denklem Önce görüntüyü ön işlemeyi deneyin

Türkiye'den bir senaryo: kayıt formu QA testi

Diyelim ki bir e-ticaret platformunun kayıt formunu otomatik QA testleriyle doğruluyorsunuz ve form, otomatik gönderimleri elemek için basit bir aritmetik CAPTCHA kullanıyor. Test ortamınızda (staging.example.com/qa-form) denklem her koşuda değiştiği için forma sabit bir yanıt yazamazsınız. Yukarıdaki solve_math_captcha_on_page akışı tam bu duruma uygundur: CAPTCHA görüntüsünü ekran görüntüsüyle yakalar, calc=1 ile çözer ve sonucu alana girer, böylece test paketiniz insan müdahalesi olmadan tamamlanır.

Türkiye'de geliştiriciler CaptchaAI'yi genellikle ABD doları cinsinden faturalandırılan, thread tabanlı planlarla kullanır; TL'nin oynaklığı düşünüldüğünde aylık öngörülebilir bir maliyet gerçek bir avantajdır. Test ya da toplama sürecindeki verilerde kişisel bilgi bulunuyorsa, iş akışınızı KVKK kapsamında yetkili senaryolarla sınırlı tutmayı unutmayın.

SSS

calc=1 ile calc=0 arasındaki fark nedir?

calc=0 (varsayılan) görüntüdeki ifadeyi metin olarak döndürür, örneğin "3+7". calc=1 ise aritmetiği sunucu tarafında hesaplar ve yalnızca sonucu, "10", döndürür. Formu otomatik dolduruyorsanız calc=1 doğru seçimdir.

Matematik CAPTCHA çözümü ne kadar sürer?

OCR tabanlı çözümler genellikle birkaç saniye sürer. Örnek kodda ilk sorgudan önce yaklaşık 8 saniye beklenir, ardından sonuç res.php üzerinden 5 saniyelik aralıklarla sorgulanır. Süre görüntü karmaşıklığına ve o anki yüke göre değişir.

Matematik CAPTCHA çözmek için hangi plan yeterli?

Matematik CAPTCHA'ları görüntü/OCR yöntemiyle çözülür ve her planda thread başına çözüm sınırı yoktur. Tekil form otomasyonu için BASIC ($15/ay, 5 thread) çoğu durumda yeterlidir; eşzamanlı iş yükünüz büyüdükçe daha yüksek thread sunan bir plana geçin. Faturalama çözüm başına değil, eşzamanlı thread başınadır.

numeric=1 parametresi ne işe yarar?

numeric=1, beklenen yanıtın yalnızca rakamlardan oluştuğunu belirtir. Bu ipucu, OCR motorunun "O" yerine "0" gibi doğru karakteri seçmesine yardımcı olur ve sayısal denklemlerde hata oranını düşürür.

Metin tabanlı ("üç artı beş") matematik destekleniyor mu?

CAPTCHA denklemi kelimelerle gösteriyorsa, textinstructions alanıyla bunun metin tabanlı bir işlem olduğunu belirtin. Motor bu ipucuyla daha isabetli çalışır, ancak sonuçlar biçime göre değişebilir.


İlgili Kılavuzlar


Matematik CAPTCHA'larını API ile otomatik çözün — CaptchaAI ile başlayın.

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