Camoufox'u residential proxy ile çalıştırmak için Camoufox() ya da AsyncCamoufox() çağrısına Playwright tarzı bir proxy sözlüğü verin, saat dilimini, dil ayarını ve konumu çıkış IP'sinden okuması için geoip=True ayarlayın ve sabit (sticky) oturum kullanın; böylece Camoufox'un açılışta sorguladığı IP ile gezindiğiniz IP aynı olur. Camoufox, parmak izi yamaları JavaScript üzerine yazılmış bir katman değil, doğrudan C++ kodunda olan bir Firefox derlemesidir. Size kalan iş, ağ kimliği ile tarayıcı kimliğini birbiriyle tutarlı tutmaktır. Bu rehberin geri kalanında kodu, arkasındaki kontrolleri ve Camoufox'un hangi durumlarda yanlış araç olduğunu bulacaksınız.
Camoufox nedir ve neden residential proxy ile birlikte kullanılır?
Camoufox, scraping ve AI ajanları için geliştirilmiş açık kaynaklı bir Firefox çatallamasıdır. Python'dan (PyPI'daki camoufox paketi) ya da Eylül 2026'dan beri resmi npm başlatıcısıyla, alışıldık Playwright API'si üzerinden yönetilir. README dosyasına göre veriler "C++ uygulama düzeyinde yakalanıyor"; dolayısıyla navigator, ekran, WebGL veya fontları inceleyen bir sayfa yamalı JavaScript fonksiyonları değil, yerel getter'lar görür.
Bu, Chromium tarafındaki araçlardan farklı bir yaklaşım. Patchright, Chrome'un kendisine dokunmayan, bunun yerine sürücünün Chrome DevTools Protocol (CDP) üzerinden Runtime.enable çağırmak gibi tespit edilebilir işler yapmasını engelleyen yamalı bir Playwright sürücüsüdür. nodriver ise WebDriver'ı tamamen bırakır ve standart bir Chrome ile doğrudan CDP üzerinden konuşur. İkisi de otomasyonla çalışan bir Chrome'u Chrome gibi gösterir. Camoufox ise otomasyonla çalışan bir Firefox'u farklı farklı Firefox kurulumları gibi gösterir; Playwright onu CDP ile değil, Firefox'un kendi otomasyon protokolü Juggler ile kontrol eder. Camoufox yamaları Juggler'a sayfanın yalıtılmış bir kopyasını verir, bu yüzden Playwright'ın yardımcıları (örneğin window.__playwright__binding__) sayfa betiklerine hiçbir zaman görünmez.
Residential proxy'ye ihtiyaç duyulmasının nedeni, Camoufox'un IP'yi gizleyememesi. Her açılışta yeni bir cihaz kimliği üretilir: işletim sistemi, ekran, GPU, fontlar, sesler, dil. Bu kimlik "Almanya'da bir ev bilgisayarı" derken bağlantı Virginia'daki bir veri merkezi aralığından geliyorsa, parmak izi için harcanan emeğin hiçbir değeri kalmaz. README de Camoufox'un "dönen proxy'lerle (tercihen residential IP'lerle) kullanılmak üzere tasarlandığını" söylüyor.
Camoufox'u kurun ve tarayıcıyı indirin
Kurulum iki adımdan oluşur: önce Python paketi, ardından ayrıca indirilen yamalı Firefox ikili dosyası.
pip install -U "camoufox[geoip]"
python -m camoufox fetch
[geoip] eki geoip2 okuyucusunu ekler; Camoufox da bununla birlikte bir coğrafi konum veri seti indirir. Kurulum belgeleri bunu isteğe bağlı olarak tanımlasa da "proxy kullanıyorsanız kesinlikle önerilir" diyor; zaten geoip=True bu ek olmadan çalışmaz. Bağımlılıkları sabitlerken önemli olan iki sürüm notu:
- Ekim 2026 başı itibarıyla PyPI'daki güncel kararlı sürüm, Firefox 152 üzerine derlenmiş
camoufox 0.5.6(6 Eylül 2026). Eylül sonunda Firefox 156 tabanlı derlemeler GitHub ön sürümleri ve0.5.7b*betaları olarak yayımlanıyordu. Belirli bir düzeltmeye ihtiyacınız yoksa kararlı sürümü kullanın. - Paket Python 3.10 veya üstünü gerektiriyor ve sunucu modu Playwright'ın özel bir modülünü içe aktardığı için
pyproject.tomldosyasıplaywright<1.63sabitlemesi içeriyor. Projenizde başka bir bileşen en yeni Playwright'ı istiyorsa çakışma bekleyin.
Python API'si: sync, async ve önemli seçenekler
Camoufox, Playwright'ın Firefox başlatıcısını sarmalar; tarayıcı nesnesini aldıktan sonra bütün Playwright çağrıları her zamanki gibi çalışır. Sync ve async giriş noktaları context manager olarak kullanılır:
from camoufox.sync_api import Camoufox
with Camoufox(headless=True) as browser:
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
import asyncio
from camoufox.async_api import AsyncCamoufox
async def main():
async with AsyncCamoufox(headless=True) as browser:
page = await browser.new_page()
await page.goto("https://example.com")
print(await page.title())
asyncio.run(main())
Proxy ile çalışırken en çok şu anahtar kelime argümanları önemlidir. Açıklamalar kullanım belgelerinden ve pythonlib kaynak kodundaki launch_options() docstring'inden alınmıştır:
proxy: bir Playwright proxy sözlüğü (server,username,password).geoip=Trueise Camoufox çıkış IP'sini öğrenmek için açılışta bu proxy üzerinden bir istek de gönderir.geoip: çıkış IP'sini otomatik sorgulamak içinTrueya da doğrudan bir IP dizesi. Camoufox bu IP'den enlem/boylam, saat dilimi, ülke, dil ayarı ve WebRTC IP'sini belirler. Veritabanınıgeoip_dbseçer. 30 Eylül 2026'da main dalı varsayılanı "GeoIP AIO" yaptı ve GeoLite2'yi kullanımdan kaldırdı; kurulu sürümünüzün hangisini kullandığını kontrol edin.locale:"en-US"gibi açık bir dil ayarı,"US"gibi bir ülke kodu (bu durumda Camoufox o ülkedeki konuşur dağılımına göre bir dil seçer) ya da bir liste.IntlAPI'sini ilk öğe belirler.humanize:Trueya da imleç hareketinin saniye cinsinden azami süresini veren bir float. Kararlı 0.5.6 hâlâ Bézier eğrileri çiziyor. Main dalı 24 Eylül 2026'da Cursory veri setinden kaydedilmiş gerçek insan fare yollarını yeniden oynatmaya geçti; bunu yalnızca Firefox 156 ön sürümleri veya sonraki derlemelerle elde edersiniz.headless: varsayılanıFalse.True, Camoufox'un normal bir pencere gibi görünmesi için yamaladığı Firefox headless modunu kullanır."virtual"ise tarayıcıyı bir Xvfb sanal ekranı içinde headful çalıştırır. Bu seçenek yalnızca Linux'ta çalışır vexvfbpaketinin kurulu olmasını gerektirir.os: üretilen kimliği"windows","macos","linux"veya bunların bir listesiyle sınırlar.block_webrtc,block_images,block_webgl: açma/kapama anahtarları. Projenin kendi uyarılarına göre WebGL'i veya görselleri engellemenin büyük WAF'larda tespite yol açtığı bildirilmiş.
Sanal ekran sayfası "virtual" seçeneğinin gerekçesini açıklıyor: Camoufox headless modu yamalasa da "headless modda çalışmak gelecekte yine de tespit edilebilir hale gelebilir". Linux sunucuda Xvfb biraz ek bellek tüketir ama headless'a özgü bir dizi ipucunu ortadan kaldırır. Genellikle buna değer.
Çalışan bir örnek: ülke hedefli, sabit, tutarlı
Aşağıdaki örnek, ProxyHat gateway'i üzerinden Almanya çıkışlı çok adımlı bir oturum açıyor, saat dilimini ve dil ayarını Camoufox'un çıkış IP'sinden türetmesine izin veriyor ve asıl işe başlamadan önce kimliğin tutarlı olup olmadığını kontrol ediyor. Ülke ve oturum bilgisi proxy kullanıcı adında yer alır.
import asyncio
import secrets
from camoufox.async_api import AsyncCamoufox
PROXY_USER = "USERNAME"
PROXY_PASS = "PASSWORD"
def proxy_for(country: str, session_id: str) -> dict:
# Sabit oturum + ülke hedefi, ikisi de kullanıcı adında
return {
"server": "http://gate.proxyhat.com:8080",
"username": f"{PROXY_USER}-country-{country}-sid-{session_id}-ttl-10m",
"password": PROXY_PASS,
}
COHERENCE_JS = """() => ({
tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
offsetMin: new Date().getTimezoneOffset(),
lang: navigator.language,
langs: navigator.languages,
platform: navigator.platform,
})"""
async def run(country: str = "DE") -> None:
session_id = secrets.token_hex(4) # tüm akış için tek IP
async with AsyncCamoufox(
proxy=proxy_for(country, session_id),
geoip=True, # saat dilimi/dil/konum/WebRTC çıkış IP'sinden
humanize=True, # insansı imleç hareketi
headless="virtual", # Linux + Xvfb; diğer sistemlerde headless=True
os=["windows", "macos"],
) as browser:
page = await browser.new_page()
# 1. Dış dünya ne görüyor?
await page.goto("https://ipinfo.io/json")
exit_info = await page.evaluate("() => JSON.parse(document.body.innerText)")
# 2. Tarayıcı ne iddia ediyor?
claimed = await page.evaluate(COHERENCE_JS)
print("exit:", exit_info.get("ip"), exit_info.get("country"), exit_info.get("timezone"))
print("browser:", claimed)
if exit_info.get("timezone") != claimed["tz"]:
raise RuntimeError("timezone does not match exit IP; abort before real traffic")
# 3. Aynı IP üzerinde gerçek çok adımlı iş
await page.goto("https://example.com/", wait_until="domcontentloaded")
# ... giriş, sayfalama, form gönderimi; hepsi aynı session_id ile
asyncio.run(run("DE"))
Neden bu şekilde kurgulandığı:
geoip=Trueile sabit oturum şarttır. Sorgu bir kez, tarayıcı açılırken yapılır: Camoufox'unpublic_ip()fonksiyonu proxy'niz üzerinden herkese açık bir IP yankı servisine istek gönderir ve kimliği gelen yanıta göre oluşturur. Kullanıcı adında oturum yoksa dönen bir gateway, sonraki bağlantıya farklı bir residential IP verebilir. Tek saat dilimli bir ülkede bu nadiren fark edilir. ABD, Rusya, Brezilya veya Avustralya'da ise ikinci IP, tarayıcının bildirdiğinden birkaç saat dilimi uzakta olabilir. Sabit oturum, sorgulanan IP ile gezinilen IP'yi aynı yapar (ayrıntılar sabit ve dönen oturumlar rehberimizde).- Oturum kimliği sayfa başına değil, tarayıcı başına bir tane. Rotasyonu tarayıcıyı kapatıp yeni bir
session_idile yeniden açarak yapın. Böylece yeni IP ve yeni parmak izi aynı anda gelir; farklı bir ziyaretçi de tam olarak böyle görünür. - ipinfo kontrolü ucuz bir erken uyarı. Herhangi bir IP coğrafi konum uç noktası işinizi görür. Amaç, hedefe istek harcamadan önce ağın söyledikleriyle tarayıcının söylediklerini karşılaştırmak. Coğrafi konum veritabanları uç durumlarda birbirini tutmayabilir; bu yüzden uyuşmazlığı bir şeyin bozuk olduğunun kanıtı olarak değil, yeniden başlatma gerekçesi olarak görün.
- HTTP uç noktasını tercih edin. Playwright'ın ağ belgeleri kullanıcı adı/parola doğrulamasını yalnızca HTTP(S) proxy'ler için belgeliyor. SOCKS5 (
gate.proxyhat.com:1080) proxy türü olarak destekleniyor, ancak tarayıcı üzerinden kimlik doğrulamalı SOCKS genellikle kurulumların bozulduğu yer. Daha geniş artı ve eksiler için HTTP ve SOCKS5 yazımıza bakabilirsiniz.
Parmak izi tutarlılığı kontrol listesi
Tutarlılık; çıkış IP'sinin ülkesi, saat dilimi, dil, WebRTC adresi, işletim sistemi, fontlar ve GPU'nun hepsinin tek bir yerdeki makul tek bir makineyi tarif etmesi demektir. Tarayıcı tarafını Camoufox halleder; hataların çoğu sizin geçersiz kıldığınız ayarlardan kaynaklanır. Ölçeklendirmeden önce şunları kontrol edin:
- Çıkış IP'si ülkesi ↔ saat dilimi. Hem
Intl.DateTimeFormat().resolvedOptions().timeZonehem deDate.getTimezoneOffset()değerine bakın. Tespit betikleri IP'nin coğrafi olarak belirlenen saat dilimini tarayıcınınkiyle karşılaştırır ve uyuşmazlık en eski proxy ipuçlarından biridir. Sabit oturumdageoip=Trueile bu ikisi zaten tasarım gereği eşleşir. - Çıkış IP'si ülkesi ↔ dil.
navigator.language,navigator.languagesveAccept-Languagebaşlığı ülkeye uymalı. Camoufox başlığı venavigatordeğerlerini sizin yerinize senkronize tutar.locale=veriyorsanız bölge içeren tam bir dil ayarı verin ("de"değil,"de-DE"): proje, eksik bölgenin sizin için üretildiği ve bunun "IP'niz dil ayarındaki bölgeyle eşleşmiyorsa şüphe uyandırabileceği" konusunda uyarıyor. - WebRTC ↔ çıkış IP'si. WebRTC, proxy'yi atlayarak gerçek yerel veya genel adresinizi açığa çıkarabilir.
geoipetkin olduğunda Camoufox, WebRTC IPv4 adresini protokol düzeyinde çıkış IP'si olarak sahteler ve IPv6 DNS'i kapatır. WebRTC'yi engellemek yerine etkin ve sahtelenmiş halde bırakın, çünkü WebRTC'si hiç olmayan bir masaüstü Firefox alışılmadık bir görüntüdür. - Geolocation API ↔ IP. Camoufox enlem ve boylamı GeoIP sorgusundan doldurur ve izin tercihini ayarlar; böylece
navigator.permissions.query({name: "geolocation"}), verdiği konumla tutarlı biçimde "granted" döndürür. Konumuconfigiçinde elle ayarlamayın. Kütüphane bunun "hedef konumunuz IP'nizle eşleşmezse tespite yol açabileceği" uyarısını yapıyor. - İşletim sistemi ↔ fontlar ↔ GPU. Üreteç, gerçek trafiğin istatistiksel bir modelinden seçim yapar ve bir tutarlılık kontrolü, Apple M1 GPU'lu bir Windows user agent gibi imkânsız kombinasyonları reddeder.
custom_fonts_only=Truekullanmaktan kaçının vewebgl_configiçinde yalnızca modelin o işletim sisteminde gördüğü çiftleri verin (diğer her şeyValueErrorfırlatır). - User-Agent: dokunmayın.
User-Agentveyanavigatoralanlarını elle ayarlamak, ağ ile JavaScript'in birbirini yalanlamasının en hızlı yoludur. Kütüphane her ikisine karşı da uyarıyor. - IP türü ↔ iddia edilen cihaz. Bir hosting sağlayıcısının ASN'si üzerindeki tüketici masaüstü kimliği, parmak izi ne kadar iyi olursa olsun tutarsız bir eşleşmedir. Residential (veya ISP) IP'lerin maliyetini hak ettiği yer burasıdır. Bu sinyallerin sunucu tarafında nasıl birleştirildiğini tarayıcı parmak izi rehberimizde anlatıyoruz.
- Oturum başına tek kimlik. Çerezler, IP ve parmak izi ya birlikte değişmeli ya da hiç değişmemeli. Yeni bir IP ve yeni bir GPU ile geri dönen bir çerez, ne istikrarlı bir oturuma ne de temiz yeni bir oturuma benzer; insana en az benzeyen seçenek budur.
Camoufox, Patchright ve nodriver: hangisini seçmeli?
Önce motora göre seçin. Hedefiniz çoğunlukla Chrome trafiği görüyorsa ya da V8 davranışını kontrol ediyorsa bir Chromium aracı kullanın. JavaScript yaması yazmadan kapsamlı parmak izi rotasyonuna ihtiyacınız varsa ve Firefox trafiği sizin için sorun değilse Camoufox'u kullanın. Tablo, Ekim 2026 itibarıyla artı ve eksileri özetliyor.
| Camoufox | Patchright | nodriver | |
|---|---|---|---|
| Motor | Yamalı Firefox (Gecko + SpiderMonkey) | Chromium / Chrome (yamasız tarayıcı) | Kurulu Chrome, Chromium, Edge veya Brave |
| Kontrol protokolü | Juggler (yamalı, sayfadan yalıtılmış) | CDP; Runtime.enable yalıtılmış dünyalar ile atlanıyor | Doğrudan CDP, WebDriver yok |
| API | Playwright (Python, JS/TS) | Playwright'ın birebir yerine geçen sürümü (Python, Node, topluluk .NET) | Kendi async Python API'si |
| TLS parmak izinin kaynağı | Firefox'un kendi NSS yığını, yani Firefox ClientHello | Gerçek Chrome'un BoringSSL'i, özellikle channel="chrome" ile | Gerçek Chrome'un BoringSSL'i |
| Parmak izi rotasyonu | Yerleşik; her açılışta C++ düzeyinde üretiliyor | Yok. Enjeksiyonsuz gerçek Chrome öneriliyor | Yerleşik olarak yok |
| Bakım (Ekim 2026) | Yeniden aktif. Eylül 2026'da kararlı 0.5.6, ancak Mart 2025 ile Ocak 2026 arasında kararlı sürüm yok | Playwright'ı takip ediyor. v1.63.0 sürücüsü Eylül 2026'da çıktı | Son PyPI sürümü 0.50.3, Mayıs 2026 |
| Tipik başarısızlık nedenleri | Firefox'a özel sıkı inceleme, yalnızca Chrome'un geçebildiği motor kontrolleri, sağlayıcıların bulup kontrollerine eklediği parmak izi tutarsızlıkları | Console API devre dışı, yalnızca Chromium, genel headless ve davranış sinyalleri hâlâ geçerli | Ana dünyadaki değerlendirme gözlemlenebilir, parmak izi yönetimi yok, API yüzeyi Playwright'tan dar |
TLS satırı göründüğünden daha önemli. Üç araç da gerçek bir tarayıcı ağ yığını kullandığı için hiçbirinde Python'un requests kütüphanesi kendini Chrome diye tanıttığında ortaya çıkan uyuşmazlık yaşanmaz. Ancak Camoufox her zaman Firefox el sıkışması sunar. Bir sitenin modeli trafiğinin çoğunda Chrome biçimli TLS bekliyorsa, JA3/JA4'ün bu tür profillemede nasıl kullanıldığını TLS parmak izi rehberimizde okuyabilirsiniz.
Dürüst sınırlamalar
Camoufox tek bir işte iyidir: JavaScript yaması olmadan tutarlı ve dönen bir Firefox kimliği. Bunun da gerçek bedelleri var.
Firefox, trafiğin küçük bir dilimi
StatCounter, Eylül 2026'da Firefox'un dünya genelinde masaüstü gezinmenin yaklaşık %6,1'ini oluşturduğunu, Chrome'un ise yaklaşık %65'ini aldığını gösteriyor. Küçük bir kitleyi modellemek daha kolaydır ve içindeki her anormallik daha çok göze batar. Bazı siteler Chromium dışı tarayıcılara daha kolay doğrulama çıkarır. Hedefinizin bunu yapıp yapmadığını kendi trafiğinizle test etmeden bilemezsiniz.
Chrome taklidi yapamaz
README bunu açıkça söylüyor: Camoufox "Chromium parmak izlerinin enjeksiyonunu tam olarak desteklemiyor" ve bazı WAF'lar "sahtelenmesi imkânsız olan SpiderMonkey motor davranışını test ediyor". Site Chrome'da ısrar ediyorsa hiçbir Camoufox yapılandırması sizi oraya götüremez.
Bakım düzensiz oldu
Sürüm geçmişi bu boşluğu gösteriyor. Aradan önceki son kararlı derleme 15 Mart 2025'teki v135.0.1-beta.24. Projenin asıl geliştiricisi çalışmalara ara verdi ve ara sıra gelen topluluk commit'leri dışında Ocak 2026'daki Firefox 146 betasına kadar hiçbir şey yayımlanmadı. Ardından README, Clover Labs'i resmi bakımcı olarak açıkladı. O zamandan beri proje hızla ilerledi: Mayıs'ta Firefox 150 derlemesi, Temmuz'dan itibaren Firefox 152 kararlı derlemeleri, Eylül'de resmi bir TypeScript başlatıcısı ve ay sonunda Firefox 156 ön sürümleri. README'de hâlâ "Bu proje geliştirme aşamasındadır. Kararlı üretim kullanımına uygun olmayabilir" uyarısı duruyor. Sürümleri sabitleyin ve yükseltmeleri yaygınlaştırmadan önce test edin.
Parmak izleri hareketli bir hedef
Proje, anti-bot sağlayıcılarının "tek bir benzersiz tutarsızlık bulmak için Camoufox'u tekrar tekrar test ettiğini" ve ardından bunun için bir kontrol eklediğini açıkça belirtiyor. İnsansı imleç de "yeterince gelişmiş analizlerle yine de tespit edilebilir". C++ düzeyinde sahteleme bütün bir ipucu kategorisini ortadan kaldırır ama sizi kalıcı olarak tespit edilemez yapmaz.
Kaynak maliyeti
Proje, gereksiz bileşenlerden arındırılmış derlemesinin yaklaşık 200 MB ile çalıştığını ve standart Firefox'tan daha az bellek kullandığını iddia ediyor. Bu bizim değil, projenin verdiği rakam; üstüne sayfalarınız da ekleme yapacak. Yine de her kimlik için tam bir tarayıcı demek. Aynı parmak izini paylaşan çok sayıda context yerine eşzamanlı her oturum için bir tarayıcı planlayın, JavaScript gerektirmeyen uç noktalar için de düz HTTP istemcileri kullanın.
Camoufox'un çözmediği şeyler
- IP itibarı. İşaretlenmiş bir residential IP yine işaretli kalır. Çıkışları kullanmadan önce test edin; örneğin ücretsiz proxy denetleyicimizle.
- Hız limitleri ve davranış. Dakikada yüzlerce aynı yol, parmak izi ne olursa olsun otomasyon gibi görünür.
- CAPTCHA'lar, oturum açma ve erişim kuralları. Camoufox size hiçbir veriyi toplama izni vermez. robots.txt dosyasına ve sitenin kullanım koşullarına uyun, yetkiniz olmayan kimlik doğrulamanın arkasındaki verilerden uzak durun ve kişisel verileri herkese açık görünse bile GDPR/CCPA kapsamında düzenlenen veri olarak ele alın.
Mantıklı bir geçiş planı
Tek bir ülke ve tek bir sabit oturumla başlayın. Her açılışta tutarlılık kontrolünün çıktısını kaydedin ve tek bir motora bağlanmadan önce aynı hedefte Patchright ile oluşturduğunuz bir referansla engellenme oranlarını karşılaştırın. Camoufox kazanırsa, tek bir tarayıcıyı oturumlar arasında paylaştırarak değil, yeni oturum kimlikleriyle tarayıcı ekleyerek ölçeklendirin. Açıkça Chrome'u tercih eden bir sitede kaybederse, yukarıdaki tablo bir sonraki adımı gösteriyor. Residential gateway üç araçla da aynı şekilde çalışır. Ülke kodları ve plan seçenekleri lokasyonlar ve residential proxy sayfalarında.






