Proxy'leri Puppeteer ile birleştirmek, geliştiricilerin tarayıcı trafiğini ara sunucular üzerinden yönlendirerek IP tabanlı hız sınırlarını aşmasına ve coğrafi kısıtlamalı içeriğe erişmesine olanak tanır. Bu yapılandırma, yüksek başarı oranını korumanın kaynak IP adresini gizlemeye ve gelişmiş bot tespit sistemlerinden kaçınmak için insan davranışını taklit etmeye bağlı olduğu büyük ölçekli web scraping ve otomatik test senaryoları için şarttır.
Puppeteer otomasyonunda proxy'lerin kritik rolü
Chrome veya Chromium'u kontrol etmek için üst düzey bir API sunan Node.js kütüphanesi Puppeteer, web otomasyonu için güçlü bir araçtır. Ancak Puppeteer'ı tek ve sabit bir IP adresiyle kullanmak çoğu zaman hızlı tespit ve engellemeyle sonuçlanır. Modern siteler; trafik desenlerini, istek sıklığını ve IP itibarını analiz eden Advanced Bot Protection (ABP) mekanizmaları kullanır. Sağlam bir proxy stratejisi olmadan otomasyon betikleriniz büyük olasılıkla 403 Forbidden hataları, CAPTCHA'lar veya sitenin değiştirilmiş ya da eksik veri döndürdüğü "shadow ban" durumlarıyla karşılaşır.
Proxy'ler, Puppeteer örneğiniz ile hedef sunucu arasında bir tampon görevi görür. Çeşitli IP adreslerinden oluşan bir havuz kullanarak — özellikle GProxy gibi servislerin sağladığı residential veya mobil IP'lerle — istekleri hiçbir IP hedefin eşiğini aşmayacak şekilde dağıtabilirsiniz. Bu, istek hacminin yüksek ve hedef sitelerin otomatik trafiğe karşı çok hassas olduğu fiyat takibi, SERP (Search Engine Results Page) izleme ve rekabet istihbaratı gibi görevlerde özellikle önemlidir.
Coğrafi engellemeyi aşmak
Birçok platform, kullanıcının coğrafi konumuna göre farklı içerik sunar. Örneğin bir e-ticaret sitesi, New York'taki bir kullanıcıya Londra'daki bir kullanıcıdan farklı fiyat gösterebilir. Puppeteer varsayılan olarak üzerinde çalıştığı sunucunun IP'sini kullanır. Scraper'ınız Virginia'daki bir AWS örneğinde barındırılıyorsa US-East bakış açısıyla sınırlı kalırsınız. Puppeteer'ı GProxy'nin küresel ağını kullanacak şekilde yapılandırarak tarayıcı örneğinizi desteklenen herhangi bir ülkeye, şehre ve hatta belirli bir ISP'ye "ışınlayabilir", doğru ve yerelleştirilmiş veri toplamayı garanti edebilirsiniz.

Puppeteer'da temel proxy yapılandırması
Puppeteer ile proxy kullanmanın en doğrudan yolu --proxy-server başlatma argümanıdır. Bu yöntem proxy'yi tarayıcı örneğinin tamamı için ayarlar. Kimlik doğrulama gerektirmeyen bir proxy kullanıyorsanız kurulum çok basittir. Ancak yüksek kaliteli proxy servislerinin çoğu, yetkisiz kullanımı önlemek için kullanıcı adı ve parola ister.
Standart başlatma yapılandırması
Puppeteer'ı bir proxy sunucusuyla başlatmak için proxy URL'sini puppeteer.launch() metodundaki args dizisine geçirirsiniz. Bu, Chromium'a tüm ağ isteklerini belirtilen IP ve port üzerinden yönlendirmesini söyler.
const puppeteer = require('puppeteer');
(async () => {
const proxyUrl = 'http://your-proxy-address:port';
const browser = await puppeteer.launch({
args: [
`--proxy-server=${proxyUrl}`,
'--no-sandbox',
'--disable-setuid-sandbox'
],
});
const page = await browser.newPage();
await page.goto('https://api.ipify.org?format=json');
const content = await page.content();
console.log(content);
await browser.close();
})();
Proxy kimlik doğrulamasını yönetmek
GProxy gibi premium bir servis kullanırken genellikle kimlik bilgileriniz olur. Puppeteer bu bilgileri işlemek için yerleşik bir metot, page.authenticate(), sunar. Bu metodu hedef URL'ye gitmeden önce çağırmak önemlidir; çünkü tarayıcının kimlik doğrulama meydan okuma-yanıt döngüsüne bağlanır.
const page = await browser.newPage();
// Proxy için kimlik bilgilerini ayarla
await page.authenticate({
username: 'your_gproxy_username',
password: 'your_gproxy_password'
});
await page.goto('https://target-website.com');
Puppeteer iş yükleri için proxy türlerinin karşılaştırması
Doğru proxy türünü seçmek maliyet, hız ve anonimlik arasında bir dengedir. Tüm proxy'ler eşit değildir ve yanlış türü kullanmak Cloudflare ya da Akamai gibi platformlar tarafından anında tespit edilmenize yol açabilir.
| Proxy türü | Anonimlik seviyesi | Hız | Başarı oranı | En uygun kullanım |
|---|---|---|---|---|
| Veri merkezi | Düşük | Çok yüksek | Orta | Korumasız sitelerde yüksek hızlı scraping, dahili testler. |
| Residential | Yüksek | Orta | Çok yüksek | E-ticaret, sosyal medya, gelişmiş bot duvarlarını aşma. |
| Mobil (4G/5G) | En yüksek | Orta/düşük | Uç düzeyde | Mobil uygulama API scraping'i, çok kısıtlayıcı hesap oluşturma. |
| Statik residential | Yüksek | Yüksek | Yüksek | Tutarlı IP kimliği gerektiren hesapların yönetimi. |
Puppeteer tabanlı scraping projelerinin çoğunda residential proxy'ler sektör standardıdır. ISP'lerin gerçek ev kullanıcılarına atadığı IP adreslerini kullandıkları için gerçek kullanıcılardan ayırt edilemezler. GProxy'nin residential ağı, veri merkezi IP'lerinin işaretlenmesinin yaygın yolu olan IP alt ağ aralıklarına dayalı fingerprinting'i önlemek için gereken çeşitliliği sağlar.

