Selenium Proxy Entegrasyonu

Yayın tarihi:

13 dk okuma

Güncelleme:

PXNET
Yazar: PXNET
Neredeyse siyah zeminde soluk IP satırları; köşeleri artılı çerçevede Proxynet çarpı Selenium, sağ altta INTEGRATION

Selenium betiğiniz çalışıyor, ama sayfaları Almanya'daki bir ziyaretçinin gördüğü gibi görmeniz gerekiyor ya da betik, sitenin çoktan hız sınırı uyguladığı bir sunucuda çalışmak zorunda. Proxy'yi ekliyorsunuz ve karşınıza hata vermeyen boş bir sayfa çıkıyor. Sebep çoğu zaman şifredir: WebDriver standardında proxy kimlik bilgisi için bir alan yoktur, bu yüzden user:pass@host:port biçimindeki adres ya reddedilir ya da sessizce yok sayılır.

Bu yazıda Proxynet proxy'lerini Selenium'a nasıl entegre edeceğinizi Chrome, Edge ve Firefox için ayrı ayrı anlatıyoruz: bugün çalışan kimlik doğrulama yöntemleri, SOCKS5, HTTPS, IP rotasyonu ve hata mesajları. Python örneklerinin hepsini Windows 11 üzerinde Selenium 4.49, Chrome 154, Edge 153 ve Firefox 156 ile, kullanıcı adı ve şifre isteyen yerel bir test proxy'sine karşı çalıştırdık.

Selenium Nedir?

Selenium, web tarayıcılarını otomatikleştirmek için kullanılan bir otomasyon aracıdır. Özellikle web uygulamalarını test etmek için yaygın olarak kullanılır; yalnız JavaScript ile oluşan sayfalardan veri toplamak için de tercih edilir. Tarayıcıyı açmak, web sayfalarını yüklemek, tıklamak, metin girmek, form göndermek ve sayfa içeriğini okumak gibi işlemleri bir kullanıcının yapacağı şekilde yapar. Kodunuz Selenium kütüphanesini çağırır, kütüphane bir sürücüyle (ChromeDriver, msedgedriver ya da geckodriver) konuşur, sürücü de tarayıcıyı W3C WebDriver protokolüyle yönetir.

Selenium Chrome, Edge, Firefox ve Safari'yi destekler; Python, Java, C#, Ruby ve JavaScript için resmî kütüphaneleri vardır. Bu da geliştiricilere tercih ettikleri dilde çalışma esnekliği sağlar. 4.6 sürümünden beri Selenium Manager ile birlikte gelir: kurulu tarayıcıyı bulur ve ona uygun sürücüyü kendisi indirir. Hâlâ araç seçiyorsanız Playwright ve Selenium Farkı: Hangisini Seçmeli? yazısına bakabilirsiniz.

Selenium'da proxy nasıl çalışır?

Selenium'da proxy tek bir isteğe değil, tarayıcı oturumuna aittir:

  1. Proxy'yi tarayıcı seçeneklerine yazarsınız: Chrome argümanı --proxy-server olarak ya da Proxy nesnesi olarak (WebDriver standardındaki proxy yeteneği).
  2. Sürücü tarayıcıyı bu ayarla başlatır ve ayar driver.quit() çağrılana kadar bütün sekmelerde geçerli olur.
  3. https:// bir sayfa için tarayıcı proxy'ye CONNECT host:443 gönderir ve şifreli bir tünel açar. http:// bir sayfada ise tam adresi proxy'ye gönderir.
  4. Proxy giriş istiyorsa 407 Proxy Authentication Required ile yanıt verir. WebDriver standardının karşılamadığı adım budur.
  5. Hedef site proxy'nin çıkış IP'sini görür. Başka bir proxy için yeni bir tarayıcı başlatırsınız.

Chrome kendi arka plan trafiğini de (güncellemeler, hesap servisleri) proxy üzerinden gönderir. Gigabayt başına ücretlendirilen bir pakette bu trafik de sayılır.

Python'da Selenium ile proxy nasıl kullanılır?

Adım 1: Selenium Kurulumu. Öncelikle Python kurulu olmalı; Selenium 4.49, Python 3.10 ya da daha yeni bir sürüm ister. Selenium kütüphanesini şu komutla yükleyebilirsiniz:

bash
pip install selenium

