Explainers

Penjelasan Jenis CAPTCHA Matematika dan Logika

Saat skrip otomatisasi Anda berhenti di sebuah form dan diminta menjawab "7 + 3" atau "Ketik angka terbesar: 5, 12, 3", Anda sedang berhadapan dengan CAPTCHA matematika atau logika. Ini jenis challenge paling tua sekaligus paling sederhana: server membuat soal aritmatika atau pertanyaan pengetahuan umum, menyimpan jawabannya di sisi server, lalu mencocokkannya dengan input Anda. Anda masih sering menemuinya di situs WordPress, form kontak UMKM, dan aplikasi lama yang dibangun sebelum era reCAPTCHA. Kabar baik untuk pekerjaan scraping dan QA: mayoritas bisa Anda selesaikan dengan parsing HTML biasa, dan sisanya — yang dirender sebagai gambar — cukup ditangani dengan OCR.


Lima jenis CAPTCHA matematika dan logika

Secara praktis, hampir semua varian yang Anda temui saat scraping jatuh ke lima pola di bawah. Yang menentukan cara menanganinya bukan soal matematikanya, melainkan apakah soal itu muncul sebagai teks HTML atau disematkan sebagai gambar.

Jenis Contoh soal Cara menanganinya saat otomatisasi
Aritmatika dasar "Berapa 3 + 5?", "12 – 4 = ?", "6 × 7 = ?" Parse langsung dari teks HTML; pakai OCR bila disematkan sebagai gambar
Persamaan dalam gambar "14 + 23 = ?" dengan font terdistorsi dan latar noise OCR membaca angkanya lebih dulu, lalu hitung hasilnya
Berbasis kata "Berapakah tujuh tambah tiga?", "hasil dua belas dikurangi lima" Parsing NLP untuk mengubah kata menjadi angka, baru dihitung
Pertanyaan logika "Apa warna rumput?", "Berapa jumlah kaki seekor anjing?" Umumnya diambil dari bank soal tetap; butuh basis pengetahuan atau model bahasa
Urutan atau pola "2, 4, 6, 8, ?", "1, 1, 2, 3, 5, ?" Logika pengenalan pola untuk menebak nilai berikutnya

Empat pola pertama pada dasarnya soal aritmatika dengan pembungkus berbeda; hanya pola logika dan pola urutan yang benar-benar keluar dari perhitungan angka.


Kenapa CAPTCHA matematika masih banyak dipakai

Meski gampang dilewati, jenis ini belum hilang dari web. Alasannya praktis:

  1. Kesederhanaan — Tanpa dependensi API eksternal, tanpa SDK JavaScript
  2. Plugin WordPress — Plugin seperti "Math CAPTCHA" dan "Really Simple CAPTCHA" terpasang di banyak situs, termasuk toko dan blog UMKM Indonesia
  3. Gesekan rendah — Bagi pengguna, menghitung angka terasa lebih cepat daripada memilih gambar
  4. Aksesibilitas — Versi teks tetap terbaca oleh screen reader, tidak seperti CAPTCHA gambar
  5. Sistem lama — Aplikasi warisan yang dibangun sebelum layanan CAPTCHA modern ada

Cara kerja CAPTCHA matematika secara teknis

Alur versi berbasis teks

Server generates random equation (e.g., "7 + 3")
    ↓
Stores answer (10) in server-side session
    ↓
Renders equation as HTML text or image
    ↓
User submits answer via form field
    ↓
Server compares submitted answer to stored answer
    ↓
Match → Form submitted     Mismatch → Error shown

Alur versi berbasis gambar

Server generates random equation
    ↓
Renders equation into a distorted image (noise, lines, color shifts)
    ↓
Image served to client via <img> tag
    ↓
User reads image, computes answer, types in form field
    ↓
Server validates submitted answer

Mendeteksi CAPTCHA matematika saat otomatisasi

Sebelum menyelesaikan, otomatisasi Anda perlu tahu jenis apa yang sedang dihadapi. Dua contoh di bawah memindai sumber halaman untuk pola soal matematika teks, gambar CAPTCHA, dan pertanyaan logika.

