Headless tarayıcı tespit edildi: nedenleri ve çözümleri (2026)
Bir site "headless tarayıcı tespit edildi" mesajı gösterir ya da otomatik tarayıcınıza sessizce farklı bir sayfa sunar. Siteler bunu yapar, çünkü headless tarayıcı pencere olmadan çalışır ve normal bir masaüstü tarayıcısından küçük ama ölçülebilir farklarla ayrılır. Bu rehber, sitelerin hangi sinyallere baktığını, kendi tarayıcınızın neyi açığa çıkardığını nasıl teşhis edeceğinizi ve sağlam bir çözümün nasıl görüneceğini anlatır. Ayrıca doğru yanıtın durmak ya da kontrolü bir captcha adımı olarak ele almak olduğu noktayı da ele alır.
Siteler headless tarayıcıları neden kontrol eder?
Otomasyon framework'leri gerçek bir tarayıcı motorunu sürer, dolayısıyla sayfanın büyük kısmı aynı çalışır. Farklar kenarlarda ortaya çıkar:
- Otomasyon işaretleri. Otomasyon araçlarıyla sürülen tarayıcılar geçmişte
navigator.webdriverözelliğinitrueolarak göstermiştir. Bazı framework'ler sayfada başka izler de bırakır. - Eksik ya da alışılmadık tarayıcı özellikleri. Headless bir derleme eklenti bildirmeyebilir, alışılmadık bir dil listesi gösterebilir ya da gerçek bir ekrana uymayan pencere boyutu verebilir.
- Render farkları. Canvas ve WebGL çıktısı headless ve headed ortamlar arasında farklılaşabilir, özellikle GPU'su olmayan bir sunucuda.
- Zamanlama. Otomatik tıklamalar ve sayfa yüklemeleri, hiçbir insanın üretmeyeceği bir ritimde gerçekleşebilir.
- Ağ davranışı. İstek başlıkları, bunların sırası ve TLS el sıkışması, tarayıcı olmayan bir istemciyi ele verebilir.
Siteler bu sinyalleri bir skorda birleştirir. Düşük bir skor, sessiz bir düşürme, ek kontroller ya da bir engelleme anlamına gelebilir.
Adım 1: tarayıcınızın neleri açığa çıkardığını görün
Bir şeyi değiştirmeden önce, bir sayfanın otomasyonunuzdan neler okuyabildiğine bakın. Aşağıdaki betik, sizin kontrol ettiğiniz bir sayfayı açar ve önemli sinyalleri yazdırır. Bu bir teşhis aracıdır: yalnızca kendi test sayfalarınızda kullanın, başkalarının sistemlerini yoklamak için kullanmayın.
from playwright.sync_api import sync_playwright
CHECK = """() => ({
webdriver: navigator.webdriver,
languages: navigator.languages,
plugins: navigator.plugins.length,
userAgent: navigator.userAgent,
screen: [screen.width, screen.height],
viewport: [window.innerWidth, window.innerHeight],
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
})"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com") # sahip olduğunuz bir sayfayla değiştirin
print(page.evaluate(CHECK))
browser.close()
Aynı betiği headless=False ile de çalıştırın, sonra iki çıktıyı karşılaştırın. Aradaki farklar, bir sitenin fark edebileceği şeylerdir.
Adım 2: sadece bayrakları değil, tutarsızlıkları düzeltin
Yalnızca bir bayrağı gizleyip diğerlerini olduğu gibi bırakmak en yaygın hatadır. User agent Windows dediği halde yazı tipleri, saat dilimi ve ekran boyutu Linux sunucusunu anlatıyorsa, bu tek bir özellikten daha güçlü bir sinyaldir. İç açıdan tutarlı bir ortam hedefleyin:
- Mümkünse headed bir tarayıcı kullanın ya da güncel bir masaüstü tarayıcıyla eşleşen bir headless mod seçin.
- Viewport ve dili birbiriyle uyumlu ayarlayın.
- Saat dilimini ve yerel ayarı kullandığınız IP adresiyle tutarlı tutun.
- Her kimlik için tek bir profil ve çerezlerini kullanın; her çalıştırmada sıfırdan başlamayın.
Playwright bunlardan birkaçını tek bir yerden ayarlamanıza izin verir:
context = browser.new_context(
locale="en-US",
timezone_id="America/New_York",
viewport={"width": 1366, "height": 768},
)
page = context.new_page()
Adım 3: yavaşlayın ve bir ziyaretçi gibi davranın
Otomasyon, bir insanın yapabileceğinden hızlı olduğunda belli olur. Sayfa yüklemeleri arasına gerçekçi duraklamalar ekleyin, aynı öğeye mükemmel bir ritimle tıklamaktan kaçının ve tek bir adresten yüzlerce sayfayı paralel açmayın. Daha az ve daha yavaş istek göndermek siteye binen yükü de azaltır, ki bu zaten doğru olan şeydir.
Adım 4: kontrolün bir captcha olduğunu bilin
Bazı tespit akışları engellemeyle değil, bir challenge ile sonlanır. Bir captcha widget'ı görürsünüz ve bu adım bir çözücüden token almayı gerektirir. Scarnox'ta bugün canlı olan captcha tipi PopularCaptcha'dır. PopularCaptcha Python rehberi, token'ın nasıl istenip gönderildiğini gösterir. Cloudflare Turnstile gibi diğer widget'lar yol haritasında yer alıyor ama henüz canlı değil; bir plan yapmadan önce captcha tipleri sayfasına bakın.
Bir captcha adımı, geri kalan kurulumunuzun sağlam olduğu anlamına gelmez. Site, ne yaparsanız yapın her headless oturumu engelliyorsa, bu sahibinin otomatik erişim istemediğinin açık bir işaretidir. Buna saygı gösterin.
Yapılmaması gerekenler
Otomasyonu yasaklayan bir siteden gizlemeye çalışmayın ve erişim kontrollerini aşmak için tespit-atlatma araçları kullanmayın. Bu, bu rehberin ele aldığı test ve açık veri toplamadan farklı bir projedir. Projeniz size verilmemiş bir erişime ihtiyaç duyuyorsa, site sahibine sorun ya da resmi bir API veya veri akışı arayın.
Web scraping'i sorumlu şekilde yapın
- Otomatize etmeden önce
robots.txtdosyasını ve sitenin kullanım koşullarını kontrol edin. - İstek hızını düşük tutun ve daha önce çektiğiniz sayfaları önbelleğe alın.
- Bir engellemeyi bir cevap olarak kabul edin, etrafından dolaşılacak bir bulmaca olarak değil.
- Yasal bir dayanağınız olmadan kişisel veri toplamayın.
Buradan sonra nereye?
Otomasyonunuz uçtan uca testler içinse yaklaşım farklıdır: testlerde captcha bölümüne bakın. Playwright ya da Puppeteer kullanıyorsanız, Playwright ve Puppeteer ile captcha yönetimi token'ın nereye gittiğini açıklar.
Ücretsiz deneme kredisiyle başlayın, kart gerekmez: hesap oluşturun ve PopularCaptcha akışını kendi sayfanızda test edin. Güncel fiyatlar için fiyatlandırma sayfasına bakın.