Gelişmiş proxy yönetimi: rotasyon ve istek başına mantık
Proxy'yi başlatma anında ayarlamak basittir, ancak karmaşık projeler çoğu zaman daha ince ayarlı kontrol gerektirir. Örneğin proxy'yi her yeni sayfada, hatta sayfa içindeki her ağ isteğinde değiştirmek isteyebilirsiniz. Bu, hedef sitenin birkaç saniye içinde yüzlerce istek yapan tek bir IP görmesini engeller.
Kimlik doğrulamalı rotasyon için proxy-chain kullanımı
Puppeteer'daki yaygın bir sınırlama, --proxy-server argümanının statik olmasıdır. Tarayıcıyı yeniden başlatmadan proxy'yi değiştirmek için aracı olarak yerel bir proxy sunucusu kullanabilirsiniz. proxy-chain kütüphanesi bunun için mükemmeldir. Kimlik doğrulamayı ve upstream rotasyonu sizin yerinize üstlenen, "anonimleştirilmiş" yerel bir proxy URL'si oluşturmanıza olanak tanır.
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');
(async () => {
const oldProxyUrl = 'http://username:[email protected]:8000';
const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);
const browser = await puppeteer.launch({
args: [`--proxy-server=${newProxyUrl}`],
});
const page = await browser.newPage();
await page.goto('https://checkip.amazonaws.com');
// Temizlik: önce tarayıcıyı, sonra proxy tünelini kapat
await browser.close();
await proxyChain.closeAnonymizedProxy(newProxyUrl, true);
})();
Çoklu proxy akışları için istek yakalama
Farklı varlıkları (görseller, betikler gibi) farklı proxy'ler üzerinden yönlendirmeniz ya da bant genişliğinden tasarruf için belirli alan adlarında proxy'yi atlamanız gerekiyorsa Puppeteer'ın request interception özelliğini kullanabilirsiniz. Bunun puppeteer-proxy gibi ek kütüphaneler gerektirdiğini unutmayın; çünkü yerel Puppeteer, standart API üzerinden istek başına proxy değiştirmeyi desteklemez.
- Oturum kalıcılığı: oturum açıp ardından bir paneli kazımak gibi çok adımlı süreçlerde aynı IP'yi korumanız gerektiğinde "sticky session" kullanın.
- Rastgele rotasyon: her istekte veya her oturumda manuel yapılandırma olmadan otomatik olarak yeni bir IP almak için GProxy'nin rotasyonlu uç noktalarını kullanın.
- Backoff mantığı: 403 veya 429 durum kodu tespit edildiğinde yeni bir proxy'ye geçen bir yeniden deneme mekanizması kurun.
Tespiti aşmak: IP adresinin ötesi
GProxy'den alınan yüksek kaliteli bir residential proxy ile bile Puppeteer tespit edilebilir. Gelişmiş antibot sistemleri, tarayıcının bir betik tarafından yönetildiğini ele veren "sızıntıları" arar. Bunlar arasında navigator.webdriver özelliği, belirli WebGL imzaları ve tutarsız User-Agent başlıkları yer alır.
Puppeteer-Extra-Plugin-Stealth kullanımı
Proxy'lerinizin etkinliğini en üst düzeye çıkarmak için puppeteer-extra-plugin-stealth eklentisini kullanmalısınız. Bu eklenti, Chromium'un headless modda çalıştığını gizlemek için çeşitli teknikler uygular. Bot dedektörlerinin ortamın parmak izini çıkarmak için sıkça kullandığı özellikleri yamalar.
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.gproxy.com:8000'],
headless: true
});
const page = await browser.newPage();
await page.authenticate({ username: 'user', password: 'pass' });
// Stealth eklentisi tarayıcının normal bir kullanıcı gibi görünmesini sağlar
await page.goto('https://bot.sannysoft.com/');
await page.screenshot({ path: 'stealth-test.png' });
await browser.close();
})();
User-Agent ile proxy coğrafyasını eşleştirmek
Yaygın bir hata, ABD merkezli bir proxy kullanırken farklı bir dil veya bölge belirten bir User-Agent göndermektir (örneğin fr-FR). Tutarlılık esastır. GProxy IP'niz Almanya'daysa Accept-Language başlıklarınızın ve User-Agent değerinizin o bölgede bulunması muhtemel bir kullanıcıyı yansıttığından emin olun. Bu, tarayıcı parmak izinizin "entropisini" azaltır ve trafiğinizin meşru görünmesini sağlar.
Performans optimizasyonu ve sorun giderme
Puppeteer'ı proxy ile çalıştırmak gecikme ekler. Her istek önce proxy sunucusuna, sonra hedef siteye gitmek zorundadır. Yüksek performansı korumak için kaynakların nasıl yüklendiğini ve bağlantıların nasıl yönetildiğini optimize etmelisiniz.
Kaynak engelleme
Proxy bant genişliğinden tasarruf etmek ve sayfa yüklemelerini hızlandırmak için görseller, CSS ve yazı tipleri gibi gereksiz kaynakları engelleyin. Bu, veri kullanımına göre ücretlendiren residential proxy'lerde özellikle önemlidir.
await page.setRequestInterception(true);
page.on('request', (req) => {
if (['image', 'stylesheet', 'font'].includes(req.resourceType())) {
req.abort();
} else {
req.continue();
}
});
Yaygın sorun giderme adımları
- 407 Proxy Authentication Required: genellikle kimlik bilgilerinizin hatalı olduğu ya da IP'nizin GProxy panelinde beyaz listeye alınmadığı anlamına gelir.
page.authenticate()çağrısını tekrar kontrol edin. - Connection Timeout: proxy sunucusu kapalı olabilir veya hedef site o proxy IP'sini engelliyordur. Farklı bir proxy ile yeniden deneme döngüsü kurun.
- DNS sızıntıları: DNS sorgularının da proxy üzerinden gittiğinden emin olun. Puppeteer'ın
--proxy-serverargümanı bunu genelde halleder, ancak bir betikle "IP konumunuzu" kontrol edip proxy'nin konumuyla eşleştiğini doğrulayın. - Bellek sızıntıları: Puppeteer bellek açısından yoğun olabilir. Uzun süreli scraping işlerinde tarayıcıyı daima kapatın veya tarayıcı örneklerini etkin biçimde yönetmek için
generic-poolgibi bir kütüphane kullanın.
Temel çıkarımlar
Puppeteer'ı ölçekte başarıyla kullanmak basit bir betikten fazlasını gerektirir; modern web güvenliğinin karmaşık ortamında yol almak için gelişmiş bir proxy stratejisi gerekir. İtibarı yüksek IP'leri stealth teknikleriyle birleştirerek dayanıklı otomasyon araçları kurabilirsiniz.
- Yüksek değerli hedefler için residential proxy kullanın: veri merkezi IP'leri kolayca işaretlenir. GProxy gibi servisler, antibot önlemlerini aşmada en yüksek başarı oranını sunan residential IP'ler sağlar.
- Stealth eklentileri kullanın: proxy'lerin tek başına gizleyemediği headless tespit vektörlerini yamalamak için daima
puppeteer-extra-plugin-stealthkullanın. - Pratik ipucu 1: proxy başarı oranlarınızı izleyin. Belirli bir bölge veya sağlayıcı başarısız olmaya başlarsa tam engellemeyi önlemek için havuzunuzu hemen döndürün.
- Pratik ipucu 2: istek yakalama ile görselleri ve medya dosyalarını engelleyerek maliyetleri optimize edin; böylece proxy verinizi yalnızca gerçekten ihtiyaç duyduğunuz HTML ve JSON verisine harcarsınız.
- Pratik ipucu 3: parmak izi işaretlerini en aza indirmek için tarayıcı başlıklarınızı (dil, saat dilimi, User-Agent) proxy IP'nizin coğrafi konumuyla eşleştirin.
Bunları da okuyun
A-Parser için Proxy'ler: Arama Motoru Parsing Kurulumu
Xrumer İçin Proxy'ler: Hangisini Seçmeli ve Nasıl Kurmalı
Key Collector için proxy'ler: kurulum ve rotasyon
Binom Tracker: Trafik arbitrajı için proxy kurulumu
VKDog Pro: VK içerik otomatik paylaşımı ve grabbing
