Lewati ke konten
StatusDasbor

Panduan

Menggunakan token untuk menyelesaikan reCAPTCHA

Halaman ini diterjemahkan otomatis dari versi bahasa Mandarin dan mungkin mengandung kesalahan. Versi bahasa Mandarin menjadi acuan utama.

gRecaptchaResponse yang dikembalikan YesCaptcha adalah hasil yang diberikan Google kepada halaman web setelah captcha diselesaikan. Setelah mendapatkannya, Anda perlu mengirimkannya ke situs target (bukan ke Google atau YesCaptcha) seperti yang dilakukan browser. Situs tersebut akan memverifikasinya ke Google, lalu meloloskan Anda. Ada dua cara: kirim request langsung, atau isi token ke halaman di browser lalu kirim.

Alur pada akses normal:

  1. Halaman memuat reCAPTCHA, lalu pengguna menyelesaikan verifikasi;
  2. Google memberikan token ke halaman, dan halaman menaruhnya di textarea g-recaptcha-response (atau meneruskannya ke fungsi callback);
  3. Pengguna mengirim formulir, dan token ikut terkirim ke server situs;
  4. Server situs memverifikasi token ke Google, lalu meloloskan jika valid.

Saat memakai YesCaptcha, langkah 1 dan 2 kami yang mengerjakan: Anda membuat tugas dengan websiteURL dan websiteKey, mendapatkan token, lalu melanjutkan dari langkah 3.

Cara 1: kirim request langsung (disarankan)

Section titled “Cara 1: kirim request langsung (disarankan)”
  1. Lakukan sekali secara manual di browser: tekan F12 untuk membuka panel Network, selesaikan captcha dan kirim formulir, lalu cari request yang mengirim formulir tersebut.
  2. Di Payload (atau Form Data) request itu, cari field yang membawa token, biasanya bernama g-recaptcha-response, dengan token yang diawali 03A. Sebagian situs mengganti namanya, misalnya grecaptcharesponse atau captcha.
  3. Kirim request yang sama dari program Anda, dengan nilai field diganti token dari YesCaptcha. Field lain, Cookie, dan header request juga harus sama dengan yang dikirim browser, karena situs sering memeriksanya sekaligus.

Contoh lengkap di halaman demo Google: kenali dulu, lalu kirim token ke halaman demo lewat field g-recaptcha-response:

recaptcha_requests.py
"""Solve reCAPTCHA v2 on Google's demo page and submit the token with plain HTTP (no browser).
Run: pip install requests
export YESCAPTCHA_CLIENT_KEY=your_client_key
python recaptcha_requests.py
Each run creates one NoCaptchaTaskProxyless task (charged per the price list).
"""
import os
import time
import requests
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
API = "https://api.yescaptcha.com"
WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo"
WEBSITE_KEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
def call(method, payload):
data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json()
if data.get("errorId"):
raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
return data
def get_token():
task = {"type": "NoCaptchaTaskProxyless", "websiteURL": WEBSITE_URL, "websiteKey": WEBSITE_KEY}
task_id = call("createTask", {"task": task})["taskId"]
for _ in range(36): # poll every 5 seconds, for up to about 3 minutes
time.sleep(5)
result = call("getTaskResult", {"taskId": task_id})
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
raise TimeoutError(task_id)
token = get_token()
print("token:", token[:40], "...")
# Submit the token the same way the browser does: the demo form posts the field
# "g-recaptcha-response" back to the page. Check your own site's request in DevTools > Network.
page = requests.post(WEBSITE_URL, data={"g-recaptcha-response": token}, timeout=30)
print("passed" if "Verification Success" in page.text else "not passed", page.status_code)

Cara 2: isi di browser (Selenium dan sejenisnya)

Section titled “Cara 2: isi di browser (Selenium dan sejenisnya)”

