Headless Chrome görünür bir pencere olmadan çalışır; hızlı, hafiftir ve sunucular için mükemmeldir. Ancak CAPTCHA sistemleri headless modu aktif olarak algılar. Doğru modu nasıl seçeceğiniz ve her ikisinde de CAPTCHA'ları nasıl çözeceğiniz aşağıda açıklanmıştır.
Hızlı Karşılaştırma
| Faktör | Headless Krom | Başlıklı Krom |
|---|---|---|
| Hız | Hızlı (görüntüleme yükü yok) | Daha yavaş (kullanıcı arayüzünü oluşturur) |
| Bellek | ~100-200MB | ~300-500MB |
| Sunucu dağıtımı | Yerli | Sanal ekran gerektirir |
| CAPTCHA tespiti | Yüksek (tespit edilebilir sinyaller) | Düşük (gerçek kullanıcı gibi görünüyor) |
| reCAPTCHA v3 puanı | 0,1-0,3 (bot aralığı) | 0,7-0,9 (insan aralığı) |
| Hata ayıklama | Daha zor (görsel yok) | Kolay (sayfaya bakın) |
| Ölçeklendirme | Mükemmel (düşük kaynaklar) | Kaynak ağırlıklı |
CAPTCHA'lar Headless Chrome'u Nasıl Algılıyor?
Algılama Sinyalleri
// Tests that CAPTCHA systems run
// 1. WebDriver flag (biggest tell)
navigator.userAgent // true in headless, undefined in real browser
// 2. Chrome object completeness
window.chrome // Missing or incomplete in headless
// 3. Plugins
navigator.plugins.length // 0 in headless, 3+ in headed
// 4. WebGL renderer
// Headless: "SwiftShader Renderer"
// Headed: "ANGLE (NVIDIA GeForce GTX 1080...)"
// 5. User-Agent contains "Headless"
navigator.userAgent.includes("Headless") // Old Chrome versions
// 6. Screen dimensions
screen.width === 0 // Some headless configs
// 7. Notification permission
Notification.permission // "denied" in headless without override
Tespit Testi Sonuçları
Signal Headed Headless New Headless (v112+)
─────────────────────────────────────────────────────────────
webdriver false true true
chrome object full partial improved
plugins 5 0 0
WebGL renderer ANGLE Swift Swift
screen.width 1920 800 800
UA "HeadlessChrome" no yes no (removed)
Chrome'un "Yeni Headless" Modu (v112+)
Chrome 112+, Chrome başlıklı aynı kod tabanını kullanan --headless=new'yi tanıttı:
from selenium import webdriver
# Old headless (more detectable)
options = webdriver.ChromeOptions()
options.add_argument("--headless") # Legacy mode
# New headless (less detectable)
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # Shares headed rendering
driver = webdriver.Chrome(options=options)
Yeni headless mod bazı algılama vektörlerini düzeltiyor ancak yine de navigator.userAgent'yi açığa çıkarıyor ve herhangi bir eklenti içermiyor.
Headless + CaptchaAI (Python)
CaptchaAI, CAPTCHA'ları sunucu tarafında çözdüğü için headless modda da eşit derecede iyi çalışır; tarayıcı modu, çözme API'sini etkilemez:
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
API_KEY = "YOUR_API_KEY"
API_URL = "https://ocr.captchaai.com"
def create_headless_driver():
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
options.add_argument(
"--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"
)
return webdriver.Chrome(options=options)
def solve_captcha(site_url, sitekey):
resp = requests.post(f"{API_URL}/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{API_URL}/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Solve timeout")
# Full headless workflow
driver = create_headless_driver()
try:
driver.get("https://example.com/form")
time.sleep(2)
sitekey = driver.execute_script(
"return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
)
if sitekey:
token = solve_captcha(driver.current_url, sitekey)
driver.execute_script(f"""
document.querySelector('#g-recaptcha-response').value = '{token}';
""")
driver.find_element(By.CSS_SELECTOR, "form").submit()
finally:
driver.quit()
Sunuculara Yönelik (Sanal Ekran)
Xvfb kullanarak başlı Chrome'u headless sunucularda çalıştırın:
Xvfb'li Linux
# Install
sudo apt-get install xvfb
# Run with virtual display
xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" python script.py
PyVirtualDisplay ile Python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(1920, 1080))
display.start()
options = webdriver.ChromeOptions()
# No --headless flag = headed mode in virtual display
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)
# Now runs headed Chrome with real rendering, but no physical display
Xvfb ile Docker
FROM python:3.12-slim
RUN apt-get update && apt-get install -y \
xvfb \
chromium \
chromium-driver \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app
CMD ["xvfb-run", "--auto-servernum", "python", "main.py"]
Headless + Gizli Yamalar (Node.js)
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer (varsayılan yapılandırma)");
puppeteer.use(StealthPlugin());
async function headlessStealth() {
const browser = await puppeteer.launch({
headless: "new",
args: [
"--no-sandbox",
"--window-size=1920,1080",
"--no-sandbox",
],
});
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
// Additional QA testi patches
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, "webdriver", {
get: () => undefined,
});
Object.defineProperty(navigator, "plugins", {
get: () => [1, 2, 3, 4, 5],
});
});
await page.goto("https://example.com/form");
// Detect and solve CAPTCHA with CaptchaAI
const sitekey = await page.evaluate(() =>
document.querySelector("[data-sitekey]")?.getAttribute("data-sitekey")
);
if (sitekey) {
// Call CaptchaAI API (see other guides for full implementation)
const token = await solveCaptchaAI(page.url(), sitekey);
await page.evaluate((t) => {
document.querySelector("#g-recaptcha-response").value = t;
}, token);
}
await browser.close();
}
Her Mod Ne Zaman Kullanılmalı?
Şu durumlarda Headless Kullanın:
- /CI sunucularda ekran olmadan çalışıyor
- 50'den fazla eş zamanlı oturuma ölçeklendirme
- Bellek sınırlıdır
- CaptchaAI tüm CAPTCHA çözümlerini yönetir (tarayıcı modu önemsizdir)
Şu durumlarda Başlı kullanın:
- CAPTCHA akışlarında görsel olarak hata ayıklama
- reCAPTCHA v3 puanları önemlidir (başta daha yüksek puanlar)
- Özellikle headless site bloklarını hedefleyin
- Ekranlı makinelerde çalıştırma
Başlı + Sanal Ekranı Şu Durumlarda Kullanın:
- Sunucularda üst düzeyde algılama direncine ihtiyaç var
- reCAPTCHA v3 headless oyunlarda düşük puanlar veriyor
- Bütçe ekstra belleğe izin verir (oturum başına ~2x)
Performans Karşılaştırmaları
| Senaryo | Headless | başlı | Başlıklı + Xvfb |
|---|---|---|---|
| Başlangıç zamanı | ~1s | ~2sn | ~2,5sn |
| Sekme başına bellek | 100-200MB | 300-500 MB | 300-500 MB |
| Sayfa yükü (ortalama) | 1,5 saniye | 2,5 saniye | 2,5 saniye |
| reCAPTCHA v3 puanı | 0.1-0.3 | 0.7-0.9 | 0,5-0,8 |
| Maksimum eşzamanlı (8GB) | 30-40 | 10-15 | 10-15 |
| CAPTCHA çözme oranı | Aynı (API) | Aynı (API) | Aynı (API) |
Önemli bilgi: CaptchaAI çözüm oranları, tarayıcı modundan bağımsız olarak aynıdır. Mod yalnızca CAPTCHA'ların görünme sıklığını ve reCAPTCHA v3 puanlarını etkiler.
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Headless tespit edildi | navigator.userAgent bayrağı |
Gizli eklenti veya CDP yamalarını kullanın |
| Headless modunda düşük v3 puanları | Oluşturma sinyalleri eksik | Başlıklı + Xvfb'ye geç |
| Xvfb'de çökme | Numara çakışmasını görüntüle | --auto-servernum'yi kullanın |
| Kafada yüksek hafıza | GPU süreci | --disable-gpu bayrağını ekle |
| Headless modda boş ekran görüntüleri | Yanlış görünüm alanı | --window-size=1920,1080'yi ayarlayın |
SSS
CaptchaAI headless mı yoksa başlı mı kullanmamı önemser mi?
Hayır. CaptchaAI, CAPTCHA'ları site anahtarını ve URL'yi kullanarak sunucu tarafında çözer. Tarayıcı modu çözümü etkilemez.
Yeni headless mod (--headless=new) tespit edilmeye karşı güvenli mi?
Eski headlesslardan daha iyi ama yine de tespit edilebilir. navigator.userAgent'yi veya eklenti sayısını kontrol eden siteler yine de onu işaretleyecektir.
Headless modunda reCAPTCHA v3 puanlarını 0,7'nin üzerinde alabilir miyim?
Nadiren. Headless mod, bot benzeri sinyaller üretir. Daha yüksek puanlar için head + Xvfb'yi kullanın veya CaptchaAI'nin yüksek puanlı jetonları döndüren v3 çözümünü kullanın.
Gizli yamalara mı yatırım yapmalıyım yoksa sadece CaptchaAI mi kullanmalıyım?
Her ikisi de. Gizlilik, CAPTCHA sıklığını azaltır (daha az çözüm = daha düşük maliyet). CaptchaAI hala görünen CAPTCHA'ları yönetir.
İlgili Kılavuzlar
- Tarayıcı test profil yapılandırması ve CAPTCHA
- Puppeteer Gizliliği + CaptchaAI
- Chrome DevTools Protokolü + CaptchaAI
CAPTCHA iş akışınız için doğru tarayıcı modunu seçin —CaptchaAI anahtarınızı alınve CAPTCHA'ları herhangi bir yapılandırmada çözün.