Adım 2: Proxy Sunucusu Edinme. Proxy sayfasından size uygun ürünü seçin. Proxynet panelindeki Endpoint Oluşturucu size gateway adresini, portu ve seçtiğiniz ülke, şehir ve oturumu taşıyan bir kullanıcı adını verir. HTTP ve SOCKS5 aynı gateway'de ayrı portları kullanır.

Adım 3: Selenium WebDriver. Bu yazının eski sürümünde ChromeDriver'ı elle indirip executable_path ile vermeniz gerektiği yazıyordu. O parametre artık yok: Selenium Manager sürücüyü ilk çalıştırmada kendisi indirir. Makinenin internete çıkmak için proxy'ye ihtiyacı varsa, Selenium Manager'ın indirmeleri için SE_PROXY ortam değişkenini tanımlayın.

Adım 4: Selenium ile Proxy Entegrasyonu. Şifre istemeyen bir proxy için (aşağıda anlatılan IP whitelist yöntemi) tarayıcıyı proxy ile şöyle başlatırsınız:

python
from selenium import webdriver
from selenium.webdriver.common.by import By

PROXY = "http://pr.proxynet.io:8000"

options = webdriver.ChromeOptions()
options.add_argument(f"--proxy-server={PROXY}")
options.add_argument("--headless")  # tarayıcıyı izlemek için bu satırı kaldırın

driver = webdriver.Chrome(options=options)
try:
    driver.get("https://api.ipify.org/?format=json")
    print(driver.find_element(By.TAG_NAME, "body").text)  # {"ip": "<çıkış IP'si>"}
finally:
    driver.quit()

Ekrana basılan IP, proxy'nin çıkış IP'si olmalıdır. Selenium'un Proxy nesnesi de aynı işi görür (options.proxy = Proxy({"proxyType": ProxyType.MANUAL, "httpProxy": "host:port", "sslProxy": "host:port"})); testimizde iki biçim de trafiği aynı şekilde proxy'ye yönlendirdi.

Selenium'da kullanıcı adı ve şifreli proxy nasıl kullanılır?

W3C WebDriver proxy tanımında proxy adresleri için alanlar var, ama kullanıcı adı ya da şifre için yok. Chromium'un proxy dokümanı da Chrome'un proxy ayarlarına gömülen kimlik bilgilerini kullanmadığını söylüyor. --proxy-auth diye bir argüman da yok; bu yazının eski kodu böyle bir argüman kullanıyordu. Giriş isteyen bir proxy'ye karşı yaptığımız testler:

Ne denedikNe oldu
--proxy-server=http://host:port, kimlik bilgisi yokProxy 407 döndü; istisna yok, boş sayfa
--proxy-server=http://user:pass@host:portERR_NO_SUPPORTED_PROXIES hata sayfası, istisna yok
Proxy nesnesinde user:pass@host:portSayfa açıldı, ama Chrome proxy'yi atlayıp doğrudan bizim IP'mizle bağlandı
Selenium BiDi driver.network.add_auth_handler(), Chromeİsteği yanıtlarken Invalid InterceptionId, ardından zaman aşımı
CDP Fetch.continueWithAuth (aşağıdaki yardımcı)Chrome 154 ve Edge 153'te çalıştı
Girişsiz port (IP whitelist)Çalıştı

Tehlikeli olan üçüncü satırdır: betik çalışıyor gibi görünür, oysa trafik proxy'den hiç geçmez.

1. yol: IP whitelist

Betiği çalıştıran makinenin genel (public) IP'sini proxy'nin izinli listesine ekleyin; proxy artık şifre sormaz. Adım 4'teki kod olduğu gibi çalışır, Edge ve Firefox sürümleri de öyle. Proxynet en fazla 10 IP kabul eder. Bu yöntem sabit IP'li bir sunucuya uyar, IP'si sürekli değişen bir dizüstü bilgisayara uymaz. Ayrıntılar: Proxy Kimlik Doğrulama: User:Pass ve IP Whitelist.

2. yol: 407'yi Chrome DevTools Protocol üzerinden yanıtlamak

Chrome ve Edge, DevTools Protocol'de Fetch alanını sunar. handleAuthRequests açıkken tarayıcı kimlik bilgisi isteyen bir isteği bekletir ve Fetch.authRequired olayını gönderir; bu olayın source değeri Server ya da Proxy olur. Aşağıdaki yardımcı yalnız proxy'den gelen istekleri yanıtlar. Kullandığı websocket-client paketi Selenium ile birlikte kurulur.

