Bright Data ile CaptchaAI'yi birlikte kullanmanın mantığı tek cümlede özetlenir: proxy ağı sayfayı temiz bir IP üzerinden açar, CaptchaAI de karşınıza çıkan CAPTCHA'yı kendi altyapısında çözer. İki servis birbirinin işine karışmaz — biri trafiği taşır, diğeri doğrulamayı çözer. Bu rehber, Bright Data'nın (eski adıyla Luminati; 195 ülkede 72 milyondan fazla konut IP'si) proxy türlerini CaptchaAI API'siyle nasıl birleştireceğinizi, üretime hazır Python ve Node.js örnekleriyle anlatır. Kurulum sonunda elinizde:
- Temiz bir IP üzerinden çalışan, geo-eşleşmeli bir tarama katmanı,
- reCAPTCHA v2 ve Cloudflare Turnstile'ı otomatik çözen bir API çağrısı,
- token'ın kaynak IP ile tutarlı kalmasını sağlayan bir oturum stratejisi olacak.
Mimari: proxy tarar, CaptchaAI çözer
Your Script ──▶ Bright Data Proxy ──▶ Target Site
│
CAPTCHA appears
│
CaptchaAI API ──▶ Solved token
│
Inject token ◀─┘
CaptchaAI, isteklerinizi proxy'niz üzerinden geçirmez; çözümü kendi sunucularında, sunucu tarafında yapar. Yani proxy'niz gezinmeyi üstlenir, CaptchaAI ise yalnızca CAPTCHA'ları. Bu ayrım pratikte önemli: IP kaliteniz CAPTCHA'nın ne sıklıkta çıkacağını belirler, CaptchaAI ise çıkan CAPTCHA'yı çözer.
Bright Data proxy türleri ve CAPTCHA tetikleme oranı
Bright Data dört ana IP türü sunar. CAPTCHA açısından kural basittir: IP ne kadar gerçek bir kullanıcıya benziyorsa, doğrulama o kadar seyrek tetiklenir.
| Tür | IP sayısı | Hız | Maliyet | CAPTCHA oranı |
|---|---|---|---|---|
| Veri merkezi | 770.000+ | Hızlı | Düşük | Yüksek |
| Konut | 72 milyon+ | Orta | Orta | Düşük |
| ISP | 700.000+ | Hızlı | Yüksek | En düşük |
| Mobil | 7 milyon+ | Yavaş | Yüksek | Çok düşük |
Pratikte seçim şöyle özetlenebilir:
- Bütçe önceliğiniz varsa ve site az CAPTCHA çıkarıyorsa Veri merkezi ile başlayın.
- CAPTCHA yoğun sitelerde varsayılan tercih Konut'tur.
- Hem hız hem düşük tetikleme istiyorsanız ISP IP'leri iyi bir dengedir.
Önerilen zone (bölge) ayarları
Koda geçmeden önce, CAPTCHA yoğun işler için Bright Data panelinde şu zone yapılandırmasıyla başlamak en az sürprizi verir:
| Ayar | CAPTCHA için önerilen | Neden |
|---|---|---|
| Proxy türü | Konut | En düşük CAPTCHA tetikleme oranı |
| Ülke hedefleme | Hedef sitenin konumuyla eşleştirin | IP ile içerik tutarlılığı |
| Oturum türü | Sabit (sticky) | Token, kaynak IP ile eşleşmeli |
| IP kalite filtresi | Yüksek kalite | İşaretlenmiş IP'lerden kaçının |
| Maksimum eşzamanlılık | 100+ | Paralel CAPTCHA iş akışları |
Sık karşılaşılan sorunlar ve çözümleri
Entegrasyonu kurarken en çok bu beş durumla karşılaşırsınız:
| Sorun | Sebep | Çözüm |
|---|---|---|
| Proxy'den 407 | Yanlış kimlik bilgileri | Müşteri kimliği, zone ve şifreyi doğrulayın |
| Her istekte CAPTCHA çıkıyor | Veri merkezi IP'si algılandı | Konut bölgesine geçin |
| Token reddedildi | Çözüm ile gönderim arasında IP değişti | Sabit oturum kullanın |
| Yavaş yanıt | Yoğun çıkış düğümü | Daha az yoğun bir ülke/şehir hedefleyin |
| Bağlantı reddedildi | Bant genişliği sınırına ulaşıldı | Bright Data panelini kontrol edin |
Python ile entegrasyon
İki desen: requests ile HTTP kazıma ve tarayıcı gereken akışlar için Selenium.
Requests + Bright Data + CaptchaAI
import requests
import time
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
# Bright Data proxy credentials
BRIGHT_DATA_PROXY = {
"http": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
"https": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
}
def fetch_with_proxy(url):
"""Fetch a page through Bright Data proxy."""
resp = requests.get(
url,
proxies=BRIGHT_DATA_PROXY,
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/126.0.0.0 Safari/537.36"
},
timeout=30,
)
return resp
def solve_recaptcha(site_url, sitekey):
"""Solve reCAPTCHA v2 via CaptchaAI."""
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Solve timeout")
def solve_turnstile(site_url, sitekey):
"""Solve Cloudflare Turnstile via CaptchaAI."""
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": site_url,
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
Selenium + Bright Data + CaptchaAI
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
BRIGHT_DATA_HOST = "brd.superproxy.io"
BRIGHT_DATA_PORT = 22225
BRIGHT_DATA_USER = "brd-customer-CUSTOMER_ID-zone-residential"
BRIGHT_DATA_PASS = "PASSWORD"
def create_driver_with_proxy():
options = webdriver.ChromeOptions()
options.add_argument(
f"--proxy-server=http://{BRIGHT_DATA_HOST}:{BRIGHT_DATA_PORT}"
)
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)
return driver
def scrape_with_captcha_solving(url, sitekey=None):
driver = create_driver_with_proxy()
try:
driver.get(url)
time.sleep(3)
# Auto-detect sitekey if not provided
if not sitekey:
sitekey = driver.execute_script(
"return document.querySelector('[data-sitekey]')"
"?.getAttribute('data-sitekey')"
)
if sitekey:
token = solve_recaptcha(url, sitekey)
driver.execute_script(f"""
document.querySelector('#g-recaptcha-response').value = '{token}';
document.querySelectorAll('[name="g-recaptcha-response"]')
.forEach(el => {{ el.value = '{token}'; }});
""")
# Trigger callback
driver.execute_script("""
if (typeof ___grecaptcha_cfg !== 'undefined') {
const clients = ___grecaptcha_cfg.clients;
for (const key in clients) {
for (const prop in clients[key]) {
const val = clients[key][prop];
if (val && typeof val === 'object') {
for (const p in val) {
if (typeof val[p]?.callback === 'function') {
val[p].callback(arguments[0]);
}
}
}
}
}
}
""")
return driver.page_source
finally:
driver.quit()
Ülke bazlı hedefleme ile CAPTCHA oranını düşürme
Bright Data; ülke, eyalet ve şehir düzeyinde hedefleme yapmanıza izin verir. Hedef sitenin kitlesiyle aynı ülkeden çıkan bir IP kullanmak, IP ile içerik arasındaki tutarlılığı artırır ve CAPTCHA tetikleme olasılığını düşürür:
# Country targeting
proxy_us = "http://brd-customer-ID-zone-residential-country-us:PASS@brd.superproxy.io:22225"
proxy_uk = "http://brd-customer-ID-zone-residential-country-gb:PASS@brd.superproxy.io:22225"
proxy_de = "http://brd-customer-ID-zone-residential-country-de:PASS@brd.superproxy.io:22225"
# City targeting
proxy_nyc = "http://brd-customer-ID-zone-residential-country-us-city-newyork:PASS@brd.superproxy.io:22225"
# Use the geo-matched proxy for lower CAPTCHA rates
def scrape_localized(url, country="us"):
proxy = f"http://brd-customer-ID-zone-residential-country-{country}:PASS@brd.superproxy.io:22225"
resp = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
return resp
Örneğin İstanbul'daki bir ekip, kendi tr-TR ödeme akışını yetkili QA testinden geçirirken Türkiye ile eşleşen bir IP seçebilir; test trafiği coğrafi olarak tutarlı görünür. Kazınan veride kişisel bilgi varsa, bunun KVKK kapsamına girdiğini ve yalnızca yetkili iş akışlarında toplanabileceğini unutmayın.
Oturum yönetimi: sabit mi, dönüşümlü mü?
# Sticky session (same IP for entire session)
proxy_sticky = (
"http://brd-customer-ID-zone-residential"
"-session-abc123:PASS@brd.superproxy.io:22225"
)
# Rotating (new IP each request)
proxy_rotating = (
"http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
)
İki oturum modelini şöyle ayırın:
- Sabit (sticky) oturum: CAPTCHA iş akışları için doğru seçim. Token, sayfayı yükleyen IP'ye bağlıdır; çözüp aynı IP'den gönderdiğiniz sürece geçerlidir.
- Dönüşümlü oturum: Her istekte yeni IP verir. Geniş, CAPTCHA'sız kazıma işlerinde idealdir; ama çözüm ile gönderim arasında IP değişirse token reddedilir.
Pratik kural: token'ı ürettiğiniz ve enjekte ettiğiniz kısa pencerede aynı IP'de kalın.
Node.js ile entegrasyon
Aynı akışın Node.js karşılığı axios ve https-proxy-agent ile şöyle kurulur:
const axios = require("axios");
const https = require("https");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const CAPTCHAAI_URL = "https://ocr.captchaai.com";
const proxyAgent = new (require("https-proxy-agent"))(
"http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
);
async function fetchWithProxy(url) {
return axios.get(url, {
httpsAgent: proxyAgent,
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0",
},
});
}
async function solveCaptcha(siteUrl, sitekey) {
const submit = await axios.post(`${CAPTCHAAI_URL}/in.php`, null, {
params: {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
json: 1,
},
});
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get(`${CAPTCHAAI_URL}/res.php`, {
params: {
key: CAPTCHAAI_KEY,
action: "get",
id: taskId,
json: 1,
},
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
SSS
CaptchaAI, CAPTCHA'yı çözerken Bright Data proxy'mi kullanır mı?
Hayır. CaptchaAI, CAPTCHA'ları kendi altyapısında çözer; proxy'niz yalnızca sayfayı açmak için kullanılır. API'ye yalnızca sayfa URL'sini ve sitekey değerini gönderirsiniz.
CAPTCHA'nın sık çıktığı sitelerde hangi Bright Data IP türü daha iyi?
Konut veya ISP IP'leri. Veri merkezi IP'lerinin CAPTCHA tetikleme olasılığı daha yüksektir. ISP IP'leri, veri merkezi hızını konut IP'lerinin güven düzeyiyle birleştirir.
Token neden "IP değişti" gerekçesiyle reddediliyor?
Çünkü CAPTCHA token'ı, sayfayı yükleyen IP'ye bağlıdır. Sayfa yükleme ile form gönderimi arasında IP'niz döndüyse token geçersiz sayılır. Çözüm: o kısa pencere boyunca sabit oturumda kalın.
Bright Data yerine başka bir proxy ile CaptchaAI çalışır mı?
Evet. CaptchaAI proxy'den bağımsızdır; herhangi bir HTTP/HTTPS proxy sağlayıcısıyla aynı şekilde çalışır. Proxy seçimi yalnızca CAPTCHA'nın ne sıklıkta çıkacağını etkiler, çözüm tarafını değil.
CaptchaAI'nin fiyatı nedir, düşük hacim için uygun mu?
Planlar thread bazlıdır ve thread başına sınırsız çözüm içerir. En düşük plan BASIC ($15/ay, 5 thread) ile başlar; aylık sabit USD fiyatı, kur dalgalanmasından etkilenmeyen öngörülebilir bir maliyet sağlar.
Üretimde nelere dikkat etmeli
Örnekler çalışır durumda olsa da, ölçeğe çıkarken birkaç noktayı baştan planlayın:
- Thread sayısını iş yükünüze göre seçin. CaptchaAI thread bazlı faturalandırır; eşzamanlı CAPTCHA sayınız kadar thread'e ihtiyacınız var.
- Zaman aşımı ve yeniden deneme ekleyin.
res.phpsorgularınıza makul bir zaman aşımı ve üstel geri çekilme (exponential backoff) koyun; geçici hatalarda akış durmasın. - IP ile token'ı eşleştirin. Sabit oturumu, çözüm ve gönderim aynı IP'de kalacak biçimde kurun.
- Yanıt kodlarını izleyin. Proxy'den gelen 407 ve reddedilen token'ları loglayın; bunlar genelde kimlik bilgisi veya IP tutarlılığı sorununa işaret eder.
İlgili rehberler
- Dönüşümlü konut IP havuzlarıyla CAPTCHA çözme
- Proxy kalitesi CAPTCHA çözüm hızını nasıl etkiler
- ISP ve veri merkezi IP'lerinin CAPTCHA karşılaştırması
Bright Data'nın proxy ağını otomatik CAPTCHA çözümüyle birleştirin — CaptchaAI anahtarınızı alın ve otomasyonunuzu ölçeklendirin.