Kılavuzlar
reCAPTCHA için token gönderme
Bu sayfa Çince sürümden makine çevirisiyle hazırlanmıştır ve hatalar içerebilir. Geçerli olan Çince sürüm sürümüdür.
YesCaptcha’nın döndürdüğü gRecaptchaResponse, CAPTCHA’yı tamamladıktan sonra Google’ın sayfaya verdiği sonuçla aynı değerdir. Bunu aldıktan sonra, tıpkı bir tarayıcı gibi hedef siteye göndermeniz gerekir (Google’a veya YesCaptcha’ya değil); site token’ı Google ile doğrular ve geçişe izin verir. İki yol vardır: isteği doğrudan kendiniz göndermek veya gerçek bir tarayıcıda token’ı sayfaya yazıp göndermek.
Çalışma mantığı
Bölüm başlığı “Çalışma mantığı”Normal akış:
- Sayfa reCAPTCHA’yı yükler ve kullanıcı doğrulamayı tamamlar;
- Google sayfaya bir token verir; sayfa bunu
g-recaptcha-responsemetin kutusuna yazar (veya callback fonksiyonuna iletir); - Kullanıcı formu gönderir, token form ile birlikte sitenin sunucusuna gider;
- Sitenin sunucusu token’ı Google ile doğrular, geçerliyse geçişe izin verir.
YesCaptcha ile 1. ve 2. adımları biz yaparız: websiteURL ve websiteKey ile bir görev oluşturur, token’ı alır ve 3. adımdan devam edersiniz.
Yöntem 1: Doğrudan istekle gönderme (önerilir)
Bölüm başlığı “Yöntem 1: Doğrudan istekle gönderme (önerilir)”- Tarayıcıda bir kez normal şekilde işlem yapın: F12 ile Network panelini açın, CAPTCHA’yı tamamlayıp formu gönderin ve formu gönderen isteği bulun.
- İsteğin Payload (veya Form Data) bölümünde token’ı taşıyan alanı bulun; genellikle
g-recaptcha-responseadını taşır ve token03Aile başlar. Bazı siteler adı değiştirir, örneğingrecaptcharesponse,captcha. - Programınızdan aynı isteği gönderin ve bu alanın değerini YesCaptcha’nın döndürdüğü token ile değiştirin. Diğer alanlar, Cookie’ler ve istek başlıkları da tarayıcıdakiyle aynı olmalıdır; siteler çoğunlukla bunları da kontrol eder.
Google demo sayfası için eksiksiz örnek: önce çözüm alınır, ardından token g-recaptcha-response alanıyla demo sayfasına geri gönderilir:
"""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)Yöntem 2: Tarayıcıda doldurma (Selenium vb.)
Bölüm başlığı “Yöntem 2: Tarayıcıda doldurma (Selenium vb.)”Selenium, Playwright gibi araçlarla gerçek bir tarayıcıyı yönetirken:
- Sayfadan
data-sitekeydeğerini okuyun, bununla görev oluşturup token’ı alın. - Token’ı sayfadaki
g-recaptcha-responsemetin kutusuna yazın. - Sayfada bir callback fonksiyonu tanımlıysa (
data-callback="..."), token’ı vererek çağırın; bazı sitelerde gönder düğmesi ancak callback çağrıldıktan sonra tıklanabilir hale gelir. - Formu gönderin.
// 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');Sayfada birden fazla reCAPTCHA varsa metin kutusunun id’si g-recaptcha-response-1 gibi olabilir. Bu metin kutusunu bulamazsanız önce doğrulamayı elle bir kez tamamlayın, Elements panelinde 03A araması yapın ve sonucun nereye yazıldığına bakın. Callback fonksiyonunun nasıl bulunacağı için bkz. reCAPTCHA parametrelerini bulma.
Eksiksiz örnek (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
Bölüm başlığı “reCAPTCHA v3”v3’te onay kutusu yoktur; sayfa token’a ihtiyaç duyduğunda grecaptcha.execute(site anahtarı, {action: '...'}) çağırır ve token’ı kendi isteğine koyar (alan adını site belirler; yaygın olanlar g-recaptcha-response, token, recaptchaToken). Yöntem 1 ile aynı şekilde ilerleyin: Network panelinde token taşıyan isteği bulup aynısını gönderin; görev oluştururken pageAction sayfadaki action ile aynı olmalıdır.
Gönderdim ama yine geçmiyor
Bölüm başlığı “Gönderdim ama yine geçmiyor”- Token’ın süresi dolmuştur: aldıktan sonra hemen gönderin, 60 saniyeyi geçirmeyin.
- Sitenin kontrol ettiği alanı göndermemişsinizdir veya başka alanları ya da Cookie’leri atlamışsınızdır: tarayıcıdaki istekle alan alan karşılaştırın.
- Site IP, User-Agent gibi bilgileri de kontrol ediyordur: kendi proxy’nizi kullanan bir tür (örneğin
NoCaptchaTask) seçin ve gönderimi aynı proxy üzerinden yapın. - v3 skoru yetersizdir:
pageActiondeğerini doğrulayın veya sabit yüksek skorlu bir tür kullanın, bkz. reCAPTCHA v3. - Sitenin risk kontrolü başka davranış sinyallerine de bakar. Token yöntemiyle geçiş oranı düşükse görsel tanıma ile gerçek tarayıcıda tıklama yapabilir veya tarayıcı eklentisini kullanabilirsiniz.