python
# proxy_auth.py
import json
import threading
import urllib.request

import websocket  # selenium ile birlikte kurulur (websocket-client)


def attach_proxy_auth(driver, username, password):
    """Sekmedeki proxy 407 isteklerini Chrome DevTools Protocol üzerinden yanıtlar."""
    caps = driver.capabilities
    vendor = caps.get("goog:chromeOptions") or caps.get("ms:edgeOptions")  # Chrome ya da Edge
    address = vendor["debuggerAddress"]
    with urllib.request.urlopen(f"http://{address}/json") as resp:
        targets = json.load(resp)
    page = next(t for t in targets if t["type"] == "page")
    ws = websocket.create_connection(page["webSocketDebuggerUrl"], suppress_origin=True)

    counter = {"id": 0}

    def send(method, params=None):
        counter["id"] += 1
        ws.send(json.dumps({"id": counter["id"], "method": method, "params": params or {}}))

    def listen():
        while True:
            try:
                msg = json.loads(ws.recv())
            except Exception:
                return  # tarayıcı kapatıldı
            method = msg.get("method")
            params = msg.get("params", {})
            if method == "Fetch.requestPaused":
                send("Fetch.continueRequest", {"requestId": params["requestId"]})
            elif method == "Fetch.authRequired":
                if params["authChallenge"]["source"] == "Proxy":
                    answer = {"response": "ProvideCredentials",
                              "username": username, "password": password}
                else:
                    answer = {"response": "Default"}  # sitenin kendi giriş ekranını yanıtlamak bize düşmez
                send("Fetch.continueWithAuth", {"requestId": params["requestId"],
                                                "authChallengeResponse": answer})

    send("Fetch.enable", {"handleAuthRequests": True})
    while json.loads(ws.recv()).get("id") != counter["id"]:
        pass  # ilk driver.get() çağrısından önce yakalamanın açılmasını bekle
    threading.Thread(target=listen, daemon=True).start()
    return ws

Kullanmak için sürücü başladıktan sonra tek satır yeterlidir:

python
from selenium import webdriver
from proxy_auth import attach_proxy_auth

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://pr.proxynet.io:8000")
driver = webdriver.Chrome(options=options)
attach_proxy_auth(driver, "user", "pass")
driver.get("https://api.ipify.org/?format=json")

Sınırlar: yardımcı yalnız bağlandığı sekmeyi kapsar, yeni açılan bir pencere onsuz başlar. Şifre yanlışsa Chrome ERR_TOO_MANY_RETRIES gösterir.

Selenium Wire ve proxy eklentileri ne durumda?

Selenium Wire deposu 3 Ocak 2024'te arşivlendi. Temiz bir Python 3.13 ortamında from seleniumwire import webdriver satırı bizde ModuleNotFoundError: No module named 'pkg_resources' hatasıyla durdu. Kimlik doğrulama eklentileri --load-extension anahtarına dayanıyordu; resmî Chrome sürümleri 137'den itibaren bu anahtarı yok sayıyor, yalnız Chrome for Testing ve Chromium hâlâ kabul ediyor. SeleniumBase ise proxy="user:pass@host:port" değerini kabul eder ve girişi kendisi halleder: SeleniumBase ile Proxy Nasıl Kullanılır?

Selenium'da hangi proxy yöntemini kullanmalısınız?

YöntemChrome / EdgeFirefoxŞifre2026'daki durumu
--proxy-server argümanıEvetHayır, tercihleri kullanınHayırGüncel
Proxy nesnesiEvetEvetYok sayılırGüncel
IP whitelistEvetEvetGerekmezGüncel
CDP yardımcısıEvetHayırEvetTest edildi, çalışıyor
BiDi add_auth_handlerChrome'da başarısızGiriş penceresi hatasıTeorideHenüz güvenilir değil
Selenium WireImport başarısızImport başarısızEvetArşivlendi
Kimlik doğrulama eklentisiYalnız Chrome for TestingAyrı biçimEvetChrome 137+ ile bozuk

Selenium'da Microsoft Edge için proxy nasıl ayarlanır?

Edge Chromium tabanlıdır; bu yüzden EdgeOptions aynı argümanı alır, msedgedriver'ı da Selenium Manager indirir:

python
from selenium import webdriver

options = webdriver.EdgeOptions()
options.add_argument("--proxy-server=http://pr.proxynet.io:8000")
driver = webdriver.Edge(options=options)

