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.
Cara kerja
Section titled “Cara kerja”Alur pada akses normal:
- Halaman memuat reCAPTCHA, lalu pengguna menyelesaikan verifikasi;
- Google memberikan token ke halaman, dan halaman menaruhnya di textarea
g-recaptcha-response(atau meneruskannya ke fungsi callback); - Pengguna mengirim formulir, dan token ikut terkirim ke server situs;
- 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)”- Lakukan sekali secara manual di browser: tekan F12 untuk membuka panel Network, selesaikan captcha dan kirim formulir, lalu cari request yang mengirim formulir tersebut.
- Di Payload (atau Form Data) request itu, cari field yang membawa token, biasanya bernama
g-recaptcha-response, dengan token yang diawali03A. Sebagian situs mengganti namanya, misalnyagrecaptcharesponseataucaptcha. - 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:
"""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.pyEach run creates one NoCaptchaTaskProxyless task (charged per the price list)."""import osimport 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:
- Baca
data-sitekeydari halaman, lalu gunakan untuk membuat tugas dan mendapatkan token. - Tulis token ke textarea
g-recaptcha-responsedi halaman. - Jika halaman memiliki fungsi callback (
data-callback="..."), panggil dengan token tersebut. Di sebagian situs, tombol kirim baru bisa diklik setelah callback dipanggil. - 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):
"""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.pyEach run creates one NoCaptchaTaskProxyless task (charged per the price list)."""import osimport time
import requestsfrom selenium import webdriverfrom 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 automaticallytry: 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()reCAPTCHA v3
Section titled “reCAPTCHA v3”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.
Sudah dikirim tetapi tetap tidak lolos
Section titled “Sudah dikirim tetapi tetap tidak lolos”- 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.