Skip to content
Beginner / 3 min read

Selenium Rotating Proxy: چرخش IP در Selenium WebDriver (راهنمای مبتدیان)

راهنمای مبتدی‌پسند برای چرخش پروکسی‌ها در Selenium WebDriver. یک فهرست پروکسی راه‌اندازی کنید، احراز هویت را مدیریت کنید، تغییرات IP را تأیید کنید و بدانید چه زمانی یک دروازه اختصاصی WireGuard از NordLayer انتخاب هوشمندانه‌تری است.

SOCKS5 WireGuard وب اسکرپینگ حریم خصوصی/ناشناسی

بررسی اجمالی

Selenium WebDriver به‌تنهایی پروکسی‌ها را نمی‌چرخاند. وقتی در مقیاس بزرگ اسکرپ یا تست می‌کنید، یک آدرس IP واحد به‌سرعت به محدودیت نرخ، مسدودسازی جغرافیایی یا CAPTCHA می‌خورد. این آموزش نشان می‌دهد چگونه یک پروکسی به Selenium اختصاص دهید، از میان فهرستی از پروکسی‌ها بچرخید، تأیید کنید که IP واقعاً تغییر کرده است، و تصمیم بگیرید چه زمانی یک دروازه اختصاصی WireGuard (مانند NordLayer) گزینه مناسب‌تری نسبت به استخر پروکسی چرخشی است.

چرا در Selenium پروکسی‌ها را بچرخانیم؟

  • از محدودیت‌های نرخ مبتنی بر IP و مسدودی‌های موقت جلوگیری کنید.
  • به محتوایی دسترسی پیدا کنید که فقط در مناطق خاصی در دسترس است.
  • آزمایش کنید که سایت یا اپلیکیشن شما از مکان‌های مختلف چگونه رفتار می‌کند.
  • درخواست‌ها را توزیع کنید تا یک IP شبیه ربات به نظر نرسد.

راهبردهای چرخش

یک راهبرد را بر اساس تعداد درخواست‌هایی که نیاز دارید و مدت‌زمانی که هر نشست باید زنده بماند انتخاب کنید.

  • چرخش مبتنی بر فهرست — چرخش از میان یک فهرست ثابت پروکسی. ساده و رایگان، اما هر پروکسی دوباره استفاده می‌شود.
  • چرخش تصادفی — برای هر نشست یک پروکسی تصادفی انتخاب کنید. الگوهای قابل پیش‌بینی را کاهش می‌دهد.
  • Round-robin — استفاده از پروکسی‌ها به ترتیب. برای توزیع یکنواخت خوب است.
  • نشست چسبنده — برای یک جریان ورود یا پرداخت، همان پروکسی را نگه دارید، سپس تغییر دهید.
  • دروازه چرخشی — یک نقطه پایانی واحد که IP‌ها را از سمت ارائه‌دهنده برای شما می‌چرخاند. کد کمتر، اما کنترل کمتر.

برای بسیاری از پروژه‌های کوچک، انتخاب تصادفی از یک فهرست کافی است. برای اسکرپینگ تولیدی، یک سرویس پروکسی چرخشی مدیریت‌شده یا یک دروازه اختصاصی WireGuard برای دسترسی پایدار و غیرچرخشی را در نظر بگیرید.

پیش‌نیازها

  • Python 3.8 یا جدیدتر.
  • Google Chrome یا Mozilla Firefox نصب‌شده.
  • یک فهرست پروکسی (HTTP، HTTPS یا SOCKS5) یا اشتراک پروکسی چرخشی.
  • آشنایی پایه با اجرای اسکریپت‌های Python.