CDP yardımcısı Edge ile de çalışır: Edge 153'te, şifreli test proxy'siyle sayfa proxy üzerinden açıldı.

Selenium'da Firefox ile proxy nasıl ayarlanır?

Firefox --proxy-server argümanını okumaz. Ya ağ tercihlerini (preferences) ayarlarsınız ya da Proxy nesnesini verirsiniz; geckodriver bu nesneyi aynı tercihlere çevirir. Test makinemizde Firefox kurulu değildi; Selenium Manager ilk çalıştırmada Firefox 156'yı indirdi.

python
from selenium import webdriver

options = webdriver.FirefoxOptions()
options.set_preference("network.proxy.type", 1)  # 1 = elle yapılandırma
options.set_preference("network.proxy.http", "pr.proxynet.io")
options.set_preference("network.proxy.http_port", 8000)
options.set_preference("network.proxy.ssl", "pr.proxynet.io")  # https:// sayfalar için kullanılır
options.set_preference("network.proxy.ssl_port", 8000)
driver = webdriver.Firefox(options=options)

SOCKS5 için network.proxy.socks, network.proxy.socks_port tercihlerini ayarlayın ve network.proxy.socks_version değerini 5 yapın. Firefox bu durumda alan adını proxy'ye gönderir, çünkü network.proxy.socks5_remote_dns varsayılan olarak açıktır. Pek çok eğitimde hâlâ geçen eski network.proxy.socks_remote_dns tercihi Firefox 156'da SOCKS5 için hiçbir şey değiştirmedi; socks5_remote_dns değerini False yaptığımızda ise Firefox adları yerelde çözdü. Firefox'ta proxy kimlik bilgisi için bir tercih yoktur ve CDP yardımcısı Firefox'a uygulanmaz. Selenium'un BiDi add_auth_handler yöntemi kimlik bilgilerimizi gönderdi, ama proxy giriş penceresi yüzünden sayfa yüklemesi yine UnexpectedAlertPresentException ile düştü. Firefox'ta IP whitelist kullanın.

Selenium SOCKS5 proxy kullanabilir mi?

Şifresiz olarak evet: --proxy-server=socks5://host:port. Testimizde Chrome alan adını yerelde çözmek yerine proxy'ye gönderdi; Chromium dokümanı da SOCKS5 ile ad çözümlemenin her zaman proxy tarafında yapıldığını doğruluyor.

Şifreyle hayır: Chromium SOCKS5 kimlik doğrulamasını desteklemiyor ve driver.get() çağrısı net::ERR_SOCKS_CONNECTION_FAILED hatası verdi. CDP yardımcısı da işe yaramaz, çünkü SOCKS'ta yanıtlanacak bir 407 yoktur. SOCKS5 portunu IP whitelist ile, ya da HTTP portunu yardımcıyla kullanın. Daha fazlası için SOCKS5 Proxyler Nedir? ve SOCKS ve HTTP Proxy Farkı yazılarına bakın. Proxynet'in SOCKS5 Proxy hizmeti aynı gateway'in kendi portunda çalışır.

Selenium proxy üzerinden HTTPS sitelerle çalışır mı?

Evet. Sayfaların hepsi https:// olsa bile proxy adresi http:// şemasıyla kalır: tarayıcı bir CONNECT tüneli açar ve TLS şifrelemesi tarayıcı ile site arasında uçtan uca sürer. Proxy sunucu adını görür, içeriği görmez. Proxy nesnesinin httpProxy yanında sslProxy de istemesinin sebebi budur; yalnız httpProxy verdiğimizde https:// sayfalarımız proxy'siz, doğrudan gitti.

--proxy-server içindeki https:// şeması ise proxy'ye giden bağlantının kendisini şifreler; bkz. HTTPS Proxy.

Java kullanarak proxy'leri Selenium ile nasıl entegre edebilirim?

Java aynı Proxy nesnesini kullanır. Bu yazıdaki eski örnek user:pass@ bilgisini setHttpProxy içine yazıyordu; testimizde bu ayar Chrome'un proxy'yi atlamasına yol açtı. Bu yüzden düzeltilmiş sürüm IP whitelist'e dayanıyor. System.setProperty("webdriver.chrome.driver", …) satırı da çıkarıldı, çünkü sürücüyü Selenium Manager buluyor. Selenium 4, Java 11 ya da daha yeni bir sürüm ister.

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

