Karşılaştırmalar

CAPTCHA Çözümü için Headless ve Başlı Chrome

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


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.

Bu makale için yorumlar devre dışı bırakılmıştır.