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:
- Kesederhanaan — Tanpa dependensi API eksternal, tanpa SDK JavaScript
- Plugin WordPress — Plugin seperti "Math CAPTCHA" dan "Really Simple CAPTCHA" terpasang di banyak situs, termasuk toko dan blog UMKM Indonesia
- Gesekan rendah — Bagi pengguna, menghitung angka terasa lebih cepat daripada memilih gambar
- Aksesibilitas — Versi teks tetap terbaca oleh screen reader, tidak seperti CAPTCHA gambar
- 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.