Geonode logo
Carl Gamutan

Carl Gamutan

Güncellenme: 7 Ekim 2026

Yayınlanma: 8 Nisan 2022

Puppeteer ile Proxy'leri Kullanma

Puppeteer, kullanıcılarına üst düzey bir başsız Chrome API’si sunan bir Node kütüphanesidir. İşte bunun için bir proxy sunucusu oluşturmanın yolu!

Puppeteer’ın neden bir proxy’ye ihtiyacı var?

Puppeteer için proxy’ler, aracın her zaman onu çalıştıran makinenin IP adresini kullanmak yerine farklı bir IP adresi üzerinden bağlanmasını sağlar. Bu, konum tabanlı görevler, testler, izleme ve bağlantı kaynağının önemli olduğu diğer işler için yararlıdır.

Puppeteer yine de ana görevi yerine getirir. Proxy ise bağlantının nereden geldiğiyle ilgilenir.

Proxy olmadan ne olur: IP engellemeleri, hız sınırlamaları, coğrafi kısıtlamalar

Proxy olmadan, web siteleri sürekli aynı IP adresini görür. Etkinlik arttıkça, bu IP adresi bir hız sınırına ulaşabilir veya engellenebilir.

Konum da önemli olabilir. Almanya'dan açılan bir sayfa, ABD'den açılan bir sayfayla aynı içeriği göstermeyebilir.

Puppeteer için bir proxy, gerektiğinde farklı IP adreslerinden ve konumlardan bağlanmayı mümkün kılar.

Puppeteer ile hangi proxy türü kullanılmalı

Doğru proxy türü, yapılacak işe göre değişir.

Proxy türüVeri toplamaHesap yönetimiTestİzleme
KonutKonum ve IP kaynağının önemli olduğu durumlarda uygundurHesaplar için konut IP'leri gerektiğinde kullanışlıdırKonum tabanlı testler için uygundurFarklı konumlardan gelen içeriği kontrol etmek için kullanışlıdır
İSSSabit bir IP gerektiğinde idealdirTek bir IP üzerinden uzun süreli oturumlar için kullanışlıdırTutarlı bir IP ile test yapmak için idealdirAynı IP'den sürekli kontroller yapmak için kullanışlıdır
Veri MerkeziHız ve yüksek istek hacimleri için idealdirKonut IP'lerine ihtiyaç duyulmadığında daha iyidirGenel testler için idealdirSık otomatik kontroller için idealdir

Konut proxy'leri, IP kaynağı ve konumun önemli olduğu durumlarda kullanışlıdır. İSS proxy'leri, aynı IP'nin daha uzun süre aktif kalması gerektiğinde iyi sonuç verir. Veri merkezi proxy'leri ise odak noktasının hız ve ölçek olduğu durumlarda tercih edilir.

En iyi seçenek, görevin coğrafi hedefleme, istikrarlı bir bağlantı veya daha geniş bir IP havuzuna erişim gerektirip gerektirmediğine de bağlıdır.

Puppeteer'da proxy nasıl bağlanır

Puppeteer'da proxy kurulumu için Geonode adresindeki sunucu, bağlantı noktası, kullanıcı adı ve şifre gereklidir. Kimlik bilgilerini ortam değişkenlerinde saklayın, ardından kodda proxy'yi kurarken bunları yükleyin.

Geonode kullanıyor musunuz? Kullanıcı adını ve şifreyi Erişim Kimlik Bilgileri bölümünden, ana bilgisayarı, bağlantı noktasını ve protokolü ise Proxy Sunucu Bilgileri bölümünden alın.

Ayar yolu veya kod

Puppeteer için, tarayıcıyı başlatırken proxy sunucusunu ve bağlantı noktasını --proxy-server

aracılığıyla aktarın:

import puppeteer from "puppeteer";
import "dotenv/config";

