İçeriğe geç

Puppeteer'de gelişmiş proxy ayarları: kimlik doğrulama ve özel başlıklar

Инструменты
Puppeteer'de gelişmiş proxy ayarları: kimlik doğrulama ve özel başlıklar

Puppeteer'de gelişmiş proxy yapılandırması, tarayıcı başlatılırken --proxy-server argümanının geçilmesini ve kimlik bilgilerinin page.authenticate() metoduyla işlenmesini gerektirir. Karmaşık scraping akışlarında geliştiricilerin ayrıca özel başlık enjeksiyonu ve dinamik rotasyon mantığı uygulaması gerekir; böylece gelişmiş anti-bot mekanizmaları aşılır ve yüksek başarı oranı korunur.

Puppeteer'de proxy entegrasyonunun temelleri

Headless Chrome veya Chromium'u kontrol etmek için kullanılan Node.js kütüphanesi Puppeteer, tek bir tarayıcı örneği içinde proxy'yi "anında değiştirme" özelliğini yerleşik olarak sunmaz. Bunun yerine proxy yapılandırması genellikle tarayıcı nesnesi başlatılırken süreç düzeyinde tanımlanır. GProxy gibi yüksek performanslı bir sağlayıcı kullanırken bağlantı dizesi genellikle proxy.gproxy.io:port biçimindedir.

Trafiği bir proxy üzerinden yönlendirmenin en doğrudan yolu, puppeteer.launch() yapılandırmasındaki args dizisini kullanmaktır. Bu, alttaki Chromium sürecine tüm ağ isteklerini belirtilen ağ geçidi üzerinden tünellemesini söyler. Python portu Pyppeteer'i kullanan geliştiriciler için sözdizimi yapısal olarak benzer kalır, ancak Python geleneklerine uyar.

import asyncio
from pyppeteer import launch

async def main():
    # GProxy sunucu adresinin tanımlanması
    proxy_server = "http://proxy.gproxy.io:8000"
    
    browser = await launch(
        headless=True,
        args=[
            f'--proxy-server={proxy_server}',
            '--no-sandbox',
            '--disable-setuid-sandbox'
        ]
    )
    page = await browser.newPage()
    await page.goto('https://api.ipify.org?format=json')
    print(await page.content())
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Bu yöntem statik proxy kullanımı için verimli olsa da bir kısıtlama yaratır: bu tarayıcı örneğinde açılan tüm sayfalar (sekmeler) aynı proxy'yi paylaşır. Projeniz her sekme için benzersiz bir IP adresi gerektiriyorsa, ya birden fazla tarayıcı örneği başlatmalı ya da bir proxy zincirleme ara katmanı kullanmalısınız.

Puppeteer'de gelişmiş proxy ayarları: kimlik doğrulama ve özel başlıklar

Proxy kimlik doğrulaması ve güvenlik

GProxy'nin sunduğu proxy'ler dahil olmak üzere premium residential ve mobil proxy'lerin çoğu kimlik doğrulama ister. Chromium geleneksel olarak iki tür kimlik doğrulamayı destekler: IP beyaz listesi ve kullanıcı adı/parola (Basic Auth). IP beyaz listesi el sıkışma yükünü ortadan kaldırdığı için daha hızlıdır; kullanıcı adı/parola doğrulaması ise yerel IP'nizin sık değişebildiği dağıtık bulut ortamlarında daha fazla esneklik sunar.

page.authenticate() metodu

Puppeteer'de kimlik bilgileri --proxy-server argümanı üzerinden verilemez (örneğin http://user:pass@host:port genellikle güvenlik nedeniyle yok sayılır veya engellenir). Bunun yerine page.authenticate() fonksiyonunu kullanmalısınız. Bu metot, tarayıcının ağ katmanındaki onAuthRequired olayını tetikler ve proxy bağlantıyı sorguladığında gerekli kimlik bilgilerini sağlar.

async def authenticated_scrape():
    browser = await launch(args=['--proxy-server=http://proxy.gproxy.io:8000'])
    page = await browser.newPage()
    
    # GProxy kimlik bilgileriyle kimlik doğrulama
    await page.authenticate({
        'username': 'your_gproxy_username',
        'password': 'your_gproxy_password'
    })
    
    await page.goto('https://target-website.com')
    # Scraper mantığı burada
    await browser.close()

