Kullanım Senaryoları

Headless Tarayıcı CAPTCHA Sorunları ve Çözümleri

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.

# 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.

İlgili Kılavuzlar

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