Giriş otomasyonunuz çoğu zaman tek bir noktada tıkanır: kullanıcı adı ve parola doğrudur, ama formun önündeki CAPTCHA akışı durdurur. Çözüm basit: formu kodunuz doldurup gönderir, CAPTCHA doğrulamasını ise CaptchaAI API'ye devredip token'a çevirirsiniz. reCAPTCHA v2, v3, Turnstile ya da görsel CAPTCHA fark etmez — akış aynıdır.
Aşağıda önce bu akışın mantığını, ardından tarayıcısız HTTP, Selenium ve Puppeteer için çalışan kodu bulacaksınız; sonunda çok faktörlü doğrulama, oturum kalıcılığı ve sık karşılaşılan hataları da ele alıyoruz.
Otomatik giriş akışı nasıl işler?
Sitenin türü ne olursa olsun, CAPTCHA korumalı bir girişte otomasyonunuz aynı dört adımı izler:
- Giriş sayfasını yükleyin ve formdaki
sitekeydeğerini (reCAPTCHA içindata-sitekey) çıkarın. sitekeyvepageurldeğerlerini CaptchaAI'ye gönderin; API bir görev kimliği döndürür.- Sonucu
res.phpüzerinden birkaç saniye arayla sorgulayın (periyodik sorgulama) ve hazır olan token'ı alın. - Token'ı forma yerleştirip kullanıcı adı ve parolayla birlikte gönderin.
Kodunuz yalnızca ikinci ve üçüncü adımları CaptchaAI'ye devreder; formu doldurma, çerez yönetimi ve gönderim tamamen sizde kalır. Bu yüzden aşağıdaki üç yöntemin tümü aynı solve_recaptcha yardımcı fonksiyonunu paylaşır, yalnızca formu sürme biçimleri değişir.
Giriş sayfalarında en sık görülen CAPTCHA türleri
Yöntemi belirleyen ilk şey, formun önündeki CAPTCHA türüdür:
| CAPTCHA | Sayfada nasıl görünür? | CaptchaAI yöntemi |
|---|---|---|
| reCAPTCHA v2 | Gönderimden önce onay kutusu veya görsel doğrulama | method=userrecaptcha |
| reCAPTCHA v3 | Görünmez puanlama; düşük puanlı istekleri engeller | method=userrecaptcha&version=v3 |
| Cloudflare Turnstile | Giriş formundan önce beliren widget | method=turnstile |
| Görsel CAPTCHA | Yazılması gereken metin görseli | method=base64 |
Yöntem 1: Tarayıcısız HTTP isteğiyle giriş
En hafif yol budur: form standart bir POST isteğini kabul ediyorsa tarayıcı açmadan doğrudan HTTP ile çalışırsınız. solve_recaptcha yardımcı fonksiyonu görevi gönderir ve token hazır olana kadar res.php'yi sorgular:
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha(site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
task_id = resp.text.split("|")[1]
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
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
# Login flow
session = requests.Session()
login_url = "https://staging.example.com/qa-login"
# Load login page to get cookies and site key
page = session.get(login_url)
# Extract site_key from the page HTML...
site_key = "6Le-wvkS..."
# Solve CAPTCHA
token = solve_recaptcha(site_key, login_url)
# Submit login form
resp = session.post(login_url, data={
"username": "user@example.com",
"password": "your_password",
"g-recaptcha-response": token
})
if resp.url != login_url:
print("Login successful!")
# session now has auth cookies for subsequent requests
Yöntem 2: Selenium (Python)
Sayfa alanları JavaScript ile oluşturuyorsa veya widget dinamik yükleniyorsa gerçek bir tarayıcıya ihtiyacınız olur. Selenium form alanlarını doldurur, data-sitekey değerini okur ve çözülen token'ı sayfaya enjekte eder:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time
API_KEY = "YOUR_API_KEY"
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)
# Navigate to login page
driver.get("https://staging.example.com/qa-login")
wait = WebDriverWait(driver, 10)
# Fill in credentials
username_field = wait.until(EC.presence_of_element_located((By.NAME, "username")))
username_field.send_keys("user@example.com")
driver.find_element(By.NAME, "password").send_keys("your_password")
# Extract site key and solve
recaptcha = driver.find_element(By.CLASS_NAME, "g-recaptcha")
site_key = recaptcha.get_attribute("data-sitekey")
token = solve_recaptcha(site_key, driver.current_url)
# Inject token
driver.execute_script(
f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)
# Submit
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
wait.until(EC.url_changes(driver.current_url))
print(f"Logged in! Now at: {driver.current_url}")
Yöntem 3: Puppeteer (Node.js)
Node.js tarafında aynı mantığı Puppeteer ile kurarsınız. solveRecaptcha token'ı çözer; ardından onu g-recaptcha-response alanına enjekte edip formu gönderirsiniz:
const puppeteer = require("puppeteer");
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
async function solveRecaptcha(siteKey, pageUrl) {
const submit = await axios.get("https://ocr.captchaai.com/in.php", {
params: {
key: API_KEY,
method: "userrecaptcha",
googlekey: siteKey,
pageurl: pageUrl,
},
});
const taskId = submit.data.split("|")[1];
while (true) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: API_KEY, action: "get", id: taskId },
});
if (result.data === "CAPCHA_NOT_READY") continue;
if (result.data.startsWith("OK|")) return result.data.split("|")[1];
throw new Error(result.data);
}
}
(async () => {
const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://staging.example.com/qa-login");
// Fill credentials
await page.type("#username", "user@example.com");
await page.type("#password", "your_password");
// Get site key and solve
const siteKey = await page.$eval(".g-recaptcha", (el) =>
el.getAttribute("data-sitekey")
);
const token = await solveRecaptcha(siteKey, page.url());
// Inject and submit
await page.evaluate(
(t) => (document.getElementById("g-recaptcha-response").innerHTML = t),
token
);
await page.click('button[type="submit"]');
await page.waitForNavigation();
console.log("Logged in:", page.url());
await browser.close();
})();
Çok faktörlü doğrulama ile CAPTCHA'yı birlikte ele alma
Bazı siteler CAPTCHA'yı çok faktörlü doğrulamayla (MFA) birleştirir. Bu durumda CAPTCHA çözümü yalnızca ilk kapıyı açar; ardından SMS ya da TOTP kodunu ikinci bir adımda göndermeniz gerekir:
# Step 1: Solve CAPTCHA and submit login
token = solve_recaptcha(site_key, login_url)
resp = session.post(login_url, data={
"username": "user@example.com",
"password": "your_password",
"g-recaptcha-response": token
})
# Step 2: Handle MFA page (if redirected)
if "verify" in resp.url or "mfa" in resp.url:
# Your MFA code logic here
mfa_code = get_mfa_code()
resp = session.post(resp.url, data={"code": mfa_code})
# Step 3: Verify logged in
assert "dashboard" in resp.url
Giriş sonrası oturumu korumak
CAPTCHA çözülüp giriş tamamlandıktan sonra iş bitmez: sonraki her kimlik doğrulamalı istek oturum çerezlerinize bağlıdır. Oturumu sağlam tutmak için:
- Python tarafında tüm istekleri tek bir
requests.Session()nesnesi üzerinden yürütün; çerezler otomatik taşınır. - Selenium veya Puppeteer kullanıyorsanız aynı tarayıcı örneğini kapatmadan devam edin.
- Giriş sırasında dönen
Set-Cookiebaşlıklarını ve varsa CSRF token'ını saklayıp sonraki isteklere ekleyin. - Oturum zaman aşımına uğrarsa akışı baştan çalıştırıp yeni bir token alın; süresi dolmuş token'ı asla yeniden kullanmayın.
Yerel senaryo: bir e-ticaret giriş akışını test etmek
İstanbul'da serbest çalışan bir otomasyon geliştiricisi olarak, bir müşterinin ödeme panelindeki giriş akışını her sürümden önce test ettiğinizi düşünün. Test ortamındaki (staging) form reCAPTCHA v2 ile korunuyor ve doğrulamayı elle çözmek her koşuda dakikalarınızı yiyor. Formu Selenium doldurur, CAPTCHA'yı CaptchaAI çözer; senaryo insan müdahalesi olmadan akar. Maliyet, thread tabanlı fiyatlandırma sayesinde öngörülebilir kalır — BASIC planı ($15/ay, 5 thread) küçük bir test paketine yeter ve TL oynaklığından etkilenmez.
Otomasyonu yalnızca erişim yetkiniz olan hesaplarda ve test ortamlarında çalıştırın; kişisel veri içeren akışlarda KVKK yükümlülükleri geçerlidir.
Sık karşılaşılan sorunlar ve çözümleri
Otomatik giriş akışında en çok karşılaşılan dört durum ve hızlı çözümleri:
| Sorun | Sebep | Çözüm |
|---|---|---|
| Giriş yeniden CAPTCHA sayfasına dönüyor | Token'ın süresi doldu | 60 saniye içinde çözüp gönderin |
| Doğru parolayla "Geçersiz kimlik bilgileri" | CSRF token'ı eksik | Giriş sayfasından CSRF token'ını çıkarıp isteğe ekleyin |
| Oturum açıldıktan sonra kayboluyor | Çerezler kalıcı değil | requests.Session() veya tarayıcı çerezlerini kullanın |
| reCAPTCHA v3 token'a rağmen engelliyor | Puan çok düşük | action parametresini doğrulayın; CaptchaAI yüksek puana göre çözer |
Sık sorulan sorular
Tarayıcısız yöntem mi yoksa Selenium mu kullanmalıyım?
Form düz HTTP POST'u kabul ediyorsa tarayıcıya gerek yoktur; birinci yöntem en hafif olanıdır. Sayfa JavaScript'e bağlıysa Selenium veya Puppeteer seçin.
Token neden 60 saniye içinde gönderilmeli?
CAPTCHA token'larının geçerlilik süresi kısadır. Bekletirseniz hedef site reddeder ve giriş yeniden CAPTCHA'ya döner; çözümle form gönderimini ardışık tutun.
reCAPTCHA v3'te düşük puan alırsam ne olur?
action parametresinin sayfadakiyle eşleştiğinden emin olun. CaptchaAI yüksek puan için optimize eder, ama nihai kararı site verir.
Otomatik giriş için hangi CaptchaAI planı yeterli?
Tek bir test akışı için BASIC planı ($15/ay, 5 thread) genellikle yeterlidir; çok sayıda senaryoyu paralel çalıştırıyorsanız STANDARD ($30/ay, 15 thread) veya üstüne çıkın. Faturalama thread başınadır.
Otomatik girişi her sitede yapabilir miyim?
CaptchaAI yalnızca CAPTCHA bileşenini çözer; formu doldurma ve oturum yönetimi sizin otomasyonunuzun işidir. Yasal olarak yalnızca erişim yetkiniz olan hesaplarda ve izin verilen test ortamlarında çalıştırın.