"Proxy-Authorization" başlıklarını yönetme

Bazı uç durumlarda, özellikle özel proxy tünelleri veya araya giren proxy'lerle çalışırken Proxy-Authorization başlığını elle enjekte etmeniz gerekebilir. Bunun için kimlik bilgilerinizi base64 ile kodlayıp istek başlıklarına eklersiniz. Ancak GProxy ile Puppeteer kullanım senaryolarının %99'unda page.authenticate() metodu standart ve en güvenilir yaklaşımdır.

Fingerprint koruması için gelişmiş özel başlıklar

Proxy'ler IP adresinizi gizler, ancak tarayıcınızın kimliğini gizlemez. Cloudflare, Akamai ve DataDome gibi modern anti-scraping çözümleri, isteğin gerçek bir kullanıcıdan mı yoksa otomatik bir betikten mi geldiğini belirlemek için HTTP başlıklarını analiz eder. GProxy residential IP'lerinizi tamamlamak için başlıklarınızı meşru bir tarayıcının profiline uyacak şekilde özelleştirmelisiniz.

User-Agent'ı geçersiz kılma

Puppeteer'in varsayılan User-Agent dizesi açıkça "HeadlessChrome" kelimesini içerir. Bu, her güvenlik duvarı için anında bir uyarı işaretidir. Bunu her zaman modern, "headful" bir User-Agent dizesiyle değiştirmelisiniz. Ayrıca bu dizeleri, hedef sitenin beklediği işletim sistemi ve tarayıcı sürümüne uyacak şekilde rotasyona sokmalısınız.

  • Accept-Language: GProxy IP'nizin coğrafi konumuyla eşleştiğinden emin olun (örneğin ABD proxy'leri için en-US,en;q=0.9).
  • Sec-Ch-Ua: Modern Chrome sürümleri "Client Hints" kullanır. Bunları elle ayarlamak tespiti önleyebilir.
  • Referer: Referer başlığını sitenin ana sayfasına veya bir arama motoruna ayarlayarak doğal bir gezinme yolunu taklit edin.
async def set_custom_headers(page):
    await page.setExtraHTTPHeaders({
        'Accept-Language': 'en-US,en;q=0.9',
        'Referer': 'https://www.google.com/',
        'DNT': '1' # Do Not Track
    })
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36')
Puppeteer'de gelişmiş proxy ayarları: kimlik doğrulama ve özel başlıklar

Dinamik proxy rotasyon stratejileri

Ölçekli scraping yaparken tek bir IP adresi kullanmak eninde sonunda hız sınırlamasına veya 403 Forbidden hatasına yol açar. Puppeteer'de rotasyonu ele almanın iki temel yolu vardır: GProxy'nin backconnect (rotasyonlu) proxy'lerini kullanmak veya istemci tarafında rotasyon uygulamak.

Sunucu tarafı rotasyon (GProxy avantajı)

IP rotasyonunun en verimli yolu backconnect proxy kullanmaktır. GProxy ile tek bir giriş noktasına bağlanırsınız (örneğin rotating.gproxy.io:8000). Her yeni bağlantı veya yeni oturum açtığınızda GProxy sunucusu havuzundan otomatik olarak yeni bir residential IP atar. Bu, Python veya Node.js kodunuzda karmaşık rotasyon mantığına duyulan ihtiyacı ortadan kaldırır.

Ara katmanla istemci tarafı rotasyon

Belirli statik IP'lerden oluşan bir listeniz varsa ve tarayıcıyı yeniden başlatmadan aralarında geçiş yapmanız gerekiyorsa proxy-chain gibi bir kütüphane kullanabilirsiniz. Bu, köprü görevi gören yerel bir proxy sunucusu oluşturmanıza ve özel mantığa göre her istekte upstream GProxy sunucusunu değiştirmenize olanak tanır.

  1. Yerel bir proxy sunucusu başlatın.
  2. Yerel sunucuyu istekleri farklı GProxy uç noktalarına yönlendirecek şekilde yapılandırın.
  3. Puppeteer'i yerel sunucuya yönlendirerek başlatın (localhost:8080).
  4. Tarayıcı sürecini sonlandırmadan ara katmandaki yönlendirme kurallarını güncelleyin.