Deteksi dengan Python

import requests
from bs4 import BeautifulSoup
import re

def detect_math_captcha(url):
    """Detect common math CAPTCHA patterns on a page."""
    response = requests.get(url, timeout=10)
    soup = BeautifulSoup(response.text, "html.parser")
    html = response.text.lower()

    indicators = {
        "text_math": False,
        "image_math": False,
        "logic_question": False,
    }

    # Check for text-based math questions
    math_patterns = [
        r"what is \d+\s*[\+\-\×\*]\s*\d+",
        r"\d+\s*[\+\-\×\*]\s*\d+\s*=\s*\?",
        r"solve:\s*\d+",
        r"type the (result|answer|sum)",
    ]
    for pattern in math_patterns:
        if re.search(pattern, html):
            indicators["text_math"] = True
            break

    # Check for CAPTCHA images near math-related labels
    captcha_images = soup.find_all("img", attrs={
        "alt": re.compile(r"captcha|math|verify", re.I)
    })
    if captcha_images:
        indicators["image_math"] = True

    # Check for logic questions
    logic_patterns = [
        r"what color is",
        r"how many legs",
        r"what comes next",
        r"is .+ hot or cold",
    ]
    for pattern in logic_patterns:
        if re.search(pattern, html):
            indicators["logic_question"] = True
            break

    return indicators

result = detect_math_captcha("https://example.com/contact")
print(result)

Deteksi dengan Node.js

const axios = require("axios");
const cheerio = require("cheerio");

async function detectMathCaptcha(url) {
    const { data: html } = await axios.get(url, { timeout: 10000 });
    const $ = cheerio.load(html);
    const lower = html.toLowerCase();

    const indicators = {
        textMath: false,
        imageMath: false,
        logicQuestion: false,
    };

    // Text-based math patterns
    const mathPatterns = [
        /what is \d+\s*[+\-×*]\s*\d+/,
        /\d+\s*[+\-×*]\s*\d+\s*=\s*\?/,
        /solve:\s*\d+/,
        /type the (result|answer|sum)/,
    ];

    for (const pattern of mathPatterns) {
        if (pattern.test(lower)) {
            indicators.textMath = true;
            break;
        }
    }

    // Check for CAPTCHA images
    $("img").each((_, el) => {
        const alt = ($(el).attr("alt") || "").toLowerCase();
        if (/captcha|math|verify/.test(alt)) {
            indicators.imageMath = true;
        }
    });

    return indicators;
}

detectMathCaptcha("https://example.com/contact").then(console.log);

Kalau text_math bernilai true, cukup parse persamaan dari HTML. Kalau image_math yang menyala, lanjutkan ke jalur OCR di bawah.


Menyelesaikan CAPTCHA matematika gambar dengan OCR

Ketika persamaan dirender sebagai gambar, OCR mengekstrak teksnya lalu parser sederhana menghitung jawabannya. Kirim gambar ke in.php, simpan task ID, polling res.php, lalu hitung hasilnya.

Contoh CaptchaAI untuk CAPTCHA gambar

import requests
import time
import re

API_KEY = "YOUR_API_KEY"
CAPTCHA_IMAGE_URL = "https://example.com/captcha.png"

# Download the CAPTCHA image
image_data = requests.get(CAPTCHA_IMAGE_URL).content

# Submit to CaptchaAI OCR
import base64
b64_image = base64.b64encode(image_data).decode()

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "base64",
    "body": b64_image,
    "json": 1,
})

task_id = submit.json().get("request")