public class SeleniumProxyExample {
    public static void main(String[] args) {
        // Burada kimlik bilgisi yok: makinenin IP'si proxy'nin izinli listesinde (whitelist)
        String proxyAddress = "pr.proxynet.io:8000";

        Proxy proxy = new Proxy();
        proxy.setHttpProxy(proxyAddress);
        proxy.setSslProxy(proxyAddress);

        ChromeOptions options = new ChromeOptions();
        options.setProxy(proxy);

        // Selenium Manager uygun ChromeDriver'ı bulur ya da indirir
        WebDriver driver = new ChromeDriver(options);
        try {
            driver.get("https://api.ipify.org/?format=json");
            System.out.println(driver.getPageSource());
        } finally {
            driver.quit();
        }
    }
}

Python'daki argümanın Java karşılığı options.addArguments("--proxy-server=http://pr.proxynet.io:8000") satırıdır. Bu örneği Selenium dokümanına göre yazdık ve çalıştırmadık, çünkü test makinesinde yalnız Java 8 var.

Selenium'da residential proxy rotasyonu nasıl yapılır?

Proxy bir tarayıcının ömrü boyunca sabittir; bu yüzden IP değiştirmek yeni bir tarayıcı başlatmak demektir:

  • Dönen (rotating) gateway. Rotating Proxy ile çıkış IP'si gateway tarafında değişir, kodunuz tek adresle çalışmaya devam eder. Bir sayfa yüklemesinin bağlantıları farklı IP'lerden çıkabilir: ürün listeleri için sorun olmaz, bir giriş akışı için olur.
  • Sticky oturum. Sticky Proxy ile IP 1 ila 60 dakika aynı kalır. Her tarayıcıya Endpoint Oluşturucu'dan ayrı bir oturum kullanıcı adı verin: bir tarayıcı, bir oturum, bir çıkış IP'si.

İki yöntem de Residential Proxy IP'leriyle çalışır. Ayrıntılar: IP Rotasyonu Nedir ve Nasıl Çalışır? ve Python'da Proxy'ler Nasıl Döndürülür?

Tam örnek: yeniden deneyen paralel tarayıcılar

Aşağıdaki betik, alıştırma sitesi quotes.toscrape.com'un JavaScript ile oluşan altı sayfasını okur. Aynı anda üç Chrome çalıştırır, her denemede yeni bir tarayıcı başlatır, trafikten tasarruf için görselleri engeller ve geçici hataları artan beklemeyle yeniden dener. Yeniden denemenin düzeltemeyeceği hatalar, yalnız Chrome'un hata sayfasında görünenler dahil, görevi hemen durdurur.

python
import random
import re
import time
from concurrent.futures import ThreadPoolExecutor, as_completed

from selenium import webdriver
from selenium.common.exceptions import TimeoutException, WebDriverException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

from proxy_auth import attach_proxy_auth

PROXY_SERVER = "http://pr.proxynet.io:8000"
PROXY_USER = "user"
PROXY_PASS = "pass"
URLS = [f"https://quotes.toscrape.com/js/page/{n}/" for n in range(1, 7)]
WORKERS = 3  # aynı anda açık tarayıcı sayısı
ATTEMPTS = 3
# Bunları yeniden deneme düzeltmez: önce adresi, portu ve kimlik bilgilerini kontrol edin
FATAL = ("ERR_PROXY_CONNECTION_FAILED", "ERR_NO_SUPPORTED_PROXIES",
         "ERR_SOCKS_CONNECTION_FAILED", "ERR_TOO_MANY_RETRIES")


def new_driver():
    options = webdriver.ChromeOptions()
    options.add_argument(f"--proxy-server={PROXY_SERVER}")
    options.add_argument("--headless")
    # Görselleri atla: proxy'den daha az trafik geçer
    options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
    driver = webdriver.Chrome(options=options)
    driver.set_page_load_timeout(30)
    attach_proxy_auth(driver, PROXY_USER, PROXY_PASS)
    return driver


