Comparisons

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

Kısa cevap: CaptchaAI kullanıyorsanız çözüm oranı headless ve başlı Chrome'da birebir aynıdır — CAPTCHA'yı tarayıcı değil, sunucu tarafındaki API çözer. Mod seçimi çözümün başarısını değil iki şeyi etkiler: CAPTCHA'ların ne sıklıkta çıktığını ve reCAPTCHA v3'ün verdiği güven puanını. Karar bu yüzden "hangisi daha iyi çözer" değil, sunucu bütçeniz ve v3 hassasiyetinizle ilgilidir.


Hızlı karşılaştırma

Faktör Headless Chrome Başlı Chrome
Hız Hızlı (oluşturma yükü yok) Daha yavaş (arayüzü çizer)
Bellek ~100-200 MB ~300-500 MB
Sunucu dağıtımı Doğrudan Sanal ekran gerektirir
CAPTCHA algılaması Yüksek (tespit edilebilir sinyaller) Düşük (gerçek kullanıcı gibi görünür)
reCAPTCHA v3 puanı 0,1-0,3 (bot aralığı) 0,7-0,9 (insan aralığı)
Hata ayıklama Zor (görsel yok) Kolay (sayfayı görürsünüz)
Ölçeklendirme Mükemmel (düşük kaynak) Kaynak ağırlıklı

Performans karşılaştırması

Aşağıdaki değerler gözlemlenen ortalamalardır; donanıma, sürüme ve iş yüküne göre değişir.

Senaryo Headless Başlı Başlı + Xvfb
Başlangıç süresi ~1 sn ~2 sn ~2,5 sn
Sekme başına bellek 100-200 MB 300-500 MB 300-500 MB
Sayfa yükü (ortalama) 1,5 sn 2,5 sn 2,5 sn
reCAPTCHA v3 puanı 0,1-0,3 0,7-0,9 0,5-0,8
Maks. eş zamanlı (8 GB) 30-40 10-15 10-15
CAPTCHA çözüm oranı Aynı (API) Aynı (API) Aynı (API)

Mod yalnızca CAPTCHA sıklığını ve reCAPTCHA v3 puanlarını değiştirir; çözüm kalitesini değil.


Hangi modu seçmelisiniz?

İş yükünüzü aşağıdaki tabloyla eşleştirin:

Durum Önerilen mod
Ekransız sunucu / CI, yüksek hacim, sınırlı bellek Headless
Görsel hata ayıklama veya headless'ı engelleyen site Başlı
Yüksek reCAPTCHA v3 puanı gereken az sayıda akış Başlı + Xvfb
Sunucuda başlı seviyesinde direnç ama ekran yok Başlı + Xvfb

Örnek bir senaryo: İstanbul'daki bir otomasyon geliştiricisi, bir e-ticaret sitesinin ödeme adımını (checkout) tek bir bulut sunucusunda onlarca eş zamanlı oturumla QA'dan geçiriyor. Ekran olmadığı için headless doğal seçim; v3 puanının kritik olduğu az sayıdaki akışta başlı + Xvfb'ye geçiyor. CaptchaAI thread tabanlı faturalandırır: küçük testler BASIC ($15/ay, 5 thread), yüksek eş zamanlılık ADVANCE ($90/ay, 50 thread) ile karşılanır. Fiyatlar USD sabittir; TL dalgalanmasından bağımsız aylık maliyet, Türkiye'deki ekipler için gerçek avantajdır.


Headless Chrome neden yakalanır?

CAPTCHA sistemleri, tarayıcının otomasyon altında olup olmadığını bir dizi sinyalden anlar; headless mod bunları varsayılan olarak ele verir.

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

Algılama testi sonuçları

Aynı testleri üç yapılandırmada çalıştırınca fark netleşir: eski headless neredeyse her sinyalde ele verir, --headless=new bazılarını düzeltir.

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 ile gelen --headless=new, başlı Chrome ile aynı kod tabanını kullanarak oluşturmayı gerçekçi hale getirir:

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 kapatır ancak webdriver bayrağını hâlâ açığa çıkarır ve varsayılanda eklenti taşımaz — "daha iyi" olsa da "görünmez" değildir.


Headless modda CaptchaAI ile çözüm (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. Aşağıdaki akış sürücüyü oluşturur, sitekey'i çıkarır ve token'ı forma yazar:

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()

Sunucularda başlı Chrome: sanal ekran

Ekransız sunucuda başlı seviyesi direnç istiyorsanız çözüm Xvfb'dir: fiziksel ekran olmadan gerçek oluşturma sağlayan sanal bir ekran.

Xvfb ile 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"]

Node.js'te headless test profilini güçlendirme

puppeteer-extra ve bir eklentiyle headless profilini gerçek tarayıcıya yaklaştırıp CAPTCHA sıklığını düşürebilirsiniz. Görünen CAPTCHA'ları yine CaptchaAI çözer:

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();
}

Sık sorulan sorular

Headless mod CAPTCHA'ların daha sık çıkmasına neden olur mu?

Evet. Headless bot benzeri sinyaller ürettiği için siteler daha sık CAPTCHA gösterir. Sanal ekranlı başlı moda geçmek bu sıklığı azaltır — çıkan CAPTCHA'ları yine CaptchaAI çözer.

Ekranı olmayan bir sunucuda başlı Chrome çalıştırabilir miyim?

Evet. Xvfb ile sanal bir ekran oluşturursunuz; Chrome gerçek oluşturma yapar ama fiziksel monitöre ihtiyaç duymaz. xvfb-run veya PyVirtualDisplay yeterlidir.

Headless modda reCAPTCHA v3 puanları nasıl yükseltilir?

Headless'ta 0,7'nin üzeri nadirdir. Başlı + Xvfb'ye geçmek puanı yükseltir; ayrıca CaptchaAI'nin reCAPTCHA v3 çözümü tarayıcı modundan bağımsız olarak yüksek puanlı token döndürür.

Yüksek eş zamanlılık için hangi CaptchaAI planı yeterli?

Eş zamanlı oturum sayınız thread ihtiyacınızı belirler; her plan thread başına sınırsız çözüm içerir:

  • Küçük QA işleri: BASIC ($15/ay, 5 thread)
  • 50 oturuma kadar ölçeklenen işler: ADVANCE ($90/ay, 50 thread)

Sorun giderme

Sorun Sebep Düzeltme
Headless tespit edildi webdriver bayrağı açıkta Test profili yamaları veya CDP yapılandırması kullanın
Headless'ta düşük v3 puanı Oluşturma sinyalleri eksik Başlı + Xvfb'ye geçin
Xvfb çökmesi Ekran numarası çakışması --auto-servernum kullanın
Başlı modda yüksek bellek GPU süreci --disable-gpu bayrağını ekleyin
Headless'ta boş ekran görüntüsü Yanlış görünüm alanı --window-size=1920,1080 ayarlayın

İlgili kılavuzlar


İş akışınıza doğru tarayıcı modunu seçin, CaptchaAI anahtarınızı alın ve CAPTCHA'ları her yapılandırmada çözün.

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