const browser = await puppeteer.launch({
  headless: true,
  args: [
    `--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
  ],
});

Ardından sayfayı oluşturun ve proxy kimlik bilgilerini girin:

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Gerçek kullanıcı adını ve şifreyi kaynak dosyasına doğrudan yazmak yerine ortam değişkenlerinde saklayın. Bu kurulum, testimizde proxy üzerinden HTTP 200 yanıtını başarıyla döndürdü.

Kimlik doğrulama biçimi: ana bilgisayar:bağlantı noktası:kullanıcı:şifre

Geonode

adresi size dört değer verir:

proxy.geonode.io:PORT:USERNAME:PASSWORD

Puppeteer için değerleri birbirinden ayrı tutun. Bunları ortam değişkenlerinde saklayın:

GEONODE_PROXY_HOST=proxy.geonode.io
GEONODE_PROXY_PORT=9000
GEONODE_PROXY_USER=USERNAME
GEONODE_PROXY_PASS=PASSWORD

--proxy-server

komutuyla ana bilgisayarı ve bağlantı noktasını yükleyin, ardından sayfada kimlik doğrulaması yapın:

const browser = await puppeteer.launch({
  headless: true,
  args: [
    `--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
  ],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Bunu geçerli kimlik bilgileriyle test ettik ve HTTP 200 yanıtı aldık. Yanlış şifre kullanıldığında, proxy HTTP 407 yanıtını ve şu mesajı döndürdü:

Authentication error. Please check your authentication settings.

Puppeteer’da Rotasyon ve Sabit Oturum Karşılaştırması

İsteklerin aynı IP adresini koruması gerekmiyorsa, rotasyon özelliğini kullanın.

Testimiz için Puppeteer’ı HTTP rotasyonlu bağlantı noktasıyla başlattık:

const browser = await puppeteer.launch({
  headless: true,
  args: ["--proxy-server=http://proxy.geonode.io:9000"],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Yeni tarayıcı oturumları kullanarak beş istek gönderdik:

Request 1: 108.31.182.167
Request 2: 45.186.93.125
Request 3: 109.254.131.42
Request 4: 109.153.11.141
Request 5: 37.113.173.139

Benzersiz IP adresleri: 5

Rotasyon: Evet

Bu testte beş isteğin tümü farklı IP'ler döndürdü. Bu, çalıştırma sırasında rotasyonun çalıştığını doğrular, ancak gelecekteki her istek için yeni bir IP garantisi vermez.

İlgili isteklerin aynı IP'de kalması gerekiyorsa, bunun yerine sabit oturum kullanın. Sabit bağlantı noktasını kullanın ve oturum ayrıntılarını kullanıcı adına ekleyin:

const browser = await puppeteer.launch({
  headless: true,
  args: ["--proxy-server=http://proxy.geonode.io:10000"],
});

const page = await browser.newPage();

await page.authenticate({
  username:
    `${process.env.GEONODE_PROXY_USER}-session-blogpuppeteer01-lifetime-10`,
  password: process.env.GEONODE_PROXY_PASS,
});

Aynı oturumu kullanarak üç istek yaptık:

Request 1: 178.64.64.40
Request 2: 178.64.64.40
Request 3: 178.64.64.40

Aynı IP: Evet

Üç isteğin tümü aynı IP'yi kullandı.

Kullanılabilir ayarlar için dönen proxy'ler ve yapışkan oturumlar ile ilgili Geonode

kılavuzlarına bakın.

Puppeteer’da sık karşılaşılan proxy hataları ve bunların çözümleri

Proxy çalışmıyorsa, öncelikle bağlantı bilgilerini kontrol edin. Kullanıcı adını ve şifreyi, ardından ana bilgisayarı, bağlantı noktasını ve protokolü kontrol edin. Puppeteer tarafından döndürülen hata mesajı genellikle sorunun kaynağını belirlemenize yardımcı olabilir.

407 Proxy Kimlik Doğrulaması Gerekiyor

407 hatası genellikle bir kimlik doğrulama sorununa işaret eder.

Puppeteer’ı yanlış bir şifreyle test ettiğimizde, proxy şu yanıtı verdi:

HTTP status: 407
Authentication error. Please check your authentication settings.

Öncelikle kullanıcı adını ve şifreyi kontrol edin. Bunlar doğruysa, sayfanın oluşturulmasından sonra page.authenticate() adresinin çağrıldığından emin olun.

ERR_TUNNEL_CONNECTION_FAILED / bağlantı reddedildi

Bir bağlantı hatası genellikle Puppeteer’ın proxy’ye ulaşamadığı anlamına gelir.

Öncelikle ana bilgisayar ve bağlantı noktasını kontrol edin. Ardından protokolün kullanılan proxy sunucusuyla uyumlu olduğundan emin olun.

Başarısız bağlantı testimizde, Puppeteer "ERR_TUNNEL_CONNECTION_FAILED

" hatasını döndürmedi. Ulaşılamayan bir proxy bağlantı noktası kullanıldığında ise şu hata döndü: "

net::ERR_CONNECTION_RESET at http://ip-api.com/json

". Dolayısıyla, Chromium'un verdiği hatanın tam metni, bağlantının nasıl başarısız olduğuna bağlı olarak farklılık gösterebilir.

Zaman Aşımları ve Boş Yanıtlar

Zaman aşımı, sayfanın ayarlanan süre içinde bir yanıt almadığı anlamına gelir.

Öncelikle, hedef URL'nin çalışıp çalışmadığını ve proxy'nin bağlanıp bağlanamadığını kontrol edin. Her ikisi de çalışıyorsa, page.goto()

işlevine aktarılan zaman aşımını kontrol edin.

Testimiz için, beş saniyelik zaman aşımına sahip, yönlendirilemeyen bir proxy kullandık:

await page.goto(url, {
  timeout: 5000,
});

Puppeteer şu yanıtı verdi:

TimeoutError: Navigation timeout of 5000 ms exceeded

Açık bir zaman aşımı ayarlamak, proxy bağlantısı donduğunda komut dosyasının hızlı bir şekilde hata vermesine yardımcı olabilir.

ERR_NO_SUPPORTED_PROXIES

Puppeteer’a özgü tespit ettiğimiz bir sorun, kullanıcı adı ve şifreyi doğrudan --proxy-server

dosyasına yazmaktı.

Bu yapılandırma başarısız oldu:

--proxy-server=http://USERNAME:PASSWORD@proxy.geonode.io:9000

Puppeteer şu yanıtı verdi:

net::ERR_NO_SUPPORTED_PROXIES

Çözüm, yalnızca proxy sunucusunu launch argümanıyla aktarmaktır:

args: ["--proxy-server=http://proxy.geonode.io:9000"]

Ardından ayrı olarak kimlik doğrulaması yapın:

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Ayarları değiştirdikten sonra istek HTTP 200 statüsüyle başarılı oldu.

Puppeteer + Geonode: Neler Sunuyor?

Puppeteer, uygulamadaki istekleri veya bağlantıları yönetir. Geonode ise proxy bağlantısını yönetir.

İşe göre ev, ISP veya veri merkezi proxy'leri seçebilir, ardından gerektiğinde rotasyon, sabit oturumlar ve coğrafi hedefleme özelliklerini kullanabilirsiniz. Bu sayede proxy kurulumu, uygulama kodunun geri kalanından ayrı tutulur.

Planlar proxy türüne göre değişir; bazı seçeneklerin fiyatı GB başına belirlenir.

Sık Sorulan Sorular

Puppeteer, SOCKS5 proxy'lerini destekliyor mu?

Test ettiğimiz Puppeteer kurulumunda, kimlik doğrulamalı SOCKS5 çalışmadı.

Geonode'daki SOCKS5 dönen bağlantı noktasını page.authenticate() ile denedik, ancak Puppeteer şu hatayı verdi:

net::ERR_SOCKS_CONNECTION_FAILED

Ayrıca, kimlik bilgilerini --proxy-server dosyasına gömmeyi de denedik, ancak şu hata mesajı döndü:

net::ERR_NO_SUPPORTED_PROXIES

Test ettiğimiz kimlik doğrulamalı SOCKS5 yapılandırmalarının hiçbiri çalışmadığından, --proxy-server ve page.authenticate() ile doğrulanmış HTTP kurulumu bu yapılandırma için daha güvenli bir seçenektir.

Puppeteer'da istek başına IP adreslerini değiştirebilir miyim?

Evet, tarayıcı, dönen proxy yapılandırması aracılığıyla başlatıldığında Puppeteer dönen proxy kullanabilir.

Yaptığımız testte, beş yeni tarayıcı oturumu beş farklı IP adresi döndürdü. Bu, test sırasında rotasyonun gerçekleştiğini doğrular, ancak her istek veya tarayıcı oturumu için farklı bir IP adresi garanti edilmez.

Ücretsiz deneme sürümü var mı?

Evet. Geonode ücretsiz deneme sürümü sunuyor; böylece ücretli bir plana geçmeden önce proxy, Puppeteer ile test edilebilir. Güncel ücretsiz deneme sürümünü ve planları inceleyin.

Puppeteer'da proxy ayarlarını nereden yapmalıyım?

--proxy-server

dosyasını kullanarak puppeteer.launch()

adresindeki proxy sunucusu ve bağlantı noktasını ayarlayın.

Ardından, her sayfayı oluşturduktan sonra kullanıcı adı ve şifreyi girmek için page.authenticate()

adresini çağırın:

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://proxy.geonode.io:9000"],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Bu, testlerimizde işe yarayan yapılandırmaydı.

Proxy kullanıcı adını ve şifresini --proxy-server seçeneğine girmeli miyim?

Hayır. Bu Puppeteer kurulumunu kullanırken kimlik bilgilerini ayrı tutun.

USERNAME:PASSWORD@ adresini doğrudan --proxy-server dosyasına eklediğimizde, testimizde ERR_NO_SUPPORTED_PROXIES hatası döndü. Orada yalnızca ana bilgisayar ve bağlantı noktasını aktarıp, kimlik bilgileri için page.authenticate() adresini kullanmak başarılı oldu.