def scrape(url):
    for attempt in range(ATTEMPTS):
        driver = new_driver()  # her denemede yeni tarayıcı ve yeni proxy bağlantısı
        try:
            driver.get(url)
            # Bazı proxy hataları istisna fırlatmadan Chrome'un hata sayfasını açar
            if driver.execute_script("return document.body.className") == "neterror":
                code = re.search(r"ERR_[A-Z_]+", driver.page_source)
                raise WebDriverException(code.group(0) if code else "Chrome error page")
            WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "div.quote span.text"))
            )
            quotes = driver.find_elements(By.CSS_SELECTOR, "div.quote span.text")
            return url, [q.text for q in quotes]
        except (TimeoutException, WebDriverException) as exc:
            if any(code in str(exc) for code in FATAL) or attempt == ATTEMPTS - 1:
                raise
            time.sleep(2**attempt + random.random())  # rastgele sapmalı üstel bekleme
        finally:
            driver.quit()


with ThreadPoolExecutor(max_workers=WORKERS) as pool:
    futures = [pool.submit(scrape, url) for url in URLS]
    for future in as_completed(futures):
        try:
            url, quotes = future.result()
            print(f"{url}: {len(quotes)} quotes")
        except Exception as exc:
            print("failed:", str(exc).splitlines()[0])

Altı sayfanın hepsi 10'ar alıntı döndürdü; toplam süre yaklaşık 22 saniyeydi. Kapalı bir port her görevi net::ERR_PROXY_CONNECTION_FAILED ile, yanlış şifre ise ERR_TOO_MANY_RETRIES ile durdurdu. Worker sayısını makul tutun: her worker tam bir Chrome'dur ve çok sayıda paralel oturum 429 Too Many Requests hatasına yol açar.

Selenium'un proxy'yi gerçekten kullandığı nasıl kontrol edilir?

Proxy'li tarayıcıda api.ipify.org gibi IP'nizi gösteren bir sayfa açın ve sonucu kendi IP'nizle karşılaştırın. İkisi aynıysa trafik proxy'den geçmiyordur. Panelinizde de trafik görünmelidir. WebRTC yerel IP'nizi yine de açığa çıkarabilir; bkz. WebRTC ve DNS Sızıntısı Nedir, Nasıl Önlenir? Adım adım bir kontrol için Proxy Çalışıyor mu? Proxy Nasıl Test Edilir?, terminalden tek satırlık kontrol için cURL ile Proxy Nasıl Kullanılır? yazısına bakabilirsiniz.

Sık görülen Selenium proxy hataları ve çözümleri

Aşağıdaki mesajlar testlerimizden geliyor. Chrome hata kodları ya istisnanın içinde (unknown error: net::ERR_…) ya da yalnız hata sayfasında görünür.

MesajSebepÇözüm
Boş sayfa, boş driver.title, istisna yokProxy 407 döndü, kimlik bilgisi gönderilmediIP'yi whitelist'e ekleyin ya da CDP yardımcısını kullanın
ERR_NO_SUPPORTED_PROXIES (hata sayfası)Kimlik bilgisi --proxy-server içindeArgümandan user:pass@ kısmını çıkarın
net::ERR_PROXY_CONNECTION_FAILEDO adres ve portta dinleyen bir şey yokAdresi, portu ve güvenlik duvarını kontrol edin
net::ERR_TUNNEL_CONNECTION_FAILEDProxy tüneli açamadıÖnce hedef sunucuyu, sonra proxy'yi kontrol edin
net::ERR_SOCKS_CONNECTION_FAILEDSOCKS5 proxy şifre istiyorYardımcıyla HTTP portu ya da whitelist
ERR_TOO_MANY_RETRIES (hata sayfası)Proxy yardımcının gönderdiği kimlik bilgilerini reddettiKullanıcı adını ve şifreyi yeniden kopyalayın
TypeError: WebDriver.__init__() got an unexpected keyword argument 'executable_path'Selenium 3 koduParametreyi silin; sürücüyü Selenium Manager bulur
… unexpected keyword argument 'chrome_options'Aynı sorun, eski adoptions= kullanın
Timed out receiving message from rendererBir sayfa yüklemesi hiç bitmediProxy'yi kontrol edin, sonra yeniden deneyin

Düz Python HTTP istemcilerinin bağlantı hataları Max Retries Exceeded With URL Hatası Nedir, Nasıl Çözülür? yazısında satır satır okunuyor.

Kullanım alanları

  • Fiyat takibi: JavaScript ağırlıklı mağazaları sattığınız pazardan görmek için: rakip fiyat takibi ve fiyat izleme.
  • Yerelleştirme ve QA: yayın öncesi kendi sitenizi birkaç ülkeden açmak için, bkz. uygulama testi.
  • Reklam doğrulama: reklamlarınızı ödeme yaptığınız bölgelerde kontrol etmek için, bkz. reklam doğrulama.
  • Veri toplama: JavaScript gerektiren sayfalardan: veri kazıma.