Proxy yapılandırma yöntemlerinin karşılaştırması

Doğru yöntemi seçmek ölçeğinize ve hedef web sitesinin teknik gelişmişliğine bağlıdır. Aşağıdaki tablo Puppeteer için en yaygın üç yaklaşımı karşılaştırır.

Yöntem Kurulum kolaylığı Performans En uygun kullanım
CLI argümanları Yüksek Mükemmel Tek hesaplı otomasyon, küçük ölçekli scraping.
GProxy Backconnect Orta Mükemmel Büyük ölçekli veri çıkarma, hız sınırlarını aşma.
Proxy-Chain ara katmanı Düşük Orta Tek sekmede istek başına IP değişimi gerektiren karmaşık akışlar.

Puppeteer'de yaygın proxy sorunlarını giderme

Yüksek kaliteli GProxy residential IP'lerle bile hatalarla karşılaşabilirsiniz. Bu durum kodlarını anlamak, sağlam bir scraper sürdürmek için hayati önemdedir.

Hata: 407 Proxy Authentication Required

Bu hata, proxy sunucusunun isteği aldığını ancak page.authenticate() ile verilen kimlik bilgilerinin eksik veya hatalı olduğunu ya da IP'nin GProxy panelinizde beyaz listeye alınmadığını gösterir. authenticate() çağrısının page.goto() çağrısından önce await edildiğinden emin olun.

DNS sızıntıları ve --proxy-bypass-list

Chromium varsayılan olarak DNS sorgularını proxy üzerinden değil yerelde çözmeye çalışabilir. Tam anonimlik için --proxy-server argümanını --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1" ile birlikte kullanarak tüm trafiği tünelden geçmeye zorlamalısınız. Ayrıca --proxy-bypass-list ayarının, kazımayı planladığınız alan adlarını yanlışlıkla atlamadığından emin olun.

Zaman aşımlarını yönetme

Residential proxy'ler, alttaki ev ağının doğası gereği zaman zaman veri merkezi IP'lerinden daha yavaş olabilir. Puppeteer kullanırken, proxy el sıkışması ve veri aktarımı sırasındaki olası gecikmeyi hesaba katmak için gezinme zaman aşımını en az 60.000 ms'ye çıkarın.

# Daha yavaş residential bağlantılar için zaman aşımını artırma
await page.goto('https://target-site.com', {
    'waitUntil': 'networkidle2',
    'timeout': 60000
})

Önemli çıkarımlar

Puppeteer proxy ayarlarında ustalaşmak, doğru ağ yapılandırması ile tarayıcı fingerprint yönetimi arasındaki dengedir. GProxy'nin yüksek güvenilirlikli residential IP'lerini hassas başlık kontrolüyle birleştirerek insan davranışını etkili biçimde taklit edebilir ve en yaygın tespit tuzaklarından kaçınabilirsiniz.

  • page.authenticate() kullanın — kimlik bilgisi gerektiren tüm proxy'lerde Chromium güvenlik engellerinden kaçınmak için.
  • User-Agent ve Client Hints değerlerini rotasyona sokun — GProxy IP adresinizin coğrafi konumu ve ISP profiliyle eşleşecek şekilde.
  • Backconnect proxy'lerden yararlanın — yüksek hacimli görevlerde kodunuzu sadeleştirmek ve tarayıcı örneklerini yönetme yükünü azaltmak için.

Pratik ipucu 1: Bir kazıma işine başlamadan önce https://httpbin.org/headers gibi bir siteye giderek sunucunun tam olarak ne gördüğünü kontrol edin ve IP'nizi ile başlıklarınızı her zaman doğrulayın.

Pratik ipucu 2: Başlatma argümanlarınızda --disable-blink-features=AutomationControlled bayrağını kullanın. Bu, navigator.webdriver özelliğini kaldırır ve bir GProxy residential IP ile birleştiğinde otomasyon izinizi belirgin biçimde azaltır.

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.