Selenium Rotating Proxy: چرخش IP در Selenium WebDriver (راهنمای مبتدیان)
راهنمای مبتدیپسند برای چرخش پروکسیها در Selenium WebDriver. یک فهرست پروکسی راهاندازی کنید، احراز هویت را مدیریت کنید، تغییرات IP را تأیید کنید و بدانید چه زمانی یک دروازه اختصاصی WireGuard از NordLayer انتخاب هوشمندانهتری است.
بررسی اجمالی
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.
مراحل
-
Selenium و یک مدیر WebDriver را نصب کنید.
Selenium و یک ابزار کمکی نصب کنید که درایور مرورگر صحیح را بهطور خودکار دانلود میکند.
pip install selenium webdriver-manager -
فهرست پروکسی خود را آماده کنید.
در Python فهرستی از پروکسیها ایجاد کنید. از طرح کامل استفاده کنید تا Selenium بداند چگونه متصل شود.
PROXIES = [ 'http://user:[email protected]:8080', 'http://proxy2.example.com:8080', 'socks5://proxy3.example.com:1080', ]اگر پروکسیهای شما نام کاربری و رمز عبور میخواهند، قبل از ادامه مرحله ۴ را ببینید.
-
یک پروکسی واحد را در 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 تغییر دهید (مرحله ۴). -
احراز هویت پروکسی را مدیریت کنید.
پروفایلهای 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 بخواهید. به این ترتیب هرگز رمز عبور را در اسکریپت خود قرار نمیدهید.
-
پروکسیها را برای هر نشست بچرخانید.
برای هر 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 پایدار و غیرچرخشی نیاز دارید، به مرحله ۷ بروید.
-
تأیید کنید که آدرس 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 واقعی شما مطابقت دارد، پروکسی استفاده نمیشود. قالب پروکسی و احراز هویت را بررسی کنید.
-
بین پروکسیهای چرخشی و یک دروازه اختصاصی 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 پایدار، رمزنگاریشده و در سطح تجاری برای تیمها و نشستهای طولانیمدت نیاز دارید.