مراحل

  1. Selenium و یک مدیر WebDriver را نصب کنید.

    Selenium و یک ابزار کمکی نصب کنید که درایور مرورگر صحیح را به‌طور خودکار دانلود می‌کند.

    pip install selenium webdriver-manager
    
  2. فهرست پروکسی خود را آماده کنید.

    در Python فهرستی از پروکسی‌ها ایجاد کنید. از طرح کامل استفاده کنید تا Selenium بداند چگونه متصل شود.

    PROXIES = [
        'http://user:[email protected]:8080',
        'http://proxy2.example.com:8080',
        'socks5://proxy3.example.com:1080',
    ]
    

    اگر پروکسی‌های شما نام کاربری و رمز عبور می‌خواهند، قبل از ادامه مرحله ۴ را ببینید.

  3. یک پروکسی واحد را در Selenium (Chrome) پیکربندی کنید.

    پروکسی را با آرگومان --proxy-server به Chrome بدهید.

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    
    proxy = 'http://proxy2.example.com:8080'
    
    options = Options()
    options.add_argument(f'--proxy-server={proxy}')
    options.add_argument('--headless=new')
    
    driver = webdriver.Chrome(
        service=Service(ChromeDriverManager().install()),
        options=options
    )
    driver.get('https://api.ipify.org?format=json')
    print(driver.page_source)
    driver.quit()
    

    Chrome اطلاعات ورود را داخل رشته --proxy-server نمی‌پذیرد. اگر پروکسی شما به احراز هویت نیاز دارد، از لیست سفید IP استفاده کنید یا به Firefox تغییر دهید (مرحله ۴).

  4. احراز هویت پروکسی را مدیریت کنید.

    پروفایل‌های Firefox می‌توانند اطلاعات ورود پروکسی را ارسال کنند. این برای تنظیمات مبتدی‌پسند بدون کتابخانه‌های اضافی مفید است.

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    
    proxy_host = 'proxy2.example.com'
    proxy_port = 8080
    
    options = Options()
    options.set_preference('network.proxy.type', 1)
    options.set_preference('network.proxy.http', proxy_host)
    options.set_preference('network.proxy.http_port', proxy_port)
    options.set_preference('network.proxy.ssl', proxy_host)
    options.set_preference('network.proxy.ssl_port', proxy_port)
    
    driver = webdriver.Firefox(options=options)
    driver.get('https://api.ipify.org?format=json')
    print(driver.page_source)
    driver.quit()
    

    برای SOCKS5 همراه با احراز هویت، ساده‌ترین مسیر مبتدی این است که از ارائه‌دهنده پروکسی خود دسترسی با لیست سفید IP بخواهید. به این ترتیب هرگز رمز عبور را در اسکریپت خود قرار نمی‌دهید.

  5. پروکسی‌ها را برای هر نشست بچرخانید.

    برای هر URL یا وظیفه، یک WebDriver تازه با یک پروکسی تصادفی انتخاب‌شده ایجاد کنید. همیشه پس از اتمام، درایور را ببندید.

    import random
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.service import Service
    
    PROXIES = [
        'http://proxy1.example.com:8080',
        'http://proxy2.example.com:8080',
        'socks5://proxy3.example.com:1080',
    ]
    
    def get_driver():
        proxy = random.choice(PROXIES)
        options = Options()
        options.add_argument(f'--proxy-server={proxy}')
        options.add_argument('--headless=new')
        return webdriver.Chrome(
            service=Service(ChromeDriverManager().install()),
            options=options
        )
    
    urls = [
        'https://example.com/page-1',
        'https://example.com/page-2',
    ]
    
    for url in urls:
        driver = get_driver()
        try:
            driver.get(url)
            print(driver.title)
        finally:
            driver.quit()
    

    این الگو خواندنش آسان است، اما راه‌اندازی یک مرورگر جدید برای هر درخواست کند است. برای کارهای بزرگ‌تر، چند درایور را به‌صورت موازی اجرا کنید یا از یک نقطه پایانی دروازه چرخشی استفاده کنید. اگر برای ورودها یا پنل‌های مدیریت به یک IP پایدار و غیرچرخشی نیاز دارید، به مرحله ۷ بروید.

  6. تأیید کنید که آدرس IP تغییر کرده است.

    هرگز فرض نکنید که پروکسی کار کرده است. قبل از اسکرپ، IP خروجی را بررسی کنید.

    import json
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument('--proxy-server=http://proxy2.example.com:8080')
    options.add_argument('--headless=new')
    
    driver = webdriver.Chrome(options=options)
    driver.get('https://api.ipify.org?format=json')
    body = driver.find_element('tag name', 'body').text
    ip_info = json.loads(body)
    print(ip_info['ip'])
    driver.quit()
    

    اگر IP چاپ‌شده با IP واقعی شما مطابقت دارد، پروکسی استفاده نمی‌شود. قالب پروکسی و احراز هویت را بررسی کنید.

  7. بین پروکسی‌های چرخشی و یک دروازه اختصاصی WireGuard انتخاب کنید.

    پروکسی‌های چرخشی برای درخواست‌های ناشناس و پرحجم ایده‌آل هستند. اما برخی وظایف به عکس آن نیاز دارند: یک IP پایدار و در سطح تجاری که برای هر درخواست ثابت بماند.

    از یک دروازه اختصاصی WireGuard، مانند NordLayer، استفاده کنید زمانی که نیاز دارید به:

    • یک IP خروجی ثابت برای اعضای تیم یا کارهای خودکار.
    • تونل‌های رمزنگاری‌شده به‌جای تنظیمات پروکسی هر برنامه.
    • راه‌اندازی سریع برای یک تیم کوچک بدون نگهداری فهرست‌های پروکسی.
    • یک مسیر شبکه جداگانه برای ابزارهای داخلی، سایت‌های استیجینگ، یا رصد رتبه از یک منطقه.

    NordLayer تونل‌های VPN WireGuard در سطح تجاری با دروازه‌های اختصاصی و صورت‌حساب ماهانه ثابت ارائه می‌دهد. این یک استخر پروکسی چرخشی نیست، بنابراین از آن برای نشست‌هایی استفاده کنید که باید روی یک IP بمانند. از پروکسی‌های چرخشی استفاده کنید زمانی که هر درخواست باید از یک آدرس متفاوت بیاید.

