İçeriğe geç

Python'da Selenium için Proxy Nasıl Yapılandırılır: Eksiksiz Rehber

Инструменты
Python'da Selenium için Proxy Nasıl Yapılandırılır: Eksiksiz Rehber

Python'da Selenium için proxy yapılandırmak, proxy ayarlarının tarayıcıya özgü seçenekler üzerinden geçirilmesini ya da kimlik doğrulamalı oturumlar için Selenium-wire gibi ara katman kütüphanelerinin kullanılmasını gerektirir. Kimlik doğrulaması olmayan standart HTTP veya SOCKS5 proxy'leri için ChromeOptions içindeki --proxy-server argümanı en verimli yöntemdir; kimlik doğrulamalı proxy'ler ise çoğu zaman özel tarayıcı eklentileri veya proxy destekli sürücüler gerektirir.

Selenium otomasyonunda proxy entegrasyonu neden şart?

Selenium güçlü bir web otomasyon aracıdır, ancak varsayılan davranışı — tek ve statik bir IP adresi üzerinden çalışması — onu rate limiting ve IP kara listelemesine karşı oldukça savunmasız bırakır. Büyük ölçekli veri çıkarımı ya da farklı coğrafi bölgelerde otomatik testler yaparken proxy bir aracı görevi görür; gerçek kaynağınızı gizler ve istekleri birden çok IP adresine dağıtır.

GProxy gibi bir hizmet kullanmak, web sitelerinin trafiği tek bir otomatik kaynaktan geliyormuş gibi tanımlamasını engelleyen residential ve veri merkezi havuzlarına erişim sağlar. Bu özellikle şu senaryolarda kritiktir:

  • Web scraping: IP başına istek sıklığını izleyen Cloudflare veya Akamai gibi bot karşıtı mekanizmaları aşmak.
  • Yerelleştirme testleri: sitenin belirli ülkelerdeki kullanıcılara doğru para birimini, dili ve içeriği gösterdiğini doğrulamak.
  • Reklam doğrulama: reklamların hedef kitleye engellenmeden veya yönlendirilmeden doğru şekilde sunulduğundan emin olmak.
  • Yük testi: sunucu yanıt sürelerini ve CDN verimliliğini test etmek için farklı coğrafi konumlardan gelen trafiği simüle etmek.
Python'da Selenium için Proxy Nasıl Yapılandırılır: Eksiksiz Rehber

Chrome ve Firefox için temel proxy yapılandırması

Selenium'da proxy uygulamanın en basit yolu tarayıcının kendi seçenekleridir. Bu yöntem, proxy sağlayıcısının (örneğin GProxy) sunucunuzun IP adresini yetkilendirdiği ve bağlantı dizesinde kullanıcı adı ile parolaya gerek bırakmayan "IP whitelist" proxy'lerinde en iyi sonucu verir.

Chrome'u Options ile yapılandırma

Chrome'da add_argument metodunu kullanırsınız. Bu en hızlı uygulamadır ve tarayıcı başlatma süresine ihmal edilebilir bir yük ekler.

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

proxy_ip_port = "gw.gproxy.com:10000"

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_ip_port}')

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://api.ipify.org?format=json")
print(driver.page_source)
driver.quit()

Firefox'u Proxy nesnesiyle yapılandırma

Firefox proxy'leri farklı ele alır ve genellikle selenium.webdriver.common.proxy içindeki Proxy nesnesini kullanır. Bu, hangi protokollerin (HTTP, SSL, SOCKS) proxy kullanacağı üzerinde daha ayrıntılı denetim sağlar.

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_host = "gw.gproxy.com:10000"

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = proxy_host
proxy.ssl_proxy = proxy_host

options = webdriver.FirefoxOptions()
options.proxy = proxy

driver = webdriver.Firefox(options=options)
driver.get("https://httpbin.org/ip")
driver.quit()

Selenium'da proxy kimlik doğrulamasını yönetme

