3 Ekim 2026'da küçük bir stealth tarayıcı benchmark'ı yaptık: kontrol grubu olarak düz Playwright, ardından Patchright, nodriver, Camoufox ve Zendriver. Hepsini herkese açık bot tespit test sayfalarına karşı, bir kez Hetzner veri merkezi IP'sinden, bir kez de ABD residential proxy'si üzerinden çalıştırdık. Otomasyon kararlarının tamamını tarayıcı belirledi. Düz Playwright, iki IP'den de her çalıştırmada deviceandbrowserinfo, BrowserScan, Fingerprint playground'u ve Pixelscan tarafından işaretlendi. Headful çalıştırıldığında dört stealth araç, karar üretilen her çalıştırmada ilk üç sayfayı geçti; Pixelscan ise 39 headful çalıştırmanın 2'sini işaretledi (2'si daha n/a). Residential IP yalnızca ağa bakan kontrolleri etkiledi, o da her zaman doğru yönde değil.
Söz konusu olan, tek bir sunucudan ve tek bir proxy ülkesinden, test amaçlı hazırlanmış sayfalarda kaydedilmiş 54 çalıştırma; kimsenin üretimdeki anti-bot sistemine dair bir sıralama değil. Aşağıda yöntemi, ham kararları, verinin neyi desteklemediğini ve testi yeniden çalıştırmak için kodu bulacaksınız.
Stealth tarayıcı benchmark'ı: kısa cevap
Tarayıcı otomasyonu sızdırıyorsa residential IP onu kurtarmaz. Tarayıcı temizse IP çoğunlukla ağ tarafındaki kontrolleri etkiler: proxy tespiti, saat dilimi tutarlılığı ve WebRTC. Bu sayfalarda bunun iki yönlü etkisi oldu:
- Otomasyon kararları IP ile değişmedi. Playwright, 10 headful çalıştırmasının hepsinde, iki ağdan da deviceandbrowserinfo'da
isBot: true, BrowserScan'de "WebDriver: Robot" ve Fingerprint playground'unda "bad bot (type: webdriver)" sonucunu aldı. Patchright, nodriver, Zendriver ve Camoufox hiçbir headful çalıştırmada bu işaretlerden hiçbirini almadı. - Pixelscan veri merkezi IP'sini önemsedi. Hetzner IP'sinden yapılan 20 çalıştırmanın 20'sinde, hiç proxy kullanılmamasına rağmen "Proxy detected" yazdı. Residential proxy üzerinden 34 çalıştırmanın 3'ünde yazdı.
- Fingerprint playground'u residential IP'yi önemsedi. Proxy sinyali 34 residential çalıştırmanın 33'ünü işaretledi ve çoğu zaman bir proxy ağının adını verdi ("residential proxy from SOAX", "from INFATICA" gibi). Chrome tabanlı araçlar için Hetzner IP'sini işaretlemedi. Chrome tabanlı üç stealth araçta şüphe puanları veri merkezinden 0–6, sabit residential proxy üzerinden 8–24 oldu.
- Beş aracın üçü, proxy üzerinden çalışırken sunucunun gerçek IP'sini WebRTC ile açığa çıkardı. Playwright, Patchright ve nodriver bunu proxy'li her çalıştırmada yaptı. Zendriver WebRTC'yi varsayılan olarak engelliyor, Camoufox ise sahteliyor.
- Headless mod IP'den daha belirleyiciydi. Headless modda Patchright ve nodriver, headful modda geçtikleri sayfalarda işaretlendi.
Neyi çalıştırdık: sürümler, ağ koşulları, hedefler
Her şey Xvfb içeren tek bir Debian 12 container'ında, aynı anda tek tarayıcıyla, 4 çekirdekli bir Linux sunucuda çalıştı. Her araç kendi belgelerinin önerdiği başlatma yapılandırmasını kullandı, fazlasını değil: özel user agent yok, parmak izi enjeksiyonu yok, fare hareketi yok, kaynak engelleme yok. Patchright için bu, README'deki "Best Practice" yapılandırması: kalıcı context, gerçek Chrome, headful, no_viewport=True.
| Araç | Paket | Tarayıcı | Başlatma |
|---|---|---|---|
| Playwright (kontrol) | playwright 1.62.0 | Playwright Chromium 151.0.7922.34 | chromium.launch(headless=False), varsayılanlar |
| Patchright | patchright 1.63.0 | Google Chrome 154.0.8037.97 | launch_persistent_context(channel="chrome", headless=False, no_viewport=True) |
| nodriver | nodriver 0.50.3 | Google Chrome 154.0.8037.97 | start(headless=False, sandbox=False) |
| Zendriver | zendriver 0.17.1 | Google Chrome 154.0.8037.97 | start(headless=False, sandbox=False) |
| Camoufox | camoufox 0.5.6 | Camoufox 152.0.4-beta.31 | AsyncCamoufox(headless=False, os="linux", geoip=True) |
Baştan belirtelim, iki ödün verdik. Kontrol grubu güncel 1.63.0 değil, Playwright 1.62.0; çünkü camoufox 0.5.6 playwright<1.63 gerektiriyor ve bütün araçlar aynı ortamı paylaştı. Ayrıca Camoufox os="linux" ile ve yalnızca Linux fontlarıyla çalıştı, çünkü sunucunun diski neredeyse doluydu ve macOS ile Windows font paketlerini açmadık. Camoufox varsayılan olarak rastgele bir işletim sistemi seçerdi.
Ağ koşulları:
- Veri merkezi: sunucunun kendi IP'si, AS24940 Hetzner Online GmbH, Helsinki (ipinfo.io'ya göre).
- Residential, sabit: her çalıştırmada yeni bir sabit oturumla ABD residential çıkışı. Proxy'li her çalıştırmada tüm araçlar aynı küçük yerel relay üzerinden bağlandı. Relay proxy kimlik doğrulamasını ekliyor ve baytları sayıyor, çünkü nodriver ve Zendriver proxy kimlik bilgilerini bir Chrome flag'i içinde iletemiyor.
- Üç yan koşul: her bağlantıda yeni çıkış IP'si veren dönen bir residential geçiş, bir ısınma geçişi (aşağıda açıklanıyor) ve veri merkezi IP'sinden araç başına bir headless çalıştırma.
Hedefler, her çalıştırmada yeni bir tarayıcıda bu sırayla, her biri yeni sekmede ziyaret edildi: bot.sannysoft.com, BrowserScan bot tespiti, deviceandbrowserinfo "Are you a bot?", CreepJS, Fingerprint playground'u, nowsecure.nl (Cloudflare arkasında; düz curl cf-mitigated: challenge ile 403 alıyor) ve Pixelscan'in bot kontrolü ile parmak izi kontrolü. Fingerprint'in bot tespiti ürün sayfasını listeden çıkardık, çünkü canlı bir karar değil, yalnızca statik bir JSON örneği gösteriyor.
Ölçümler: sayfanın yüklenip yüklenmediği, sayfanın yazdığı haliyle karar ve bu kararın görünmesine kadar geçen süre (0,5 saniyede bir yoklama, 45 saniye zaman aşımı). Her ziyaret için sayfa metnini ve tam sayfa ekran görüntüsünü kaydettik. Ayrıştırılamayan bir karar "unparsed" olarak kaydedildi ve asla tahmin edilmedi. Dört headful ziyaret bu şekilde sonuçlandı: üç sayfa zaman aşımı ve güncelleme ortasında yakalanmış bir kayıt. Tablolarda bunlar n/a olarak sayılıyor.
Çalıştırmalar: veri merkezi, dönen ve sabit residential için araç ve koşul başına 3, headless ve ısınma için araç başına 1. Toplam 54 çalıştırma, 06:50 ile 08:02 UTC arasında.
Sonuçlar: tarayıcı düzeyindeki otomasyon kontrolleri
Tablo çalıştırmaları sayıyor: "3/3", sayfanın tarayıcıyı üç çalıştırmanın üçünde de işaretlediği anlamına geliyor. Her hücre ayrıştırılmış sonuç dosyasından geliyor.
| Araç | Ağ | sannysoft başarısız satırlar | BrowserScan işaretledi | deviceandbrowserinfo isBot | CreepJS headless | Fingerprint "Bot" | Pixelscan bot uyarısı |
|---|---|---|---|---|---|---|---|
| Playwright (kontrol) | Veri merkezi (Hetzner) | WebDriver | 3/3 | 3/3 | %33 | 3/3: You are a bad bot (type: webdriver) | 3/3 |
| Playwright (kontrol) | Residential ABD, sabit | WebDriver | 3/3 | 3/3 | %33 | 3/3: You are a bad bot (type: webdriver) | 3/3 |
| Patchright | Veri merkezi (Hetzner) | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| Patchright | Residential ABD, sabit | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| nodriver | Veri merkezi (Hetzner) | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| nodriver | Residential ABD, sabit | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/2 (+1 n/a) |
| Zendriver | Veri merkezi (Hetzner) | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| Zendriver | Residential ABD, sabit | yok | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| Camoufox | Veri merkezi (Hetzner) | Chrome | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
| Camoufox | Residential ABD, sabit | Chrome | 0/3 | 0/3 | %0 | Not detected (3/3) | 0/3 |
Tablonun göstermediği birkaç ayrıntı:
- sannysoft'ta Camoufox'un tek başarısız satırı "Chrome (New): missing". Firefox tabanlı bir tarayıcı için bu beklenen bir sonuç, otomasyon sızıntısı değil.
- CreepJS ayrıca "% like headless" puanı da veriyor. Bu puan her headful çalıştırmada Playwright için %50, Chrome tabanlı üç stealth araç için %44, Camoufox için %6 oldu. "% stealth" puanı her araçta %0'dı. CreepJS bu sayıların hiçbirini geçti/kaldı diye etiketlemiyor.
- Pixelscan'in bot kontrolü iki kez farklı sonuç verdi. Patchright tek ısınma çalıştırmasında "Bot Behavior Detected" (CDP kutucuğu) aldı, Zendriver de dönen geçişte bir kez. İkisi de ekran görüntülerinde görülüyor. İki Pixelscan ziyareti daha n/a. Biri zaman aşımına uğradı. Diğerinde metin kaydımız sayfayı güncelleme ortasında yakaladı; bir an sonra alınan ekran görüntüsünde "You're Definitely a Human" yazıyor.
- nowsecure.nl, veri merkezi IP'sinden çalışan düz Playwright dahil, her headful çalıştırmada sayfa içeriğini gösterdi ve ekranda bekleyen bir doğrulama kalmadı. Headful modda araçlar arasında hiçbir ayrım yapmadı.
Bu kontrollerin standart Playwright'ı neden yakaladığını (navigator.webdriver bayrağı, CDP Runtime.enable yan etkileri, başlatma flag'leri) Patchright incelememizde ve tarayıcı parmak izi rehberimizde anlatıyoruz.
Sonuçlar: IP'ye duyarlı sinyaller, veri merkezi ve residential
Sayfalardan yalnızca ikisi ağı puanlıyor. Fingerprint playground'u VPN, proxy, IP kara listesi ve bir şüphe puanı gösteriyor. Pixelscan'in parmak izi kontrolü proxy ve konum tutarlılığını gösteriyor. deviceandbrowserinfo ise testinin "IP itibarı veya kullanıcı davranışı kullanmadığını" açıkça söylüyor; kararlarının IP ile değişmemesi de bununla tutarlı.
| Araç | Ağ | Fingerprint proxy işareti | Fingerprint VPN işareti | Fingerprint şüphe puanı | Pixelscan "Proxy detected" | Pixelscan konum kontrolü | WebRTC proxy arkasındaki sunucu IP'sini sızdırıyor |
|---|---|---|---|---|---|---|---|
| Playwright (kontrol) | Veri merkezi (Hetzner) | 0/3 | 0/3 | 19 | 3/3 | Timezone spoofed | n/a (proxy yok; gerçek IP beklenen sonuç) |
| Playwright (kontrol) | Residential ABD, sabit | 2/3 | 0/3 | 25–27 | 0/3 | Timezone spoofed | 3/3 |
| Patchright | Veri merkezi (Hetzner) | 0/3 | 0/3 | 0–6 | 3/3 | Timezone spoofed | n/a (proxy yok; gerçek IP beklenen sonuç) |
| Patchright | Residential ABD, sabit | 3/3 | 0/3 | 8–20 | 0/3 | Timezone spoofed | 3/3 |
| nodriver | Veri merkezi (Hetzner) | 0/3 | 0/3 | 0–6 | 3/3 | Timezone spoofed | n/a (proxy yok; gerçek IP beklenen sonuç) |
| nodriver | Residential ABD, sabit | 3/3 | 2/3 | 10–23 | 0/3 | Timezone spoofed | 3/3 |
| Zendriver | Veri merkezi (Hetzner) | 0/3 | 0/3 | 0–6 | 3/3 | Timezone spoofed | engellendi (3/3) |
| Zendriver | Residential ABD, sabit | 3/3 | 0/3 | 8–24 | 0/3 | Timezone spoofed | engellendi (3/3) |
| Camoufox | Veri merkezi (Hetzner) | 3/3 | 3/3 | 17 | 3/3 | Timezone spoofed | n/a (proxy yok; gerçek IP beklenen sonuç) |
| Camoufox | Residential ABD, sabit | 3/3 | 0/3 | 4–14 | 1/3 | eşleşti (ABD şehri gösterildi) | 0/3 |
Residential IP'nin işe yaradığı yerler
Pixelscan "Proxy detected" yazmayı bıraktı. Hiç proxy kullanılmamasına rağmen bunu her veri merkezi çalıştırmasında yazmıştı; bu da hosting ASN'sini proxy olarak okuduğunu düşündürüyor. Residential havuz üzerinden 15 sabit çalıştırmanın 1'inde yazdı. Camoufox ayrıca eşleşen bir konum aldı. geoip=True seçeneği saat dilimini, dil ayarını, konumu ve WebRTC IP'sini çıkış IP'sinden belirliyor, bu yüzden Pixelscan "Timezone spoofed" yerine bir ABD şehri gösterdi.
Zarar verdiği ya da hiçbir şey değiştirmediği yerler
Fingerprint'in proxy sinyali, üç proxy modunun hepsinde, proxy'li 34 çalıştırmanın 33'ünde residential çıkışları proxy IP'si olarak tanıdı ve birçoğuna sağlayıcı adı iliştirdi. Bunu, Fingerprint'in residential havuzlar hakkında istihbaratı olduğu şeklinde yorumluyoruz. Bu, her IP'nin bir şey sızdırdığı anlamına gelmiyor ve belirli bir sitenin bu sinyalle ne yapacağı hakkında hiçbir şey söylemiyor. Chrome tabanlı stealth araçlarda şüphe puanı proxy üzerinden düşmedi, yükseldi. Playwright'ınki 19'dan 25–27'ye çıktı, tek ısınma çalıştırması da 47 aldı.
Bunun bir kısmı büyük olasılıkla bizim kendi hatamız. Chrome tabanlı araçlar container'ın UTC saat dilimini korudu; bu yüzden UTC saatli bir ABD IP'si, proxy'li her çalıştırmada Pixelscan'de "Timezone spoofed" olarak okundu. Camoufox aynı mekanizmayı ters yönde gösteriyor. Helsinki veri merkezi IP'sinden yapılan GeoIP sorgusu çıkışı Europe/Berlin'e yerleştirirken ipinfo Helsinki dedi. Ardından Fingerprint, üç veri merkezi çalıştırmasının hepsinde bir VPN ("timezone mismatch") ve düşük güvenilirlikli bir veri merkezi proxy'si işaretledi; aynı IP'deki Chrome araçları ise bu işaretlerin hiçbirini almadı. Birbirini tutmayan bir IP ve saat dilimi, hangi yönde olursa olsun fark ediliyor.
WebRTC proxy arkasındaki sunucuyu sızdırdı
CreepJS ve Pixelscan, proxy'li her Playwright, Patchright ve nodriver çalıştırmasında sunucunun Hetzner adresini WebRTC IP'si olarak gösterdi. HTTP trafiği residential çıkıştan geçti, ancak UDP üzerinden giden STUN isteği geçmedi. Zendriver varsayılan olarak --webrtc-ip-handling-policy=disable_non_proxied_udp ve --force-webrtc-ip-handling-policy parametrelerini veriyor; CreepJS de onun tüm çalıştırmalarında WebRTC'yi engellenmiş olarak raporladı. Camoufox adresi proxy çıkışıyla değiştirdi. Engellenmiş bir WebRTC de bazı sitelerin puanlayabileceği bir sinyaldir. Bu sayfalardan herhangi birinin bunu cezalandırıp cezalandırmadığını test etmedik; Pixelscan cezalandırmadı. Aradıkları diğer uyuşmazlıklar için anti-bot sistemleri proxy'leri nasıl tespit eder yazımıza bakın.
Headless mod, IP'den daha büyük bir ipucuydu
Veri merkezi IP'sinden araç başına bir headless çalıştırma yaptık. Örneklem diğerlerinden küçük, ama yön net:
| Araç (headless, veri merkezi IP'si, 1 çalıştırma) | sannysoft başarısız satırlar | deviceandbrowserinfo isBot | CreepJS headless | Fingerprint "Bot" | nowsecure.nl |
|---|---|---|---|---|---|
| Playwright (kontrol) | CHR_MEMORY:FAIL, HEADCHR_UA:FAIL, WebDriver | 1/1 | %100 | 1/1: You are a bad bot (type: headless_chrome) | 45 sn sonra "Just a moment..." ekranında takıldı |
| Patchright | CHR_MEMORY:FAIL, HEADCHR_UA:FAIL | 1/1 | %67 | 1/1: You are a bad bot (type: headless_chrome) | 45 sn sonra "Just a moment..." ekranında takıldı |
| nodriver | CHR_MEMORY:FAIL, HEADCHR_UA:FAIL | 1/1 | %67 | 1/1: You are a bad bot (type: headless_chrome) | 45 sn sonra "Just a moment..." ekranında takıldı |
| Zendriver | yok | 1/1 | %33 | Not detected (1/1) | 45 sn sonra "Just a moment..." ekranında takıldı |
| Camoufox | Chrome | 0/1 | %0 | Not detected (1/1) | sayfa yüklendi |
Patchright ve nodriver, yalnızca headless moda geçerek deviceandbrowserinfo ve Fingerprint'te temiz durumdan işaretli duruma düştü ("bad bot, type: headless_chrome"). sannysoft'ta HEADCHR_UA ve CHR_MEMORY satırları başarısız oldu. Zendriver dahil Chrome tabanlı her araç, nowsecure.nl'de Cloudflare'in "Just a moment..." sayfasında takılı kaldı. Headful modda ise düz Playwright dahil aynı araçlar doğrudan geçti. Zendriver, Fingerprint'in bot işaretinden kurtuldu ama deviceandbrowserinfo tarafından yine işaretlendi. Camoufox bu sayfaların hepsinde headless modda da headful moddaki gibi göründü.
Operasyonel iki bulgu: sabit oturumlar ve arka plan trafiği
Paralel ilk bağlantılar sabit oturumları bozdu
Sabit oturum kimliğiyle yapılan Chrome tabanlı çalıştırmalar çoğu zaman ilk sayfada bir IP, birkaç sayfa sonra başka bir IP gösterdi. Bu, 12 sabit çalıştırmanın 11'inde oldu. Camoufox 3 çalıştırmanın 3'ünde tek IP'de kaldı; büyük olasılıkla GeoIP sorgusu tarayıcı başlamadan önce tek bir istek yaptığı için. Durumu curl ile yeniden ürettik: yepyeni bir oturum kimliğiyle gönderilen altı paralel istek, iki denemede 3 ve 5 farklı IP döndürdü. Sonrasında sıralı istekler tek IP'de kaldı. Tarayıcıyı açmadan önce sıralı tek bir ısınma isteği eklemek, sorunu 4 çalıştırmanın 4'ünde çözdü. İlk proxy geçişimiz de gateway'in tanımadığı bir oturum parametresi kullanmıştı, bu yüzden her bağlantı sessizce yeni bir IP aldı. O geçiş yukarıda dönen koşul olarak raporlandı. İkisinden çıkan ders: sabitliğe güvenmeden önce iki sıralı istekle kontrol edin.
Bazı gerçek Chrome kurulumları proxy'niz üzerinden arka planda indirme yapıyor
Ölçülen residential trafikte, bu 9 sayfalık çalıştırma başına Playwright yaklaşık 7 MB, Patchright yaklaşık 8 MB (bir çalıştırmada 12 MB), Camoufox 9–11 MB kullandı. nodriver ve Zendriver çalıştırmalarının çoğu 40–61 MB kullandı. Host başına bayt kaydettiğimiz çalıştırmalarda bunun büyük kısmı bir Chrome arka plan indirmesi olan optimizationguide-pa.googleapis.com adresinden geliyordu. İki çalıştırma yalnızca yaklaşık 9 ve 15 MB kullandı, yani bu her seferinde olmuyor. Patchright da yeni bir profilde gerçek Chrome çalıştırıyor ama bunu göstermedi; demek ki aracın Chrome'u nasıl başlattığına bağlı. GB başına ödeme yapıyorsanız ölçeklendirmeden önce host başına baytları sayın.
Bu benchmark'ın göstermedikleri
- Bu bir üretim anti-bot testi değil. Bu sayfalar çoğunlukla tarayıcı tarafındaki izleri kontrol ediyor. Ticari sistemler buna TLS ve HTTP/2 parmak izlerini, davranışı, IP geçmişini ve siteye özel modelleri ekliyor. Buradaki temiz sonuç gerekli bir eşik, yeterli değil. TLS parmak izi rehberimiz, bu sayfaların neredeyse hiç dokunmadığı katmanlardan birini anlatıyor.
- Örneklem küçük: hücre başına 3 çalıştırma, tek gün, Finlandiya'da tek bir veri merkezi sunucusu, tek bir proxy ülkesi. Pixelscan'deki gibi tekil değişimler gürültüden ayrılamaz.
- Etkileşim yoktu. Tıklama, kaydırma, form ya da fare yolu olmadığı için davranışsal tespit sınanmadı.
- Bazı kontroller geçmiş tutuyor. Fingerprint playground'u cihaz başına geçmiş gösteriyor ("1 IP, 2 Linked IDs in the past 24 hours"), dolayısıyla tekrarlanan ziyaretler sonraki puanları etkilemiş olabilir.
- Varsayılanlar ayarlanmadı. Chrome tabanlı araçlar UTC ve en-US'i korudu, Camoufox Linux ile sınırlandı ve hiçbir şey README'lerin varsayılanlarının ötesinde sıkılaştırılmadı. İnce ayarlı bir kurulum farklı puan alabilir. Bir sonraki testimizin konusu bu olurdu; ölçtüğümüz bir şey değil.
- Sizin hedefleriniz farklı olacak. Veri merkezi mi residential IP mi kullanacağınız, neyi ve nereden topladığınıza bağlı. Maliyet tarafını scraping için residential ve datacenter yazımızda ele alıyoruz. Buna benzer bir şeyi gerçek bir siteye karşı çalıştırmadan önce robots.txt'yi, sitenin kullanım koşullarını ve kişisel veri kurallarını kontrol edin.
Kendiniz tekrarlayın
Test düzeneği yaklaşık 260 satır Python, 80 satırlık bir relay ve yalnızca kaydedilmiş sayfa metnini okuyan bir ayrıştırıcıdan oluşuyor. Aşağıda, verilerimizde temiz sonuç veren Patchright kurulumu var; yukarıdaki iki düzeltme de içinde: Chrome paralel bağlantılar açmadan önce sabit oturumu sabitleyen bir ısınma isteği ve Zendriver'ın WebRTC flag'leri. Bunu deviceandbrowserinfo'ya karşı bir ABD residential çıkışı üzerinden bir kez çalıştırdık ("isBot": false); bu kontrol 54 çalıştırmaya dahil değil.
import asyncio, os, tempfile, urllib.parse, urllib.request, uuid
from patchright.async_api import async_playwright
USER = os.environ["PROXY_USER"] # proxy kullanıcı adınız
PASS = os.environ["PROXY_PASS"] # proxy parolanız; asla koda gömmeyin
GATE = "gate.proxyhat.com:8080"
def sticky_username() -> str:
# her tarayıcı açılışında yeni bir oturum; -sid- çıkış IP'sini bağlantılar arasında korur
return f"{USER}-country-US-sid-{uuid.uuid4().hex[:10]}-ttl-30m"
def warm_up(username: str) -> str:
# Chrome paralel bağlantılar açmadan önce oturumu sabitleyen tek bir sıralı istek
url = f"http://{urllib.parse.quote(username)}:{urllib.parse.quote(PASS)}@{GATE}"
opener = urllib.request.build_opener(urllib.request.ProxyHandler({"http": url, "https": url}))
return opener.open("https://api.ipify.org", timeout=30).read().decode()
async def main():
username = sticky_username()
print("session pinned to", warm_up(username))
async with async_playwright() as p:
ctx = await p.chromium.launch_persistent_context(
user_data_dir=tempfile.mkdtemp(),
channel="chrome", # Patchright README'sinin önerdiği gibi gerçek Google Chrome
headless=False, # sunucuda Xvfb altında çalıştırın
no_viewport=True,
proxy={"server": f"http://{GATE}", "username": username, "password": PASS},
args=["--webrtc-ip-handling-policy=disable_non_proxied_udp",
"--force-webrtc-ip-handling-policy"],
)
page = await ctx.new_page()
await page.goto("https://deviceandbrowserinfo.com/are_you_a_bot")
await page.wait_for_function("document.body.innerText.includes('\"isBot\"')", timeout=45000)
print(await page.evaluate("document.body.innerText.match(/\"isBot\": (true|false)/)[0]"))
await ctx.close()
asyncio.run(main())
Kullanıcı adı soneki ProxyHat söz dizimi (hedefleme için -country-US, sabit oturum için -sid-…-ttl-30m). Kendi sağlayıcınızın biçimini kullanın. Uzun bir çalıştırmadan önce bir çıkışı kontrol etmek için ücretsiz proxy denetleyicisi bir sitenin ne gördüğünü gösterir. Bir hücreyi bizim gibi puanlamak için:
- Her çalıştırmada yeni bir tarayıcı başlatın, her sayfayı yeni sekmede ziyaret edin ve sayfanın kendi karar metni ekranda görünene kadar bekleyin. Sabit bir bekleme süresi kullanmayın. CreepJS'e, hesaplamaya devam ettiği için puanları göründükten sonra 6 saniye ek süre verdik.
- Sekmeyi kapatmadan önce
document.body.innerTextiçeriğini ve tam sayfa ekran görüntüsünü kaydedin. - Yalnızca sayfanın yazdığını ayrıştırın; örneğin deviceandbrowserinfo'daki
"isBot"JSON'unu, BrowserScan'dekiNormal/Robotçiftlerini ve CreepJS'teki "N% headless" değerini. Geri kalan her şey "unparsed". - Başta çıkış IP'sini kaydedin ve son sayfanın gösterdiği IP ile karşılaştırın. Farklıysa oturumunuz sabit değildi.
- Arka plan trafiği faturadan önce görünsün diye her çalıştırmada proxy baytlarını sayın.
Bu sonuçlarla ne yapmalı?
Önce tarayıcıyı düzeltin: standart Playwright iki IP'den de yakalandı, dört stealth araç headful modda ikisinden de yakalanmadı. Headless'ın hedeflerinizi geçtiğini ölçmediyseniz headful çalıştırın (sunucularda Xvfb ile). Ardından ağ tarafını tutarlı hale getirin: saat dilimini çıkış IP'siyle eşleştirin, WebRTC'yi engelleyin ya da proxy'den geçirin ve sabit oturumunuzun gerçekten sabit olduğunu doğrulayın. Residential proxy'yi ancak bundan sonra ekleyin ve proxy'ye duyarlı sağlayıcıların birçok residential IP'yi yine de tanıyacağını bekleyin. IP, işe veri merkezi trafiği etiketiyle başlayıp başlamayacağınızı belirler. Bot olarak işaretlenip işaretlenmeyeceğinizi ise tarayıcı belirler.