Saat mengendalikan browser sungguhan dengan alat seperti Selenium atau Playwright:

  1. Baca data-sitekey dari halaman, lalu gunakan untuk membuat tugas dan mendapatkan token.
  2. Tulis token ke textarea g-recaptcha-response di halaman.
  3. Jika halaman memiliki fungsi callback (data-callback="..."), panggil dengan token tersebut. Di sebagian situs, tombol kirim baru bisa diklik setelah callback dipanggil.
  4. Kirim formulir.
// Step 2: write the token (run in the page)
document.getElementById('g-recaptcha-response').value = 'TOKEN';
// Step 3: call the callback if there is one, e.g. data-callback="onSuccess"
onSuccess('TOKEN');

Jika ada beberapa reCAPTCHA di halaman, id textarea bisa berbentuk g-recaptcha-response-1. Jika textarea tidak ditemukan, selesaikan verifikasi secara manual sekali, lalu cari 03A di Elements untuk melihat di mana hasilnya disimpan. Cara menemukan fungsi callback ada di Menemukan parameter reCAPTCHA.

Contoh lengkap (Selenium 4):

recaptcha_selenium.py
"""Solve reCAPTCHA v2 on Google's demo page in a real browser with Selenium 4:
get a token from YesCaptcha, put it into the page, then submit the form.
Run: pip install requests selenium
export YESCAPTCHA_CLIENT_KEY=your_client_key
python recaptcha_selenium.py
Each run creates one NoCaptchaTaskProxyless task (charged per the price list).
"""
import os
import time
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]
API = "https://api.yescaptcha.com"
WEBSITE_URL = "https://www.google.com/recaptcha/api2/demo"
def call(method, payload):
data = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30).json()
if data.get("errorId"):
raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
return data
def get_token(website_url, website_key):
task = {"type": "NoCaptchaTaskProxyless", "websiteURL": website_url, "websiteKey": website_key}
task_id = call("createTask", {"task": task})["taskId"]
for _ in range(36):
time.sleep(5)
result = call("getTaskResult", {"taskId": task_id})
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
raise TimeoutError(task_id)
driver = webdriver.Chrome() # Selenium 4 downloads a matching chromedriver automatically
try:
driver.get(WEBSITE_URL)
site_key = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
token = get_token(WEBSITE_URL, site_key)
# Put the token where reCAPTCHA keeps it ...
driver.execute_script(
"document.getElementById('g-recaptcha-response').value = arguments[0];", token
)
# ... and, if the page uses a callback (data-callback="..."), call it:
callback = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-callback")
if callback:
driver.execute_script(f"window[{callback!r}](arguments[0]);", token)
driver.find_element(By.ID, "recaptcha-demo-submit").click()
time.sleep(2)
print("passed" if "Verification Success" in driver.page_source else "not passed")
finally:
driver.quit()

v3 tidak memiliki kotak centang. Halaman memanggil grecaptcha.execute(kunci situs, {action: '...'}) saat membutuhkan token, lalu menaruh token itu di request-nya sendiri (nama field ditentukan situs; yang umum adalah g-recaptcha-response, token, recaptchaToken). Caranya sama dengan Cara 1: cari request yang membawa token di Network, lalu tiru. Saat membuat tugas, pageAction harus sama dengan action di halaman.

  • Token kedaluwarsa: kirim secepat mungkin setelah didapat, jangan lebih dari 60 detik.
  • Field yang dikirim bukan yang diperiksa situs, atau ada field lain dan Cookie yang terlewat: bandingkan dengan request di browser satu per satu.
  • Situs juga memeriksa IP, User-Agent, dan sebagainya: gunakan jenis yang membawa proxy sendiri (seperti NoCaptchaTask), dan kirim lewat proxy yang sama.
  • Skor v3 kurang: pastikan pageAction, atau beralih ke jenis dengan skor tinggi tetap, lihat reCAPTCHA v3.
  • Sistem keamanan situs juga melihat sinyal perilaku lain. Jika tingkat lolos dengan token rendah, gunakan pengenalan gambar dengan klik sungguhan di browser, atau gunakan ekstensi browser.