Standart Selenium, --proxy-server argümanı üzerinden kullanıcı adı ve parola gerektiren proxy'leri yerel olarak desteklemez. http://user:pass@host:port kullanmayı denerseniz Chrome genellikle kimlik bilgilerini yok sayar veya Selenium'un kolayca etkileşime giremeyeceği yerel bir tarayıcı açılır penceresi tetikler. Bunu çözmek için iki temel profesyonel yaklaşım vardır.

Yöntem 1: Selenium-wire kullanımı

Selenium-wire, Selenium'un yeteneklerini istek ve yanıtları inceleyecek şekilde genişleten ve en önemlisi proxy kimlik doğrulamasını şeffaf biçimde halleden bir sarmalayıcıdır. Bunu, trafiği yakalayıp gerekli kimlik doğrulama başlıklarını ekleyen yerel bir proxy sunucusu çalıştırarak yapar.

from seleniumwire import webdriver

# GProxy kimlik bilgileri ve endpoint
proxy_options = {
    'proxy': {
        'http': 'http://username:[email protected]:10000',
        'https': 'https://username:[email protected]:10000',
        'no_proxy': 'localhost,127.0.0.1'
    }
}

driver = webdriver.Chrome(seleniumwire_options=proxy_options)
driver.get("https://www.gproxy.com/check-ip")
driver.quit()

Yöntem 2: özel eklenti yaklaşımı

Selenium-wire'ın MITM (Man-In-The-Middle) proxy yükünün istenmediği yüksek performanslı ortamlarda, anlık olarak geçici bir Chrome eklentisi oluşturmak sektörün standart çözümüdür. Bu eklenti kimlik bilgilerini ayarlamak için chrome.proxy API'sini kullanır.

import os
import zipfile
from selenium import webdriver

def create_proxy_extension(proxy_host, proxy_port, proxy_user, proxy_pass):
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "GProxy Extension",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    background_js = f"""
    var config = {{
            mode: "fixed_servers",
            rules: {{
              singleProxy: {{
                scheme: "http",
                host: "{proxy_host}",
                port: parseInt({proxy_port})
              }},
              bypassList: ["localhost"]
            }}
          }};

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

    chrome.webRequest.onAuthRequired.addListener(
                function(details) {{
                    return {{
                        authCredentials: {{
                            username: "{proxy_user}",
                            password: "{proxy_pass}"
                        }}
                    }};
                }},
                {{urls: ["<all_urls>"]}},
                ['blocking']
    );
    """
    
    extension_path = 'proxy_auth_plugin.zip'
    with zipfile.ZipFile(extension_path, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)
    
    return extension_path

# Uygulama
proxy_ext = create_proxy_extension("gw.gproxy.com", "10000", "my_user", "my_pass")
options = webdriver.ChromeOptions()
options.add_extension(proxy_ext)
driver = webdriver.Chrome(options=options)
Python'da Selenium için Proxy Nasıl Yapılandırılır: Eksiksiz Rehber

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

Doğru yöntemin seçimi performans gereksinimlerinize, proxy türüne (residential veya veri merkezi) ve IP'leri sık sık rotasyona sokma ihtiyacınıza bağlıdır.

Yöntem Kimlik doğrulama desteği Performans Karmaşıklık En uygun kullanım
ChromeOptions Yalnızca IP whitelist Mükemmel Düşük Statik veri merkezi IP'leri
Selenium-wire Yerel kullanıcı/parola Orta (ek yük) Düşük Hızlı prototipleme, hata ayıklama
Özel eklenti Yerel kullanıcı/parola Mükemmel Yüksek Üretim düzeyinde scraping
GProxy Backconnect Tek endpoint Mükemmel Düşük Büyük ölçekli IP rotasyonu

Gelişmiş proxy yönetimi: rotasyon ve sticky oturumlar

GProxy kullanırken çoğu zaman rotasyonlu proxy'ler ile sticky oturumlar arasında seçim yaparsınız. Bunları Python'da nasıl uygulayacağınızı bilmek, ödeme akışları veya çok adımlı form gönderimleri sırasında oturum sürekliliğini korumak için hayati önem taşır.