Proxy isteğin nereden geldiğini değiştirir, sitenin neye izin verdiğini değiştirmez. Sitenin robots.txt dosyasını ve kullanım şartlarını okuyun, istek hızını düşük tutun ve varsa resmî API'yi tercih edin. Proxy otomasyonu da gizlemez: WebDriver kontrolündeki bir tarayıcı, standardın gereği olarak navigator.webdriver değerini true bildirir.

Karar rehberi

İhtiyaçÖneri
Sabit IP'li sunucuIP whitelist + --proxy-server, kodda şifre yok
IP'si değişen dizüstü bilgisayar ya da CI makinesiHTTP portu + CDP yardımcısı
FirefoxAğ tercihleri + IP whitelist
SOCKS5--proxy-server içinde socks5://, yalnız whitelist ile
Giriş ya da ödeme akışıSticky oturum, oturum başına bir tarayıcı
Birbirinden bağımsız çok sayıda sayfaDönen (rotating) gateway
Tek tarayıcıda her sayfaya farklı proxyPlaywright'ın context başına proxy'si, bkz. Playwright Nedir ve Proxy ile Nasıl Kullanılır?

Sıkça sorulan sorular

Selenium kullanıcı adı ve şifreli proxy kullanabilir mi?

Standart seçeneklerle hayır, çünkü bu seçeneklerde kimlik bilgisi alanı yok. Chrome ve Edge'de bu yazıdaki DevTools yardımcısı proxy'nin 407 isteğini yanıtlar. Hangi tarayıcı olursa olsun IP whitelist şifre ihtiyacını ortadan kaldırır.

Selenium Wire 2026'da hâlâ çalışıyor mu?

3 Ocak 2024'te arşivlendi. Temiz bir Python 3.13 ortamında bizde import edilemedi, çünkü güncel setuptools sürümlerinin artık içermediği pkg_resources modülüne dayanıyor. Yardımcıyı ya da whitelist'i kullanın.

Tarayıcıyı yeniden başlatmadan proxy nasıl değiştirilir?

Proxy oturum başlarken sabitlenir: driver.quit() çağırın ve yeni bir sürücü başlatın. Tek tarayıcıda her sayfaya yeni IP istiyorsanız dönen bir gateway kullanın ya da context başına proxy alan Playwright'a geçin.

Proxy headless modda çalışır mı?

Evet. --proxy-server ve CDP yardımcısı --headless ile de, onsuz da aynı davranır; bu yazıdaki örneklerin hepsi headless çalıştı.

Selenium'da kimlik doğrulamalı SOCKS5 proxy kullanabilir miyim?

Chrome ve Edge'de hayır, ikisi de SOCKS5 kimlik doğrulamasını desteklemiyor. Firefox 156 da SOCKS5 el sıkışmasında proxy'mize yalnız şifresiz yöntemi önerdi. SOCKS5'i whitelist ile, şifreli kullanım için HTTP portunu tercih edin.

Site neden hâlâ gerçek IP'mi gösteriyor?

Genellikle proxy hiç uygulanmamıştır: Proxy nesnesine yazılan kimlik bilgileri Chrome'un doğrudan bağlanmasına yol açar, sslProxy içermeyen bir Proxy nesnesi de https:// sayfaları proxy'siz bırakır. IP doğru ama konum yanlış görünüyorsa WebRTC sızıntısını test edin.

Özet

Selenium proxy'yi tarayıcı oturumu başına bir kez ayarlar: Chrome ve Edge için --proxy-server, Firefox için tercihler ya da Proxy nesnesi. Kimlik doğrulama için IP whitelist kullanın ya da Chrome ve Edge'de 407 isteğini yanıtlayan DevTools yardımcısını çalıştırın; Selenium Wire ve komut satırından yüklenen eklentiler ise artık çalışmıyor. SOCKS5 yalnız şifresiz çalışır, IP rotasyonu da IP ya da oturum başına bir tarayıcı demektir. Kurulum hazır olduğunda Proxynet proxy sayfasından bir paket seçin ve gateway bilgilerini Endpoint Oluşturucu'dan alın.

ChatGPT'ye sorClaude'a sor