Bloga geri dön

Selenium WebDriver'da Proxy Ayarları: Python ve Java için Kod Örnekleriyle Tam Kılavuz

Selenium WebDriver'a proxy entegrasyonu için Python ve Java ile Chrome ve Firefox için kod örnekleriyle detaylı bir rehber.

📅13 Şubat 2026
```html

Selenium WebDriver, tarayıcı otomasyonu ve veri kazıma için en popüler araçlardan biridir. Büyük miktarda istekle çalışırken veya coğrafi kısıtlamaları aşma gereği olduğunda, proxy'yi doğru bir şekilde ayarlamak kritik öneme sahiptir. Bu kılavuzda, farklı tarayıcılar ve programlama dilleri için Selenium'a proxy entegrasyonunun tüm yollarını inceleyecek ve geliştiricilerin karşılaştığı yaygın sorunları çözeceğiz.

Selenium'da Proxy Neden Gereklidir

Web kazıma veya test otomasyonu sırasında Selenium ile birkaç görev ortaya çıkar ki bunlar proxy olmadan çözülemez:

  • Rate limiting aşma — birçok site, bir IP adresinden gelen istek sayısını sınırlar. Proxy olmadan, scriptiniz 50-100 istektan sonra hızla engellenir.
  • Coğrafi kısıtlamalar — belirli bir ülkeden yalnızca erişilebilen içeriği kazımak gerekiyorsa, gerekli coğrafi konumda bir IP ile proxy bu sorunu çözer.
  • Yük dağılımı — büyük veri kazıma işlemlerinde, proxy üzerinden IP adreslerinin döngüsü, istekleri dağıtarak bot tespitini önlemeye yardımcı olur.
  • Yerelleştirme testi — bir sitenin farklı ülkelerdeki kullanıcılara nasıl göründüğünü kontrol etmek için, ilgili bölgelerin proxy'lerine ihtiyaç vardır.
  • Anti-bot sistemlerini aşma — modern korumalar (Cloudflare, DataDome) IP itibarını analiz eder. Kaliteli proxy'ler, sıradan bir kullanıcı gibi görünmeye yardımcı olur.

Proxy'yi doğru bir şekilde ayarlamazsanız, Selenium scriptiniz kararsız çalışır: captcha alır, geçici yasaklar veya tamamen erişim engeliyle karşılaşır. Bu, özellikle e-ticaret platformları, sosyal medya veya botlara karşı agresif koruma sağlayan siteleri kazırken kritik öneme sahiptir.

Hangi Proxy Türleri Kullanılmalı

Proxy türünün seçimi, göreve bağlıdır. Selenium otomasyonu için üç ana proxy türü kullanılır, her birinin kendi avantajları vardır:

Proxy Türü Hız Anonimlik En İyi Senaryolar
Veri Merkezi Proxy'leri Çok yüksek (100+ Mbit/s) Orta Açık veri kazıma, performans testi, toplu kontroller
Konut Proxy'leri Orta (10-50 Mbit/s) Çok yüksek Anti-bot sistemlerini aşma, sosyal medya kazıma, e-ticaret, sıkı korumalı siteler
Mobil Proxy'ler Orta (5-30 Mbit/s) Maksimum Mobil site versiyonlarıyla çalışma, sosyal medya, mobil IP kontrolü yapan uygulamalar

Seçim önerileri:

  • Haber siteleri, açık API'ler, basit dizinler için — veri merkezi proxy'leri uygundur. Daha ucuz ve daha hızlıdırlar.
  • Amazon, eBay, Google, sosyal medya ile çalışmak için — yalnızca konut proxy'leri. Bu platformlar veri merkezi IP'lerini aktif olarak engeller.
  • Mobil kullanıcıları taklit etmek veya Instagram, TikTok ile çalışmak için — mobil proxy'ler vazgeçilmezdir.
  • Coğrafi konum testi için — belirli bir ülke ve şehir seçme imkanı olan proxy'leri tercih edin.

Selenium'da Chrome için Proxy Ayarları

Chrome WebDriver, Selenium otomasyonu için en popüler seçimdir. Proxy ayarları, ChromeOptions nesnesi aracılığıyla yapılır. Birkaç yöntemi inceleyelim.

Yöntem 1: Kimlik Doğrulama Olmadan HTTP/HTTPS Proxy (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Proxy ayarı
PROXY = "123.45.67.89:8080"  # Proxy sunucunuzu buraya yazın

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{PROXY}')

# Stabilite için ek seçenekler
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# Sürücüyü başlat
driver = webdriver.Chrome(options=chrome_options)

# IP kontrolü
driver.get('https://httpbin.org/ip')
print(driver.page_source)

driver.quit()

Yöntem 2: SOCKS5 Proxy (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

PROXY = "123.45.67.89:1080"

chrome_options = Options()
# SOCKS5 için protokolü açıkça belirtin
chrome_options.add_argument(f'--proxy-server=socks5://{PROXY}')

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Önemli: Chrome, HTTP, HTTPS ve SOCKS5 proxy'lerini destekler. SOCKS4 için ek ayarlar veya uzantılar kullanmak gerekebilir.

Selenium'da Chrome için Proxy Ayarları (Java)

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.Proxy;

public class ChromeProxyExample {
    public static void main(String[] args) {
        // Proxy ayarı
        Proxy proxy = new Proxy();
        proxy.setHttpProxy("123.45.67.89:8080");
        proxy.setSslProxy("123.45.67.89:8080");
        
        ChromeOptions options = new ChromeOptions();
        options.setProxy(proxy);
        options.addArguments("--no-sandbox");
        
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://httpbin.org/ip");
        
        System.out.println(driver.getPageSource());
        driver.quit();
    }
}

Selenium'da Firefox için Proxy Ayarları

Firefox WebDriver, proxy ayarlarını tarayıcı profili aracılığıyla yapılandırmak için farklı bir yaklaşım kullanır. Bu, daha fazla esneklik sağlar, ancak yapılandırma parametrelerini anlamayı gerektirir.

HTTP/HTTPS Proxy için Firefox (Python)

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080

firefox_options = Options()

# Proxy ayarları preferences üzerinden
firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)

# Yerel adresler için proxy'yi devre dışı bırak
firefox_options.set_preference("network.proxy.no_proxies_on", "localhost,127.0.0.1")

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

SOCKS5 Proxy için Firefox (Python)

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 1080

firefox_options = Options()

firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.socks", PROXY_HOST)
firefox_options.set_preference("network.proxy.socks_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.socks_version", 5)

# SOCKS5 ile DNS üzerinden proxy
firefox_options.set_preference("network.proxy.socks_remote_dns", True)

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Firefox'un Avantajı: network.proxy.socks_remote_dns parametresi, DNS sorgularını proxy üzerinden gerçekleştirmenizi sağlar, bu da anonimliği artırır ve DNS seviyesinde engelleri aşmanıza yardımcı olur.

Kimlik Doğrulama Gerektiren Proxy ile Çalışma

Çoğu kaliteli proxy hizmeti, kullanıcı adı ve şifre ile kimlik doğrulama kullanır. Selenium, Chrome için proxy URL'sinde kimlik bilgilerini doğrudan iletmeyi desteklemediğinden, dolaylı çözümler gereklidir.

Yöntem 1: Kimlik Doğrulama için Chrome Uzantısı (önerilen)

Proxy'ye bağlanırken kullanıcı adı ve şifreyi otomatik olarak ekleyen geçici bir Chrome uzantısı oluşturuyoruz:

import os
import zipfile
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080
PROXY_USER = "kullanici_adi"
PROXY_PASS = "sifre"

# Uzantının manifest dosyasını oluşturma
manifest_json = """
{
    "version": "1.0.0",
    "manifest_version": 2,
    "name": "Chrome Proxy",
    "permissions": [
        "proxy",
        "tabs",
        "unlimitedStorage",
        "storage",
        "webRequest",
        "webRequestBlocking"
    ],
    "background": {
        "scripts": ["background.js"]
    }
}
"""

# Kimlik doğrulama için script
background_js = """
var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: "%s",
            port: parseInt(%s)
        },
        bypassList: ["localhost"]
    }
};

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
    return {
        authCredentials: {
            username: "%s",
            password: "%s"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    {urls: [""]},
    ['blocking']
);
""" % (PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)

# Uzantıyı oluşturma
plugin_path = 'proxy_auth_plugin.zip'
with zipfile.ZipFile(plugin_path, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

# Uzantı ile Chrome'u başlatma
chrome_options = Options()
chrome_options.add_extension(plugin_path)

driver = webdriver.Chrome(options=chrome_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)

driver.quit()
os.remove(plugin_path)  # Geçici dosyayı sil

Yöntem 2: Kimlik Doğrulama ile Firefox (daha basit)

Firefox, kimlik bilgilerini profil ayarları aracılığıyla iletmenize olanak tanır:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

PROXY_HOST = "123.45.67.89"
PROXY_PORT = 8080
PROXY_USER = "kullanici_adi"
PROXY_PASS = "sifre"

firefox_options = Options()

firefox_options.set_preference("network.proxy.type", 1)
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)

# Kimlik doğrulama (her zaman çalışmaz, Firefox sürümüne bağlı)
firefox_options.set_preference("network.proxy.username", PROXY_USER)
firefox_options.set_preference("network.proxy.password", PROXY_PASS)

# Kimlik doğrulama isteğini devre dışı bırakma
firefox_options.set_preference("network.automatic-ntlm-auth.trusted-uris", PROXY_HOST)

driver = webdriver.Firefox(options=firefox_options)
driver.get('https://httpbin.org/ip')
print(driver.page_source)
driver.quit()

Not: Eğer proxy sağlayıcınız IP beyaz listeleme destekliyorsa, sunucunuzun IP'sini beyaz listeye eklemek ve kimlik doğrulama olmadan proxy kullanmak daha kolaydır.

Selenium'da Proxy Değişimi

Büyük veri miktarlarını kazırken, engellerden kaçınmak için proxy'yi değiştirmek kritik öneme sahiptir. İki yaklaşım vardır: kod seviyesinde döngü ve dönen proxy kullanımı.

Kod Seviyesinde Döngü (Yeni Sürücü Oluşturma)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random

# Proxy listesi
PROXY_LIST = [
    "123.45.67.89:8080",
    "98.76.54.32:8080",
    "11.22.33.44:8080",
]

def create_driver_with_proxy(proxy):
    """Belirtilen proxy ile sürücü oluşturma"""
    chrome_options = Options()
    chrome_options.add_argument(f'--proxy-server=http://{proxy}')
    chrome_options.add_argument('--no-sandbox')
    return webdriver.Chrome(options=chrome_options)

# Döngü ile kazıma
urls_to_parse = [
    'https://example.com/page1',
    'https://example.com/page2',
    'https://example.com/page3',
]

for url in urls_to_parse:
    # Rastgele bir proxy seç
    current_proxy = random.choice(PROXY_LIST)
    
    # Proxy ile yeni bir sürücü oluştur
    driver = create_driver_with_proxy(current_proxy)
    
    try:
        driver.get(url)
        # Kazıma mantığınız
        print(f"{url} adresi {current_proxy} ile kazındı")
        print(driver.title)
    except Exception as e:
        print(f"{current_proxy} ile hata: {e}")
    finally:
        driver.quit()  # Sürücüyü kapatmak önemlidir

Dönen Proxy Kullanımı (daha basit)

Birçok proxy sağlayıcısı, her istekte veya belirli aralıklarla otomatik olarak IP'yi değiştiren dönen bir uç nokta sağlar. Bu, kodu basitleştirir:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Dönen proxy uç noktası (IP otomatik olarak değişir)
ROTATING_PROXY = "rotating.proxycove.com:8080"

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{ROTATING_PROXY}')

driver = webdriver.Chrome(options=chrome_options)

# Her istek yeni bir IP ile olacak
urls = ['https://httpbin.org/ip'] * 5

for url in urls:
    driver.get(url)
    print(driver.find_element("tag name", "body").text)
    # Her çıktı farklı bir IP gösterecek

driver.quit()

Öneri: Büyük projeler için dönen proxy kullanın — bu, kaynakları tasarruf ettirir (sürücüyü yeniden oluşturmanıza gerek kalmaz) ve kodu basitleştirir. Konut proxy'leri genellikle kutudan çıkmadan döngü desteği sunar.

Yaygın Hatalar ve Çözümleri

Hata: "ERR_PROXY_CONNECTION_FAILED"

Sebep: Selenium, proxy sunucusuna bağlanamıyor.

Çözüm:

  • Proxy'nin IP ve portunun doğruluğunu kontrol edin
  • Proxy'nin aktif olduğundan emin olun (curl ile kontrol edin: curl -x http://123.45.67.89:8080 https://httpbin.org/ip)
  • Firewall'ı kontrol edin — belki de proxy'ye giden bağlantılar engellenmiştir
  • Kimlik doğrulama kullanıyorsanız, kullanıcı adı/şifre doğruluğunu kontrol edin

Hata: "ERR_TUNNEL_CONNECTION_FAILED"

Sebep: Proxy üzerinden HTTPS bağlantısında sorun.

Çözüm:

  • Proxy'nin HTTPS'i desteklediğinden emin olun (CONNECT yöntemi)
  • HTTPS siteleri için HTTPS proxy veya SOCKS5 kullanın
  • SSL hatalarını göz ardı etme seçeneğini ekleyin: chrome_options.add_argument('--ignore-certificate-errors')

Hata: Proxy çalışıyor, ancak site botu tespit ediyor

Sebep: Site, gelişmiş tespit yöntemleri kullanıyor (parmak izi, davranış analizi).

Çözüm:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{PROXY}')

# webdriver bayrağını devre dışı bırakma (otomasyonu belirten ana işaret)
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# navigator.webdriver'i kaldırma
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': '''
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        })
    '''
})

driver.get('https://bot.sannysoft.com/')  # Tespit kontrolü için site

Ek olarak, otomatik olarak birçok anti-tespit tekniği uygulayan undetected-chromedriver kütüphanesini kullanmanız önerilir.

Sorun: Proxy üzerinden sayfaların yavaş yüklenmesi

Sebep: Proxy aşırı yüklenmiş veya coğrafi olarak uzakta.

Çözüm:

  • Hedef sunucuya daha yakın proxy'leri seçin (örneğin, ABD sitelerini kazımak için ABD proxy'leri kullanın)
  • Hızın daha önemli olduğu görevler için veri merkezi proxy'lerini kullanın
  • Selenium'da takılmaları önlemek için zaman aşımını ayarlayın:
from selenium.webdriver.support.ui import WebDriverWait

driver.set_page_load_timeout(30)  # Yükleme için maksimum 30 saniye
driver.implicitly_wait(10)  # Elemanlar için örtük bekleme

Proxy ile Çalışırken En İyi Uygulamalar

1. Proxy Havuzları Kullanın
Tek bir proxy sunucusuna güvenmeyin. 10-50 proxy'den oluşan bir havuz oluşturun ve bunları döndürün. Eğer bir proxy engellenirse, kazıma diğerinden devam eder.

2. Rastgele Gecikmeler Ekleyin
Proxy ile bile çok hızlı istekler şüpheli görünür. İstekler arasında 2-5 saniye rastgele gecikmeler ekleyin:

import time
import random

for url in urls:
    driver.get(url)
    # Kazıma...
    time.sleep(random.uniform(2, 5))  # 2-5 saniye rastgele gecikme

3. Proxy Kalitesini İzleyin
Kullanımdan önce proxy'leri kontrol edin. Yanıt vermeyen veya hata döndürenleri havuzdan çıkarın:

import requests

def check_proxy(proxy):
    """Proxy'nin çalışabilirliğini kontrol etme"""
    try:
        response = requests.get(
            'https://httpbin.org/ip',
            proxies={'http': f'http://{proxy}', 'https': f'http://{proxy}'},
            timeout=10
        )
        return response.status_code == 200
    except:
        return False

# Çalışan proxy'leri filtreleme
working_proxies = [p for p in PROXY_LIST if check_proxy(p)]
print(f"Çalışan proxy'ler: {len(working_proxies)}/{len(PROXY_LIST)}")

4. Headless Modu Dikkatli Kullanın
Headless tarayıcılar daha kolay tespit edilir. Karmaşık siteler için tarayıcıyı normal modda başlatın veya --window-size kullanın, --headless yerine.

5. Tüm İstekleri Kaydedin
Her istekte hangi proxy'nin kullanıldığını kaydedin. Bu, sorunlu proxy'leri belirlemenize ve hataları düzeltmenize yardımcı olur.

6. robots.txt ve rate limit'lere uyun
Proxy ile bile, sitenin kurallarına saygı gösterin. Agresif kazıma, proxy'nin alt ağlarının engellenmesine yol açabilir, bu da diğer kullanıcılara zarar verebilir.

Sonuç

Selenium WebDriver'da proxy'nin doğru ayarlanması, stabil bir kazıma ve otomasyonun temelidir. Chrome ve Firefox için proxy entegrasyonunun tüm ana yollarını, kimlik doğrulama ile çalışmayı, IP adreslerinin döngüsünü ve yaygın sorunların çözümlerini inceledik. Önemli olan, görevinize uygun proxy türünü seçmektir: basit kazıma için veri merkezi proxy'leri yeterli olurken, korumalı platformlarla çalışmak için konut veya mobil proxy'ler gereklidir.

En iyi uygulamaları unutmayın: proxy havuzları kullanın, rastgele gecikmeler ekleyin, bağlantı kalitesini izleyin ve anti-tespit tekniklerini uygulayın. Bu, scriptlerinizin stabilitesini artıracak ve engellenme riskini on kat azaltacaktır.

Eğer yüksek anonimlik ve anti-bot sistemlerini aşma gereksinimleri olan bir kazıma otomasyonu planlıyorsanız, konut proxy'lerini denemenizi öneririz — bu proxy'ler, sosyal medya, e-ticaret platformları ve gelişmiş koruma hizmetleri dahil olmak üzere her türlü site ile maksimum stabilite sağlar. Büyük veri miktarlarının işlenmesinde hızın kritik olduğu görevler için, veri merkezi proxy'leri fiyat-performans oranı açısından en iyi seçim olacaktır.

```