Sticky oturumların uygulanması

Sticky oturum, Selenium sürücü örneğinizin yaptığı tüm isteklerin belirli bir süre boyunca (örneğin 10-30 dakika) aynı IP adresinde kalmasını sağlar. GProxy'de bu genellikle kullanıcı adı dizesindeki bir oturum kimliği ile yönetilir.

# GProxy residential havuzuyla sticky oturum örneği
session_id = "session_82734"
proxy_user = f"user-customer_id-session-{session_id}"
# Şimdi bu kullanıcı dizesini Selenium-wire veya eklenti yapılandırmanızda kullanın

Headless modu proxy ile yönetme

Selenium'u headless modda (--headless) çalıştırmak, sunucu tarafı betikler için standarttır. Ancak headless Chrome bazen gerçek IP'nizi sızdırabilir veya eklentileri yükleyemeyebilir. Kimlik doğrulama için eklenti yöntemini kullanıyorsanız, eklentilerin doğru yüklendiğinden emin olmak için Chrome 109+ sürümündeki yeni headless modunu kullanmalısınız:

options.add_argument('--headless=new')

--headless=new bayrağı, tarayıcı ortamının arayüzlü bir tarayıcıyı çok daha yakından taklit etmesini sağlar; böylece proxy kimlik doğrulamasının güvenilirliği artar ve gelişmiş bot engelleme betikleri tarafından tespit edilme olasılığı azalır.

Sık karşılaşılan proxy sorunlarını giderme

Doğru yapılandırmaya rağmen Selenium proxy kurulumlarında sorunlar çıkabilir. En sık görülen problemler ve teknik çözümleri şunlardır:

  • ProxyConnectionError: genellikle yanlış port veya proxy sağlayıcısına giden dışa dönük bağlantıyı engelleyen bir güvenlik duvarı nedeniyle oluşur. 10000 numaralı portun (ya da sağlayıcınıza özel portun) açık olduğundan emin olun.
  • DNS sızıntıları: Selenium varsayılan olarak DNS sorgularını yerel ISP'niz üzerinden çözebilir. Bunu önlemek için, özellikle SOCKS5 kullanırken, tarayıcının DNS aramalarını proxy üzerinden yapacak şekilde yapılandırıldığından emin olun.
  • Yavaş yükleme süreleri: residential proxy'ler doğal olarak veri merkezi proxy'lerinden daha yavaştır. Performans kritikse ve agresif IP engellemesiyle karşılaşmıyorsanız GProxy'nin veri merkezi havuzunu kullanın.
  • Kimlik doğrulama açılır pencereleri: bir giriş penceresi görüyorsanız, kimlik doğrulama yönteminiz (eklenti veya Selenium-wire) başarısız olmuştur ya da ilk istekten önce başlatılmamıştır.

Önemli noktalar

Selenium'da proxy yapılandırmak çok katmanlı bir süreçtir. Basit IP whitelist proxy'leri komut satırı argümanlarıyla halledilebilirken, kimlik doğrulamalı residential proxy'ler özel eklentiler veya Selenium-wire gibi daha sağlam çözümler gerektirir.

  • GProxy Backconnect kullanın: Python kodunuzda 10.000 IP'lik bir liste yönetmek yerine, rotasyonu otomatik olarak yöneten tek bir GProxy backconnect endpoint'i kullanın.
  • Eklentileri önceliklendirin: üretim ortamlarında Chrome eklentisi yöntemi Selenium-wire'a göre üstündür, çünkü ikinci bir proxy katmanı eklemez ve daha düşük gecikme sağlar.
  • Başarı oranlarını izleyin: driver.get() çağrılarınızı her zaman try-except bloklarına sarın ve WebDriverException yakalayın; böylece bir proxy düğümü başarısız olduğunda betiğiniz oturum kimliğini değiştirip yeniden deneyebilir.
support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.