Kalau submit form Anda ditolak dengan 403 atau error generik padahal tidak ada kotak centang maupun grid gambar di halaman, kemungkinan besar ada CAPTCHA invisible yang bekerja diam-diam. CAPTCHA invisible memverifikasi pengunjung sepenuhnya di background: JavaScript menganalisis perilaku browser, sinyal perangkat, dan reputasi jaringan, lalu mengeluarkan token tanpa pernah menampilkan tantangan.
Empat sistem invisible yang paling sering Anda temui:
- reCAPTCHA v3 — mengembalikan skor risiko 0,0–1,0, tidak pernah memblokir sendiri
- Cloudflare Turnstile — token pass/fail tanpa mengumpulkan data pribadi
- reCAPTCHA v2 Invisible — bisa jatuh ke challenge gambar untuk pengguna berisiko
- hCaptcha passive — mode diam-diam khusus tier Enterprise
Berikutnya: cara mendeteksi tiap sistem di HTML dan menghasilkan token valid lewat API CaptchaAI.
Cara kerja CAPTCHA invisible di balik layar
Semua CAPTCHA invisible mengikuti pola inti yang sama:
Page loads → CAPTCHA JavaScript injected
↓
Script runs in background, collecting signals:
├─ Browser sinyal browser (canvas, WebGL, fonts, plugins)
├─ Behavioral data (mouse, keyboard, scroll, timing)
├─ Network data (IP reputation, TLS sinyal browser)
├─ Device data (screen, GPU, CPU cores, memory)
└─ History data (cookies, previous CAPTCHA completions)
↓
Signals sent to CAPTCHA provider's risk engine
↓
Risk score computed
↓
Response varies by score:
├─ Low risk → Token issued silently (user sees nothing)
├─ Medium → Light challenge shown (checkbox, simple click)
└─ High risk → Full challenge (image grid) or block
Bedanya dengan CAPTCHA terlihat: penilaian berjalan sejak halaman dimuat, bukan saat pengguna mengklik checkbox. Karena itu alur otomatisasi bisa lolos di satu request lalu diblokir berikutnya tanpa pesan jelas.
Jenis sistem CAPTCHA invisible yang paling umum
reCAPTCHA v3
- Penyedia: Google
- Rilis: 2018
- Pangsa pasar: tertinggi di antara CAPTCHA invisible
reCAPTCHA v3 mengembalikan skor floating-point 0,0–1,0 untuk setiap aksi; ia tidak memblokir, hanya menilai, dan situs sendiri yang memutuskan tindakannya. Cara ia menyisip di halaman:
<!-- reCAPTCHA v3 integration -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('SITE_KEY', { action: 'login' }).then(function(token) {
// Token sent to server for verification
document.getElementById('captcha-token').value = token;
});
});
</script>
Panggilan execute() memicu pengumpulan sinyal on-demand, tetapi reCAPTCHA sudah merekam data sejak script dimuat. Skor biasanya ditafsirkan begini:
- 0,9 — sangat mungkin manusia, izinkan
- 0,7 — mungkin manusia, izinkan dengan pemantauan
- 0,5 — tidak pasti, minta verifikasi tambahan
- 0,3 — mungkin bot, blokir atau tampilkan reCAPTCHA v2
- 0,1 — sangat mungkin bot, blokir
Untuk mengenalinya di sumber halaman, cari script render=:
import requests
import re
def detect_recaptcha_v3(url):
html = requests.get(url, timeout=10).text
indicators = {
"recaptcha_v3": False,
"site_key": None,
"actions": [],
}
# Check for v3 script
if "recaptcha/api.js?render=" in html:
indicators["recaptcha_v3"] = True
match = re.search(r"render=([A-Za-z0-9_-]+)", html)
if match:
indicators["site_key"] = match.group(1)
# Find action names
actions = re.findall(r"action:\s*['\"](\w+)['\"]", html)
indicators["actions"] = actions
return indicators
print(detect_recaptcha_v3("https://staging.example.com/qa-login"))
Cloudflare Turnstile
- Penyedia: Cloudflare
- Rilis: 2022
- Pangsa pasar: tumbuh paling pesat
Turnstile memakai jalur verifikasi bertahap tanpa data pribadi. Empat tahapnya, dari yang paling ringan:
- Pemeriksaan Private Access Token — jika browser mendukung Apple PAT, verifikasi langsung tuntas
- Tantangan non-interaktif — browser menyelesaikan teka-teki proof-of-work kriptografis yang ringan
- Managed Challenge — Cloudflare memilih jalur non-interaktif atau interaktif berdasarkan sinyal risiko jaringannya (lebih dari 20% traffic internet melewati Cloudflare)
- Interactive Challenge — hanya muncul saat skor risiko tinggi, menampilkan widget bergaya checkbox
Integrasi widget-nya cukup dua baris:
<!-- Turnstile widget -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQhMMQ_Rxrg"></div>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Deteksinya mengandalkan penanda cf-turnstile atau host challenges.cloudflare.com:
def detect_turnstile(url):
html = requests.get(url, timeout=10).text
indicators = {
"turnstile": False,
"site_key": None,
}
if "challenges.cloudflare.com/turnstile" in html or "cf-turnstile" in html:
indicators["turnstile"] = True
match = re.search(r'data-sitekey="([^"]+)"', html)
if match:
indicators["site_key"] = match.group(1)
return indicators
reCAPTCHA v2 Invisible
- Penyedia: Google
- Rilis: 2017
Ini reCAPTCHA v2 yang dipicu secara programatik saat form dikirim: tanpa checkbox, pengguna menekan submit dan reCAPTCHA berjalan di background. Kalau skornya cukup tinggi, challenge gambar muncul sebagai popup.
<button class="g-recaptcha"
data-sitekey="SITE_KEY"
data-callback="onSubmit"
data-size="invisible">
Submit
</button>
Beda utamanya dengan v3: v2 Invisible masih bisa jatuh ke challenge gambar untuk pengguna berisiko, sedangkan v3 tidak pernah menampilkannya.
hCaptcha passive (Enterprise)
- Penyedia: Intuition Machines
- Ketersediaan: khusus tier Enterprise
Mode passive milik hCaptcha Enterprise menilai pengguna tanpa widget, memakai sinyal perilaku yang sama seperti hCaptcha standar tetapi hanya menampilkan challenge visual bagi pengunjung paling mencurigakan. Catatan: hCaptcha belum didukung CaptchaAI, jadi bagian ini murni penjelasan cara kerja.
Apple Private Access Token
- Penyedia: Apple
- Ketersediaan: iOS 16+, macOS Ventura+
Ini bukan penyedia CAPTCHA, melainkan mekanisme validasi. Perangkat Apple membuktikan keasliannya lewat pengesahan perangkat keras, sehingga situs bisa menghilangkan kebutuhan CAPTCHA untuk perangkat itu.
Device attestation:
1. Website requests a challenge from a token issuer
2. Device proves it is genuine without revealing identity
3. Token issuer generates a blind-signed token
4. Website verifies token → CAPTCHA skipped
Mekanisme ini didukung Cloudflare, Fastly, dan CDN lain.
Perbandingan singkat empat sistem invisible
| Fitur | reCAPTCHA v3 | Turnstile | reCAPTCHA v2 Invisible | hCaptcha Passive |
|---|---|---|---|---|
| Challenge terlihat | Tidak pernah | Jarang | Kadang (fallback) | Jarang |
| Privasi | Mengumpulkan data browsing | Tanpa data pribadi | Mengumpulkan data browsing | Mengumpulkan data interaksi |
| Harga | Gratis (1M/bulan) | Gratis (tak terbatas) | Gratis (1M/bulan) | Enterprise only |
| Skor dikembalikan | Ya (0.0–1.0) | Tidak (pass/fail) | Tidak (pass/fail) | Ya (Enterprise) |
| Challenge fallback | Diputuskan situs | Dikelola Cloudflare | Popup grid gambar | Popup grid gambar |
| Dukungan CaptchaAI | Ya (token v3) | Ya (tingkat keberhasilan tinggi) | Ya (token) | Belum didukung |
Baris terakhir yang paling relevan untuk automation: v3, Turnstile, dan v2 Invisible bisa diselesaikan lewat API; hCaptcha passive belum didukung.
Solve CAPTCHA invisible dengan CaptchaAI
CAPTCHA invisible tetap mengeluarkan token yang harus ikut terkirim bersama form. API solver menghasilkan token itu dari luar browser, dan Anda menempelkannya ke field yang tepat sebelum submit. Polanya selalu sama: kirim task ke in.php, simpan task ID, polling res.php, pakai token.
Contoh nyata: tim price-monitoring di Jakarta yang men-deploy scraper di AWS ap-southeast-1 (Singapura) sering menabrak Turnstile di halaman signup. Alih-alih memelihara pool browser headless, mereka memanggil API solver untuk token, menempelkannya ke cf-turnstile-response, lalu submit. Catatan kepatuhan: sesuai UU Pelindungan Data Pribadi (UU 27/2022), olah hanya data yang berhak Anda akses.
Solve reCAPTCHA v3
import requests
import time
API_KEY = "YOUR_API_KEY"
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9",
"pageurl": "https://staging.example.com/qa-login",
"version": "v3",
"action": "login",
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
token = result["request"]
print(f"reCAPTCHA v3 token received (score ≥ 0.9)")
break
Kirim action yang cocok dengan halaman target (login, signup) agar token dinilai secara benar.
Solve Cloudflare Turnstile
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQhMMQ_Rxrg",
"pageurl": "https://example.com/signup",
"json": 1,
})
task_id = submit.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1,
}).json()
if result.get("status") == 1:
turnstile_token = result["request"]
print(f"Turnstile token received")
break
Turnstile hanya butuh sitekey dan pageurl; hasilnya token pass/fail tanpa skor.
Node.js — solve reCAPTCHA v3
const axios = require("axios");
async function solveRecaptchaV3(siteKey, pageUrl, action) {
const API_KEY = "YOUR_API_KEY";
// Submit
const { data: submit } = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: API_KEY,
method: "userrecaptcha",
googlekey: siteKey,
pageurl: pageUrl,
version: "v3",
action: action,
json: 1,
})
);
const taskId = submit.request;
// Poll
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const { data: result } = await axios.get(
"https://ocr.captchaai.com/res.php",
{
params: {
key: API_KEY,
action: "get",
id: taskId,
json: 1,
},
}
);
if (result.status === 1) {
return result.request;
}
}
throw new Error("Solve timeout");
}
solveRecaptchaV3("SITE_KEY", "https://staging.example.com/qa-login", "login")
.then((token) => console.log("Token:", token.substring(0, 50) + "..."));
Polanya sama lintas bahasa: submit, polling, pakai token. Bedanya hanya parameter — googlekey plus version=v3 untuk reCAPTCHA v3, sitekey untuk Turnstile.
Cara mendeteksi semua CAPTCHA invisible sekaligus
Kalau belum tahu sistem mana yang dipakai sebuah halaman, satu fungsi bisa memeriksa keempatnya dari HTML:
import requests
import re
def detect_invisible_captcha(url):
"""Detect all invisible CAPTCHA types on a page."""
html = requests.get(url, timeout=10).text
results = []
# reCAPTCHA v3
if "recaptcha/api.js?render=" in html:
key = re.search(r"render=([A-Za-z0-9_-]+)", html)
results.append({
"type": "reCAPTCHA v3",
"site_key": key.group(1) if key else "unknown",
"solver_method": "userrecaptcha (version=v3)",
})
# reCAPTCHA v2 invisible
if 'data-size="invisible"' in html and "g-recaptcha" in html:
key = re.search(r'data-sitekey="([^"]+)"', html)
results.append({
"type": "reCAPTCHA v2 Invisible",
"site_key": key.group(1) if key else "unknown",
"solver_method": "userrecaptcha (invisible=1)",
})
# Cloudflare Turnstile
if "challenges.cloudflare.com/turnstile" in html:
key = re.search(r'data-sitekey="([^"]+)"', html)
results.append({
"type": "Cloudflare Turnstile",
"site_key": key.group(1) if key else "unknown",
"solver_method": "turnstile",
})
# hCaptcha (passive mode detected by script without visible widget)
if "hcaptcha.com/1/api.js" in html and 'data-size="invisible"' in html:
results.append({
"type": "hCaptcha Passive",
"solver_method": "hcaptcha",
})
if not results:
results.append({"type": "none detected"})
return results
for item in detect_invisible_captcha("https://example.com"):
print(item)
Deteksi selalu bertumpu pada HTML atau network request, bukan pada tampilan halaman.
Pertanyaan yang sering diajukan
Apakah CaptchaAI bisa solve reCAPTCHA v3 dan Cloudflare Turnstile?
Ya. reCAPTCHA v3 lewat userrecaptcha dengan version=v3, dan Cloudflare Turnstile lewat metode turnstile — keduanya tipe yang didukung dengan tingkat keberhasilan tinggi. reCAPTCHA v2 Invisible juga didukung; hCaptcha passive belum.
Apakah CAPTCHA invisible tetap menghasilkan token yang harus dikirim?
Ya. Meski tanpa widget, sistem tetap mengeluarkan token dan menaruhnya di field form tersembunyi atau sebagai parameter request. Kalau token hilang atau tidak valid, server menolak submit — sering diam-diam tanpa pesan jelas.
Perlukah saya menjalankan Selenium atau Puppeteer untuk menangani CAPTCHA invisible?
Tidak wajib. Karena API solver menghasilkan token dari luar, Anda cukup memanggil in.php, polling res.php, lalu menempelkan token dengan klien HTTP apa pun. Browser headless hanya perlu jika alur Anda memang harus mengeksekusi JavaScript halaman untuk alasan lain.
Berapa lama waktu penyelesaian token invisible lewat API?
Bergantung tipe dan kondisi jaringan. Pola pada contoh adalah polling tiap 5 detik hingga token siap, biasanya beberapa siklus. Jalankan submit dan polling asinkron agar worker lain tak menunggu.
Bagaimana kalau situs target memakai hCaptcha passive?
Untuk tipe itu Anda memerlukan layanan lain: hCaptcha, termasuk mode passive-nya, tidak didukung CaptchaAI saat ini. Fungsi deteksi di atas tetap bisa mengenalinya di halaman, tetapi penyelesaiannya di luar cakupan CaptchaAI.
Ringkasan
CAPTCHA invisible menilai pengunjung lewat analisis JavaScript di background atas perilaku browser, sinyal perangkat, dan reputasi jaringan — tanpa interaksi yang terlihat. reCAPTCHA v3 dan Cloudflare Turnstile paling dominan, dengan Turnstile tumbuh paling pesat berkat harga gratis dan desain yang mengutamakan privasi. Untuk otomatisasi, kuncinya tetap: sistem ini menghasilkan token, dan submit Anda ditolak tanpa token yang valid. Pakai CaptchaAI untuk menghasilkannya — reCAPTCHA v3 lewat userrecaptcha dengan version=v3, dan Turnstile lewat metode turnstile dengan tingkat keberhasilan tinggi.