# Poll for result
for _ in range(30):
    time.sleep(3)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    })
    data = result.json()
    if data.get("status") == 1:
        ocr_text = data["request"]  # e.g., "7 + 3"
        print(f"OCR result: {ocr_text}")

        # Parse and compute the answer
        match = re.match(r"(\d+)\s*([+\-*/×])\s*(\d+)", ocr_text)
        if match:
            a, op, b = int(match.group(1)), match.group(2), int(match.group(3))
            ops = {"+": a + b, "-": a - b, "*": a * b, "×": a * b, "/": a // b}
            answer = ops.get(op)
            print(f"Answer: {answer}")
        break
    elif "CAPCHA_NOT_READY" in str(data):
        continue

Untuk pekerjaan bervolume tinggi — misalnya price monitoring untuk agensi atau proyek scraping freelance di Fastwork — panggilan OCR cepat menumpuk. CaptchaAI menagih per thread bersamaan, bukan per solve, jadi paket seperti BASIC ($15/bulan, 5 thread) memberi biaya tetap dengan solve tak terbatas per thread, berapa pun jumlah gambar yang Anda proses dalam sebulan. Seperti biasa saat scraping, ambil hanya data yang berhak Anda proses dan hindari data pribadi, selaras dengan UU Pelindungan Data Pribadi (UU 27/2022).


Perbandingan CAPTCHA matematika dengan jenis lain

Fitur CAPTCHA Matematika reCAPTCHA v2 hCaptcha Slider CAPTCHA
Gesekan pengguna Rendah (matematika mental cepat) Sedang (pilih gambar) Sedang (pilih gambar) Rendah (satu drag)
Resistensi bot Sangat rendah Tinggi Tinggi Sedang
Aksesibilitas Baik (versi berbasis teks) Buruk (bergantung pada penglihatan) Buruk (bergantung pada penglihatan) Buruk (ketergantungan motorik)
Biaya Gratis (self-hosted) Ada tier gratis Ada tier gratis Bervariasi
Penggunaan umum WordPress, form kontak Login, registrasi Login, registrasi E-commerce, Asia

Kalau tujuan Anda menaikkan keamanan tanpa menyakiti pengguna, Cloudflare Turnstile berjalan nyaris tanpa gesekan, sementara reCAPTCHA v3 memberi penilaian berbasis skor. Keduanya didukung penuh oleh CaptchaAI; hCaptcha di tabel ini hanya konteks pembanding, bukan tipe yang bisa CaptchaAI selesaikan.


Pertanyaan yang sering diajukan

Berapa biaya menyelesaikan CAPTCHA matematika gambar dengan CaptchaAI?

CaptchaAI menagih per thread bersamaan, bukan per solve. Paket BASIC ($15/bulan, 5 thread) sudah memberi solve tak terbatas per thread untuk gambar OCR, tanpa biaya per-CAPTCHA. Untuk volume lebih besar, naik ke STANDARD ($30/bulan, 15 thread) atau ADVANCE ($90/bulan, 50 thread).

Apakah OCR CaptchaAI bisa membaca angka yang ditulis sebagai kata?

OCR membaca karakter yang tampak di gambar. Untuk soal berbasis kata seperti "tujuh tambah tiga", Anda tetap perlu langkah NLP kecil di sisi Anda untuk mengubah kata menjadi angka sebelum menghitung. Untuk persamaan digit seperti "7 + 3", parser regex sederhana sudah cukup.

Bisakah CaptchaAI menyelesaikan hCaptcha untuk form yang lebih ketat?

Belum. hCaptcha tidak didukung saat ini. CaptchaAI menyelesaikan reCAPTCHA v2/v3, Cloudflare Turnstile dan Challenge, GeeTest v3, serta CAPTCHA gambar/OCR dan grid. Untuk hCaptcha Anda memerlukan layanan lain.

Bagaimana membedakan CAPTCHA matematika teks dan gambar saat scraping?

Cek sumber halaman. Jika persamaan muncul sebagai teks HTML, parse langsung dengan regex atau DOM — tanpa OCR. Jika persamaan berada di dalam tag <img>, Anda perlu OCR untuk membaca angkanya lebih dulu.


Ringkasan

CAPTCHA matematika dan logika adalah tipe challenge paling sederhana, umum di form kontak WordPress dan sistem lama. Versi teks bisa di-parse langsung dari HTML; versi gambar butuh OCR untuk membaca persamaan, lalu aritmatika sederhana untuk menghitung jawabannya. Untuk versi gambar, gunakan API OCR Gambar CaptchaAI untuk mengekstrak dan solve persamaannya.

Artikel Terkait

Komentar dinonaktifkan untuk artikel ini.