reCAPTCHA v3 tidak pernah menampilkan kotak centang atau grid gambar ke pengguna — ia hanya mengembalikan satu angka antara 0,0 dan 1,0, dan angka itulah yang memutuskan apakah request Anda lolos mulus, kena verifikasi tambahan, atau langsung diblokir. Google tidak mempublikasikan rumus penilaian persisnya, tapi pengujian ekstensif dan reverse engineering komunitas developer sudah memetakan polanya cukup jelas.
Lima kategori sinyal yang membentuk skor reCAPTCHA v3
Mesin Advanced Risk Analysis (ARA) milik reCAPTCHA mengevaluasi puluhan sinyal setiap kali skrip dimuat, lalu meringkasnya jadi satu angka:
Final Score = f(Browser Signals, Behavioral Signals, Network Signals,
History Signals, Environmental Signals)
Kelima kategori di atas tidak punya bobot yang sama. Diurutkan dari yang paling menentukan sampai yang paling kecil pengaruhnya:
- Sinyal perilaku — bobot paling tinggi
- Sinyal browser — bobot tinggi
- Sinyal jaringan — bobot menengah-tinggi
- Sinyal riwayat — bobot menengah
- Sinyal lingkungan — bobot rendah-menengah
Pembahasan di bawah tetap mengikuti urutan kategori standar supaya mudah dijadikan referensi silang.
Kategori 1: Sinyal browser (bobot tinggi)
Ketersediaan JavaScript API
reCAPTCHA memeriksa API yang tidak dimiliki browser headless, atau yang perilakunya berbeda di browser headless:
| API yang diperiksa | Nilai wajar di browser asli | Indikator headless |
|---|---|---|
sinyal browser otomatis |
undefined atau false |
true (Selenium, Puppeteer) |
navigator.plugins |
PluginArray berisi 1+ item | Kosong atau tidak ada |
navigator.languages |
Array berisi string locale | Array kosong atau tidak ada |
navigator.hardwareConcurrency |
2-16 (sesuai jumlah core CPU) | Kadang 0 atau undefined |
navigator.deviceMemory |
2-16GB | Tidak ada di beberapa browser headless |
window.chrome |
Object berisi runtime, dll. | Tidak ada di Chrome headless |
Notification.permission |
"default", "granted", atau "denied" | Error atau tidak ada |
Dampak pada skor: nilai yang hilang atau salah untuk API di atas bisa menurunkan skor 0,3-0,5 poin.
Sinyal dari canvas dan WebGL renderer
reCAPTCHA merender elemen canvas tersembunyi lalu membaca kembali data pikselnya — hasilnya sinyal browser yang unik untuk kombinasi browser/OS/GPU tertentu:
// reCAPTCHA performs something similar to:
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.fillText("Hello", 2, 2);
const sinyal browser = canvas.toDataURL();
String renderer WebGL menambahkan sinyal serupa dengan membocorkan jenis GPU yang dipakai:
const gl = document.createElement('canvas').getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// Expected: "ANGLE (NVIDIA GeForce GTX 1060...)"
// Headless: "SwiftShader" or "Google SwiftShader"
Dampak skor: sinyal yang konsisten dengan deklarasi OS/browser dianggap netral; sinyal yang cocok pola headless turun -0,3 hingga -0,5; canvas yang diblokir atau mengembalikan data seragam turun -0,4 hingga -0,6. SwiftShader (renderer software Google di Chrome headless) sendirian sudah jadi indikator bot kuat, -0,3 hingga -0,5.
Kategori 2: Sinyal perilaku (bobot paling tinggi)
Sinyal perilaku punya bobot terbesar dalam perhitungan skor — pengumpulannya dimulai sejak halaman selesai dimuat, jauh sebelum pengguna menyentuh form apa pun.
Gerakan mouse
reCAPTCHA melacak koordinat mouse beserta cap waktunya sepanjang kunjungan halaman:
| Sinyal | Pola manusia | Pola bot |
|---|---|---|
| Jumlah pergerakan | 50-500+ event per kunjungan halaman | 0-5 event |
| Lintasan | Jalur melengkung dengan kecepatan bervariasi | Garis lurus, kecepatan konstan |
| Akselerasi | Ease-in/ease-out alami | Mulai/berhenti instan |
| Gerakan mikro | Jitter kecil saat kursor hover | Diam sempurna di antara aksi |
| Overshoot ke target | Sedikit melewati target lalu dikoreksi | Penargetan presisi |
Dampak pada skor: tidak ada gerakan mouse sama sekali menurunkan skor sebesar 0,4-0,7 — dampak terbesar di seluruh mesin ARA.
Keyboard, scroll, dan urutan interaksi
Inter-key timing:
Human: Variable (50-300ms between keys, varies by key pair)
Bot: Constant (all keys at same interval, or instant paste)
Key events:
Human: keydown → keypress → keyup for each character
Bot: May skip keypress, or fire all events simultaneously
Corrections:
Human: Occasional backspace, re-typing
Bot: Perfect input without corrections
Selain keyboard, reCAPTCHA juga memantau event scroll dan elemen mana yang disentuh pengguna lebih dulu:
- Manusia: scroll bertahap dengan momentum dan jeda baca, klik di beberapa titik halaman, hover ke link sebelum mengisi form
- Bot: input teks instan lewat clipboard, langsung lompat ke area form tanpa scroll, isi kolom berurutan, submit
Dampak skor: input instan turun 0,1-0,2; tidak ada scroll sebelum interaksi form turun -0,2 hingga -0,3; perilaku langsung-ke-form tanpa eksplorasi turun -0,1 hingga -0,3 tambahan.
Kategori 3: Sinyal jaringan (bobot menengah-tinggi)
Reputasi IP, sinyal TLS, dan header HTTP
Google mengelola database reputasi IP berdasarkan hasil tantangan reCAPTCHA sebelumnya, rentang IP data center yang sudah dikenal (AWS, GCP, Azure, DigitalOcean, dll.), rentang penyedia proxy/VPN, laporan penyalahgunaan, dan sinyal fraud dari pencarian/iklan:
| Tipe IP | Dampak skor yang umum |
|---|---|
| Residensial, penyalahgunaan rendah | Netral hingga +0,1 |
| Residensial, ada riwayat penyalahgunaan | -0,1 hingga -0,2 |
| Data center | -0,3 hingga -0,5 |
| Proxy/VPN yang sudah dikenal | -0,2 hingga -0,4 |
| Tor exit node | -0,4 hingga -0,6 |
| Baru saja ditandai karena penyalahgunaan | -0,3 hingga -0,6 |
Untuk tim yang deploy worker di region AWS
ap-southeast-1(Singapura) atau GCPasia-southeast2(Jakarta): rentang IP data center di region-region ini sudah dikenal Google, jadi penalti -0,3 hingga -0,5 tetap berlaku meski server-nya dekat secara geografis ke target lokal.
Di luar tipe IP, jabat tangan TLS juga membocorkan cipher suite dan ekstensi yang didukung klien:
- Chrome: urutan cipher tertentu, TLS 1.3, ekstensi GREASE
- Python
requests: urutan cipher berbeda, tanpa GREASE, daftar ekstensi lebih sederhana - curl: ekstensi minimal, pola khas OpenSSL
Terakhir, server reCAPTCHA memeriksa header HTTP dari klien yang mengirim request:
| Header | Indikator manusia | Indikator bot |
|---|---|---|
User-Agent |
Cocok dengan rilis browser yang dikenal | Versi usang, UA milik tool otomatisasi |
Accept-Language |
Terisi preferensi locale | Tidak ada atau generik |
Accept-Encoding |
gzip, deflate, br |
Tidak ada atau tidak lazim |
Sec-CH-UA |
Client hint yang cocok dengan browser | Tidak ada (header pra-2022) |
Dampak skor: sinyal TLS yang bukan milik browser sungguhan → -0,2 hingga -0,4, di luar penalti tipe IP di atas.
Kategori 4: Sinyal riwayat (bobot menengah)
Cookie Google, cookie reCAPTCHA, dan reputasi lintas situs
Pengguna yang login ke akun Google dengan riwayat browsing mendapat skor lebih tinggi, dan reCAPTCHA sendiri menyimpan cookie setelah tantangan berhasil diselesaikan:
- Cookie
SID,HSID,SSID→ sesi Google aktif (+0,1 hingga +0,3) - Cookie
_GRECAPTCHA→ ada riwayat penyelesaian berhasil sebelumnya rc::a,rc::b,rc::c→ cookie data analisis risiko- Tidak ada cookie sama sekali → sesi dianggap baru, skor awal lebih rendah (-0,1 hingga -0,2)
Selain histori per-browser, Google juga melacak perilaku reCAPTCHA lintas situs selama profil browser-nya sama — perilaku baik di situs A ikut menaikkan skor di situs B.
Kategori 5: Sinyal lingkungan (bobot rendah-menengah)
Zona waktu, dimensi layar, dan status baterai
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
// Should match IP geolocation
// "America/New_York" with a New York IP → consistent
// "America/New_York" with a Tokyo IP → suspicious
screen.width, screen.height // Physical screen
window.innerWidth, innerHeight // Browser window
window.outerWidth, outerHeight // Including browser chrome
navigator.getBattery().then(battery => {
battery.level; // 0.0 to 1.0
battery.charging; // true/false
});
Dampak skor: zona waktu yang tidak cocok dengan geolokasi IP mencurigakan; dimensi layar tidak lazim (0×0, sangat besar, atau persis default) turun -0,1 hingga -0,2. Battery API cuma sinyal kecil — selalu mengisi daya 100% konsisten dengan lingkungan development desktop.
Strategi menaikkan skor reCAPTCHA v3 di automasi
| Strategi | Dampak yang diharapkan | Tingkat kesulitan |
|---|---|---|
| Pakai Chrome asli (bukan headless) | +0,3 hingga +0,5 | Rendah |
Hapus flag sinyal browser otomatis |
+0,2 hingga +0,3 | Rendah |
| Tambahkan simulasi gerakan mouse | +0,2 hingga +0,4 | Sedang |
| Gunakan IP keluar residensial, bukan IP data center | +0,2 hingga +0,3 | Rendah (biaya) |
| Pertahankan cookie Google lintas sesi | +0,1 hingga +0,2 | Sedang |
| Samakan sinyal TLS dengan Chrome | +0,1 hingga +0,3 | Tinggi |
| Simulasikan eksplorasi halaman sebelum isi form | +0,1 hingga +0,2 | Sedang |
Menyamakan ketujuh sinyal di atas sekaligus butuh maintenance terus-menerus — begitu Chrome mengubah sinyal canvasnya sedikit saja, sebagian setup ini bisa balik ke skor rendah.
Banyak tim scraping dan automation Indonesia — termasuk yang kerja lepas lewat kontrak Upwork/Fastwork — merasa trade-off harga di atas kurang sepadan: menyewa pool IP residensial per volume sering lebih mahal dari manfaatnya. Alternatifnya, gunakan CaptchaAI untuk menghasilkan token valid berapa pun skor yang dihitung Google:
import requests
import time
API_KEY = "YOUR_API_KEY"
# Request a high-score token
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6LcR_RsTAAAAAN_r0GEkGBfq3L7KmU5JbPHJtwNp",
"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"High-score token received")
break
Lingkungan solver-nya sudah dioptimalkan untuk skor maksimum — sinyal browser, perilaku, dan jaringan ditangani secara internal. Paket thread bulanan CaptchaAI (mulai BASIC $15/bulan untuk 5 thread) membuat biayanya tetap flat berapa pun jumlah CAPTCHA yang diproses.
Pertanyaan yang sering diajukan
Skor reCAPTCHA v3 berapa yang tergolong aman?
Skor 0,7 ke atas umumnya dianggap seperti manusia. Kebanyakan situs menetapkan ambang batas di kisaran 0,5-0,7, dan skor 0,9 nyaris selalu lolos di semua implementasi. CaptchaAI tidak punya parameter untuk mengunci skor di angka tertentu — skor sepenuhnya keputusan Google. Untuk mendorong skor lebih tinggi, sertakan cookies, userAgent, dan proxy yang valid pada request Anda.
Kenapa skor saya langsung anjlok setelah deploy ke server cloud?
Karena rentang IP data center dari AWS, GCP, Azure, dan penyedia cloud lain sudah masuk database reputasi IP milik Google, terlepas dari regionnya. Skor otomatis kena penalti -0,3 hingga -0,5 dibanding IP residensial biasa — ini soal jenis rentang IP-nya, bukan lokasi geografis server.
Apakah CaptchaAI bisa mengunci skor reCAPTCHA di angka tertentu, misalnya 0,9?
Tidak. CaptchaAI menghasilkan token valid dari lingkungan solver-nya sendiri, bukan dengan memaksa angka skor tertentu pada mesin ARA milik Google — skor internalnya tetap sepenuhnya keputusan Google. Yang Anda dapatkan adalah token yang lolos verifikasi siteverify, terlepas dari berapa pun skor persis di baliknya.
Kenapa skor saya berbeda-beda di tiap halaman pada situs yang sama?
reCAPTCHA v3 memakai parameter action untuk mengontekstualisasikan skor — homepage, login, dan checkout bisa punya baseline berbeda. Sinyal perilaku juga terus terakumulasi selama sesi berjalan, jadi halaman yang dikunjungi belakangan biasanya mendapat skor lebih tinggi.
Apakah simulasi gerakan mouse otomatis benar-benar menaikkan skor?
Cukup signifikan (+0,2 hingga +0,4 menurut tabel strategi), tapi bukan solusi tunggal:
- Kalau
sinyal browser otomatismasihtrue, kenaikan dari simulasi mouse sering tidak cukup menutupinya - Kalau IP-nya data center, penalti jaringan bisa lebih besar dari perbaikan perilaku
Ringkasan
Skor reCAPTCHA v3 ditentukan oleh lima kategori sinyal: perilaku (gerakan mouse, timing keyboard, pola scroll — bobot paling besar), browser (ketersediaan API, canvas, WebGL), jaringan (tipe IP, sinyal TLS), riwayat (cookie Google, solve sebelumnya), dan lingkungan (zona waktu, dimensi layar). Menyamakan semuanya secara manual butuh maintenance berkelanjutan setiap kali browser atau reCAPTCHA berubah. Untuk automasi yang butuh skor tinggi secara konsisten tanpa perawatan itu, gunakan CaptchaAI dan lampirkan cookies, userAgent, serta proxy yang sah pada tiap request.
Artikel terkait
- cara mengatasi reCAPTCHA v3 Enterprise lewat API
- ambang batas skor minimum reCAPTCHA v3
- reCAPTCHA v3 Enterprise vs Standard: apa bedanya