عیب‌یابی

نشانه علت احتمالی راه‌حل
اتصال پروکسی رد شد میزبان، پورت یا طرح اشتباه بررسی کنید که رشته پروکسی شامل http:// یا socks5:// باشد
407 Proxy Authentication Required اطلاعات ورود وجود ندارد از لیست سفید IP یا پروفایل Firefox با احراز هویت استفاده کنید
نشست WebDriver ایجاد نشد عدم تطابق نسخه مرورگر/درایور Selenium و webdriver-manager را به‌روزرسانی کنید
درخواست‌ها هنوز IP واقعی شما را نشان می‌دهند پروکسی اعمال نشده تأیید کنید که --proxy-server قبل از driver.get() تنظیم شده است
CAPTCHA یا صفحه مسدود درخواست‌های بیش از حد یا پروکسی پرچم‌گذاری‌شده سرعت را کم کنید، با دقت بیشتری بچرخانید، یا از IPهای مسکونی/ISP استفاده کنید
پروکسی SOCKS5 در Chrome شکست می‌خورد Chrome از احراز هویت پروکسی برای SOCKS5 در آرگومان پشتیبانی نمی‌کند از Firefox یا یک تونل شرکتی احراز هویت‌شده مانند NordLayer استفاده کنید

خلاصه

  • Selenium پروکسی‌ها را به‌طور خودکار نمی‌چرخاند؛ شما برای هر نشست مرورگر یکی را اختصاص می‌دهید.
  • برای مبتدیان، با یک فهرست پروکسی کوچک، انتخاب تصادفی، و یک درایور تازه برای هر وظیفه شروع کنید.
  • پروفایل‌های Firefox احراز هویت پروکسی را راحت‌تر از Chrome مدیریت می‌کنند.
  • همیشه قبل از اعتماد به پروکسی، IP خروجی را با سرویسی مانند ipify تأیید کنید.
  • پروکسی‌های چرخشی برای اسکرپینگ توزیع‌شده و ناشناس بهترین هستند.
  • یک دروازه اختصاصی WireGuard مانند NordLayer زمانی بهتر است که به یک IP پایدار، رمزنگاری‌شده و در سطح تجاری برای تیم‌ها و نشست‌های طولانی‌مدت نیاز دارید.