Skip to content
Intermediate / 2 min read

چگونه از پروکسی‌های مسکونی چرخشی IPRoyal با Selenium در Python برای وب اسکرپینگ استفاده کنیم

راهنمای عملی برای یکپارچه‌سازی پروکسی‌های مسکونی IPRoyal با Selenium WebDriver در Python، شامل احراز هویت، چرخش و عیب‌یابی.

SOCKS5 HTTP(S) وب اسکرپینگ

مرور کلی

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

از آنجا که Selenium به‌طور بومی از احراز هویت پروکسی در همه درایورها پشتیبانی نمی‌کند، از بسته selenium-wire استفاده می‌کنیم که Selenium را گسترش می‌دهد و اعتبارنامه‌های پروکسی را به‌سادگی مدیریت می‌کند. مثال‌های زیر از Chrome استفاده می‌کنند، اما همان رویکرد با سایر مرورگرهای پشتیبانی‌شده توسط Selenium کار می‌کند.

پیش‌نیازها

  • Python 3.8 یا جدیدتر
  • یک حساب IPRoyal با اعتبارنامه‌های پروکسی مسکونی
  • آشنایی پایه با Python و Selenium
  • مرورگر Chrome و ChromeDriver نصب‌شده (یا یک درایور مرورگر جایگزین)

گام ۱: اعتبارنامه‌های پروکسی IPRoyal خود را جمع‌آوری کنید

به داشبورد IPRoyal خود وارد شوید و جزئیات نقطه پایانی پروکسی مسکونی را پیدا کنید. شما نیاز دارید به:

  • میزبان پروکسی (مثلاً geo.iproyal.com یا میزبانی که در داشبورد شما نشان داده شده است)
  • شماره پورت
  • نام کاربری
  • رمز عبور

پروکسی‌های مسکونی IPRoyal معمولاً هر دو نوع جلسه چرخشی و چسبنده را ارائه می‌دهند. برای جلسات چرخشی، هر درخواست (یا هر جلسه مرورگر جدید) می‌تواند از IP متفاوتی استفاده کند. برای جلسات چسبنده، می‌توانید با استفاده از یک شناسه جلسه در نام کاربری، IP را برای مدتی ثابت نگه دارید. قالب دقیق را در داشبورد خود بررسی کنید—اغلب یک شناسه جلسه به نام کاربری اضافه می‌کنید، مانند yourusername-session-abc123.

گام ۲: نصب Selenium و selenium-wire

بسته‌های موردنیاز را با pip نصب کنید:

pip install selenium selenium-wire

مطمئن شوید که نسخه ChromeDriver با نسخه Chrome نصب‌شده شما مطابقت دارد. می‌توانید ChromeDriver را از صفحه Chrome for Testing دانلود کنید یا از مدیریتی مانند webdriver-manager استفاده کنید.

گام ۳: پیکربندی Selenium با احراز هویت پروکسی IPRoyal

یک اسکریپت Python ایجاد کنید که یک درایور Selenium Wire را با اعتبارنامه‌های پروکسی IPRoyal شما راه‌اندازی کند. جای‌نگهدارها را با مقادیر واقعی خود جایگزین کنید.

from seleniumwire import webdriver

# Replace with your IPRoyal proxy details
proxy_user = "your_username"
proxy_pass = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"

# Build the proxy URL
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"

# Configure Selenium Wire proxy options
proxy_options = {
    'proxy': {
        'http': proxy_url,
        'https': proxy_url,
        'no_proxy': 'localhost,127.0.0.1'
    }
}

# Launch Chrome with Selenium Wire
driver = webdriver.Chrome(seleniumwire_options=proxy_options)

try:
    driver.get("https://httpbin.org/ip")
    print(driver.find_element("tag name", "body").text)
finally:
    driver.quit()

اسکریپت را اجرا کنید. اگر پروکسی کار کند، باید یک آدرس IP ببینید که متعلق به شبکه IPRoyal است، نه IP واقعی شما.

گام ۴: چرخش IPها بین درخواست‌ها

دو روش رایج برای چرخش IPها با پروکسی‌های مسکونی IPRoyal وجود دارد:

  1. نقطه پایانی چرخشی: برای هر درخواست از همان میزبان و پورت استفاده کنید. پروکسی به‌طور خودکار برای هر اتصال یک IP جدید اختصاص می‌دهد. این ساده‌ترین روش برای اسکرپینگ بدون حالت است.
  2. جلسات چسبنده با شناسه جلسه: یک شناسه جلسه منحصربه‌فرد به نام کاربری خود اضافه کنید (مثلاً yourusername-session-abc123). همه درخواست‌هایی که از آن شناسه جلسه استفاده می‌کنند تا زمانی که جلسه منقضی شود یا شناسه را تغییر دهید، از همان IP استفاده خواهند کرد. این برای جریان‌های چندمرحله‌ای مانند ورود و سپس اسکرپینگ داده مفید است.

برای چرخش دستی IPها در Selenium، می‌توانید برای هر کار اسکرپینگ یک نمونه درایور جدید با شناسه جلسه متفاوت ایجاد کنید. در اینجا مثالی آورده شده که روی فهرستی از شناسه‌های جلسه می‌چرخد:

import time
from seleniumwire import webdriver

base_username = "your_username"
base_password = "your_password"
proxy_host = "your-iproyal-host"
proxy_port = "your_port"

session_ids = ["session1", "session2", "session3"]

for session_id in session_ids:
    # Construct username with session ID (adjust syntax per IPRoyal docs)
    username = f"{base_username}-session-{session_id}"
    proxy_url = f"http://{username}:{base_password}@{proxy_host}:{proxy_port}"

    proxy_options = {
        'proxy': {
            'http': proxy_url,
            'https': proxy_url,
            'no_proxy': 'localhost,127.0.0.1'
        }
    }

    driver = webdriver.Chrome(seleniumwire_options=proxy_options)
    try:
        driver.get("https://httpbin.org/ip")
        print(f"Session {session_id}:", driver.find_element("tag name", "body").text)
    finally:
        driver.quit()
    time.sleep(1)

اگر IPRoyal یک نقطه پایانی چرخشی ارائه می‌دهد که IP را در هر درخواست تغییر می‌دهد، می‌توانید منطق شناسه جلسه را نادیده بگیرید و از همان اعتبارنامه‌ها استفاده کنید. رفتار را در داشبورد خود تأیید کنید.

گام ۵: مدیریت هدف‌گیری جغرافیایی و جلسات چسبنده

پروکسی‌های مسکونی IPRoyal از هدف‌گیری کشور و شهر پشتیبانی می‌کنند. معمولاً می‌توانید مکان را با افزودن کد کشور به نام کاربری یا با استفاده از یک نقطه پایانی اختصاصی مشخص کنید. برای مثال، بسیاری از ارائه‌دهندگان از قالب نام کاربری مانند yourusername-country-us استفاده می‌کنند. برای نحو دقیق، داشبورد IPRoyal خود را بررسی کنید.

برای حفظ یک جلسه چسبنده برای اسکرپینگ چندمرحله‌ای (مثلاً افزودن به سبد خرید، سپس تسویه حساب)، از یک شناسه جلسه واحد در تمام اقدامات استفاده کنید و همان نمونه درایور را باز نگه دارید. تغییر درایور یا شناسه جلسه منجر به IP متفاوتی می‌شود.

گام ۶: تأیید پروکسی و مدیریت خطاها

همیشه تأیید کنید که درخواست‌های شما از طریق پروکسی ارسال می‌شوند. یک بررسی ساده بازدید از https://httpbin.org/ip یا https://ipinfo.io/ip و تأیید اینکه IP متعلق به شما نیست. اگر نیاز به بررسی هدرها دارید، Selenium Wire به شما اجازه دسترسی به اشیاء درخواست و پاسخ را می‌دهد:

for request in driver.requests:
    if request.response:
        print(request.url, request.response.status_code)

عیب‌یابی

مشکل علت احتمالی راه‌حل
407 Proxy Authentication Required نام کاربری/رمز عبور نادرست یا کاراکترهای خاص که URL-encode نشده‌اند کاراکترهای خاص را در نام کاربری/رمز عبور URL-encode کنید (مثلاً @ به %40 تبدیل می‌شود). اعتبارنامه‌ها را در داشبورد IPRoyal خود تأیید کنید.
وقفه در اتصال میزبان/پورت اشتباه یا مسدود بودن فایروال میزبان و پورت را دوباره بررسی کنید. اگر IPRoyal گزینه‌های دیگری ارائه می‌دهد، پورت متفاوتی را امتحان کنید. مطمئن شوید که فایروال شما اتصالات خروجی را مجاز می‌کند.
IP تغییر نمی‌کند استفاده از شناسه جلسه چسبنده یا اتصال کش‌شده از نقطه پایانی چرخشی استفاده کنید یا شناسه جلسه را تغییر دهید. درایور را ببندید و یکی جدید باز کنید.
خطای WebDriver هنگام اجرا عدم تطابق نسخه ChromeDriver ChromeDriver را به‌روزرسانی کنید تا با نسخه Chrome شما مطابقت داشته باشد.
خطاهای SSL پروکسی HTTPS را به‌درستی مدیریت نمی‌کند مطمئن شوید که در URL پروکسی حتی برای سایت‌های HTTPS از http:// استفاده می‌کنید (پروکسی HTTPS را تونل می‌زند).

خلاصه

در این آموزش، یاد گرفتید چگونه پروکسی‌های مسکونی IPRoyal را با Selenium در Python با استفاده از selenium-wire برای احراز هویت یکپارچه کنید. یک پروکسی واحد را پیکربندی کردید، چرخش را از طریق شناسه‌های جلسه چسبنده پیاده‌سازی کردید و تنظیمات را تأیید کردید. به یاد داشته باشید برای اسکرپینگ با حجم بالا از نقاط پایانی چرخشی و برای جریان‌های کاری چندمرحله‌ای از جلسات چسبنده استفاده کنید. همیشه اتصال پروکسی خود را قبل از اجرای کارهای بزرگ آزمایش کنید و برای قالب دقیق نقطه پایانی و پارامترهای جلسه به داشبورد IPRoyal خود مراجعه کنید.