Headless tarayıcılar CAPTCHA'ları normal tarayıcılardan daha sık tetikler. Siteler, JavaScript test profil yapılandırması yoluyla headless Chrome, Firefox ve WebKit'i algılar ve otomasyonu engellemeye yönelik zorluklar sunar. Her sorunun nasıl ele alınacağı aşağıda açıklanmıştır.
Headless Tarayıcılar Neden Daha Fazla CAPTCHA Alıyor?
| Tespit Yöntemi | Hangi Siteler Kontrol Ediliyor |
|---|---|
navigator.userAgent |
Headless modda true olarak ayarlayın |
| Pencere boyutları | Headless genellikle 800x600 varsayılanını kullanır |
| WebGL oluşturucu | Headless "SwiftShader"ı döndürür |
| Chrome Geliştirici Araçları Protokolü | CDP bağlantı noktası açık |
| Eksik eklentiler | PDF görüntüleyici, Flash vb. yok. |
| İzinler API'sı | Headless olarak farklı tepkiler |
| Kullanıcı Aracısı dizesi | "HeadlessChrome" alt dizesi |
Bu sinyaller birleştiğinde anti-bot sistemleri (reCAPTCHA, Cloudflare, DataDome) daha düşük güven puanları atar ve CAPTCHA'ları gösterir.
1. Çözüm: CAPTCHA'ları API aracılığıyla çözün
CAPTCHA'lardan tamamen tanılamaya çalışmak yerine, onları göründükleri anda çözün. CaptchaAI, CAPTCHA'ları sunucu tarafında çözdüğü için herhangi bir headless tarayıcıyla çalışır.
Selenyum (Python)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import time
API_KEY = "YOUR_API_KEY"
options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=options)
driver.get("https://staging.example.com/qa-login")
# Check for CAPTCHA
recaptcha = driver.find_elements("class name", "g-recaptcha")
if recaptcha:
site_key = recaptcha[0].get_attribute("data-sitekey")
# Solve via CaptchaAI
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": driver.current_url
})
task_id = resp.text.split("|")[1]
while True:
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
token = result.text.split("|")[1]
break
# Inject token
driver.execute_script(
f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)
driver.find_element("css selector", "form").submit()
Puppeteer (Node.js)
const puppeteer = require("puppeteer");
const axios = require("axios");
const API_KEY = "YOUR_API_KEY";
const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://staging.example.com/qa-login");
// Check for CAPTCHA
const siteKey = await page
.$eval(".g-recaptcha", (el) => el.getAttribute("data-sitekey"))
.catch(() => null);
if (siteKey) {
const submit = await axios.get("https://ocr.captchaai.com/in.php", {
params: {
key: API_KEY,
method: "userrecaptcha",
googlekey: siteKey,
pageurl: page.url(),
},
});
const taskId = submit.data.split("|")[1];
let token;
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;
token = result.data.split("|")[1];
break;
}
await page.evaluate((t) => {
document.getElementById("g-recaptcha-response").innerHTML = t;
}, token);
await page.click('button[type="submit"]');
}
2. Çözüm: CAPTCHA Frekansını Azaltın
CAPTCHA'ları her zaman API aracılığıyla çözebilseniz de, bunların görünme sıklığını azaltmak zamandan ve maliyetten tasarruf etmenizi sağlar.
navigator.userAgent'ı yamalayın
# Selenium
options.add_argument("--no-sandbox")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
// Puppeteer
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, "webdriver", { get: () => false });
});
Gerçekçi Pencere Boyutunu Ayarla
# Selenium
driver.set_window_size(1920, 1080)
// Puppeteer
await page.setViewport({ width: 1920, height: 1080 });
Gizli Eklentileri Kullanın
# Puppeteer
npm install puppeteer-extra puppeteer (varsayılan yapılandırma)
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer (varsayılan yapılandırma)");
puppeteer.use(StealthPlugin());
# Selenium
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True)
Çözüm 3: Cloudflare doğrulama akışı İşleme
Cloudflare meydan okuma sayfaları bir jetondan daha fazlasını gerektirir; qa_session_cookie çerezine ihtiyacınız vardır:
# CaptchaAI handles full Cloudflare doğrulama akışıs
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": "http://user:pass@proxy:port",
"proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]
# Result includes qa_session_cookie cookie and user_agent
# Use both to make subsequent requests
Tarayıcıya Göre Yaygın Sorunlar
| Tarayıcı | Sorun | Düzeltme |
|---|---|---|
| Headless Krom | navigator.userAgent = true |
--disable-blink-features bayrağını kullan |
| Puppeteer | Eksik tarayıcı eklentileri | puppeteer (varsayılan yapılandırma)'yi kullanın |
| Selenyum | enable-automation anahtarı |
excludeSwitches: ["enable-automation"] |
| Oyun yazarı | WebKit test profil yapılandırması | Gizli yamalarla Chromium kanalını kullanın |
| Hepsi | Tutarlı görünüm boyutu | 1920x1080'e ayarlayın veya rastgele ayarlayın |
SSS
Headless mod her zaman algılanıyor mu?
Her zaman değil. Doğru standart yapılandırmayla çoğu site headless tarayıcınızı işaretlemez. Ancak gelişmiş anti-bot sistemleri (Cloudflare, PerimeterX), gelişmiş test profil yapılandırması alma yoluyla headless modu hâlâ tespit edebiliyor.
Bunun yerine kafa modunu kullanmalı mıyım?
Başlıklı mod algılamayı azaltır ancak bir görüntüleme sunucusu gerektirir (Linux'ta Xvfb). CaptchaAI'nin API yaklaşımı, /headless modundan bağımsız olarak çalışır ve bu da onu daha güvenilir bir çözüm haline getirir.
CAPTCHA'lardan tamamen kaçınabilir miyim?
Güvenilir değil. İyi yapılandırılmış headless tarayıcılar bile sonuçta CAPTCHA'ları geniş ölçekte tetikler. CaptchaAI'yi CAPTCHA işleme katmanı olarak kullanmak, zorluklar ortaya çıktığında otomasyonunuzun devam etmesini sağlar.