خانه/مقالات/راهنمای عملی اسکریپینگ با Selenium Stealth
سلنیوم
پروکسی و چرخش IP
ضد بلاک (Anti-bot)
برگشت به مقاله‌ها

راهنمای عملی اسکریپینگ با Selenium Stealth

راهنمای عملی اسکریپینگ با Selenium Stealth
در این راهنمای فارسی به‌صورت عملی یاد می‌گیرید چطور با Selenium Stealth یک جلسه مرورگر پنهان‌تر ایجاد کنید، User‑Agent و پراکسی را مدیریت کنید، پیکربندی WebDriver را بهینه کنید و نکات عملکردی و امنیتی لازم برای اسکریپینگ پایدار را به‌کار ببرید.
آسان اسکریپ آسان اسکریپ
1405-06-11

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

مقدمه

این مقاله یک راهنمای آموزنده و عملی برای توسعه‌دهنده‌های پایتون سطح متوسط است که می‌خواهند از Selenium Stealth برای اسکریپینگ وب استفاده کنند. در پایان این راهنما شما با نصب و پیکربندی اولیه، نمونه‌های کد کاربردی، مدیریت User‑Agent و پراکسی، و نکات مربوط به عملکرد و پایداری آشنا خواهید شد.

خلاصه سریع (TLDR)

یک نمونهٔ مینیمال برای شروع سریع: ایجاد WebDriver، اعمال Stealth و بازدید یک صفحه.

from selenium import webdriver
from selenium_stealth import stealth

chrome_options = webdriver.ChromeOptions()
# مثال: headless یا user-agent را در chrome_options اضافه کنید

driver = webdriver.Chrome(options=chrome_options)

stealth(
    driver,
    languages=["en-US", "en"],
    vendor="Google Inc.",
    platform="Win32",
    webgl_vendor="Intel Inc.",
    renderer="Intel Iris OpenGL Engine",
    fix_hairline=True
)

driver.get("https://example.com")
# ... تعامل با صفحه ...
driver.quit()

ورودی: شیٔ webdriver.Chrome. خروجی: یک نشست مرورگر که خصوصیات navigator و WebGL را تا حدی تغییر می‌دهد تا شبیه مرورگر واقعی‌تر باشد.

درک اصولی Selenium Stealth

چالش‌های رایج در اسکریپینگ عبارت‌اند از: بلاک شدن IP، کپچاها و تشخیص خودکار مرورگرهای اتومات. Selenium Stealth مجموعه‌ای از عملیات برای جعل (spoof) خصوصیات مرورگر مثل navigator.vendor، platform، WebGL و لیست زبان‌ها فراهم می‌کند تا احتمال تشخیص کاهش یابد.

نکتهٔ کلیدی: این ابزار رفتار مرورگر را به‌تنهایی «انسانی» نمی‌کند؛ بلکه مجموعه‌ای از پرچم‌ها و اصلاحات را اعمال می‌کند که در کنار دیگر تکنیک‌ها (پراکسی، چرخش UA، تاخیرهای هوشمند) موثر خواهند بود.

شروع سریع: نصب و مثال پایه

نصب ساده با pip:

pip install selenium-stealth selenium webdriver-manager

نمونه پایهٔ پایتون (شرح وظایف خط‌به‌خط پس از بلوک):

from selenium import webdriver
from selenium_stealth import stealth
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# chrome_options.add_argument('--headless')  # در صورت نیاز

driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)

stealth(driver, languages=["en-US","en"], vendor="Google Inc.", platform="Win32", fix_hairline=True)

driver.get('https://example.com')
print(driver.title)
driver.quit()

توضیح:

  • خط‌های اول: وارد کردن ماژول‌ها و نصب خودکار درایور با ChromeDriverManager.
  • chrome_options: پارامترهایی مثل sandbox و shared memory برای اجرای پایدار در سرور لازم است.
  • پس از ایجاد driver، تابع stealth اجرا می‌شود تا خصوصیات مرورگر تنظیم گردد.
  • در نهایت صفحه بارگذاری و عنوان چاپ می‌شود؛ سپس راننده بسته خواهد شد.

پیکربندی WebDriver و نکات عملی

حتی وقتی از Selenium Stealth استفاده می‌کنید، تنظیم گزینه‌های WebDriver ضروری است. فهرست مهم‌ترین گزینه‌ها و دلیل استفاده:

  • Headless Mode: مصرف منابع را کم می‌کند اما علامت آشکاری برای تشخیص است؛ در صورت استفاده، سایر جلوه‌های شناسایی باید تقویت شوند.
  • User-Agent: بهتر است صریحاً مقداردهی شود یا چرخانده شود تا با Traffic طبیعی مطابقت داشته باشد.
  • Window Size: اندازهٔ معمولی (مثلاً 1366x768) انتخاب کنید تا الگوهای غیرمعمول به وجود نیاید.
  • Proxy Settings: برای جلوگیری از بلوک شدن IP ضروری است؛ می‌تواند از طریق گزینه‌ها یا ابزارهایی مانند seleniumwire مدیریت شود.
  • Preferences / Capabilities: دانلود خودکار، handling popup و مسیر ذخیره‌سازی را تنظیم کنید تا رفتار مرورگر به حالت کاربر نزدیک‌تر شود.

سفارشی‌سازی آرگومان‌های Stealth

آرگومان‌هایی که معمولاً به تابع stealth پاس داده می‌شوند و نقش هر کدام:

  • languages: لیست زبان‌های navigator.languages؛ برای تطابق با محتوای منطقه‌ای.
  • vendor و platform: مقادیر navigator.vendor و navigator.platform را شبیه‌سازی می‌کنند.
  • webgl_vendor و renderer: اطلاعات WebGL را جعل می‌کنند تا fingerprint کمتر مشکوک شود.
  • fix_hairline: اصلاح یک اثر ظریف که گاهی در حالت headless دیده می‌شود.
  • user_agent و accept_languages: کنترل headerها برای سازگاری بیشتر.
  • navigator_plugins و plugins: تنظیم لیست پلاگین‌ها برای جعل فایل‌پروفایل مرورگر.
  • hardware_concurrency: تعداد هسته‌های گزارش‌شده توسط مرورگر را شبیه‌سازی می‌کند.

بهترین‌عمل: مقادیر را براساس target واقعی (نوع دستگاه و منطقه) تنظیم کنید و از تناقض بین headerها و properties جلوگیری نمایید.

چرخش User‑Agent و نمونهٔ عملی

چرخش User‑Agent یکی از ساده‌ترین و موثرترین تکنیک‌ها برای تنوع درخواست‌ها است. نمونهٔ عملی:

import random
from selenium import webdriver
from selenium_stealth import stealth

user_agents = [
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
]

ua = random.choice(user_agents)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'user-agent={ua}')

driver = webdriver.Chrome(options=chrome_options)
stealth(driver, languages=["en-US","en"], vendor="Google Inc.", platform="Win32")

# ادامهٔ اسکریپت
driver.quit()

نکات عملی:

  • فهرست UA را از منابع معتبر جمع‌آوری و مرتباً به‌روزرسانی کنید.
  • UA انتخاب‌شده باید با accept-language و دیگر مشخصات مرورگر سازگار باشد تا اختلاف‌های واضح ایجاد نکند.
  • چرخش را همراه با تاخیرهای تصادفی و الگوی رفتاری انسانی ترکیب کنید.

استفاده از پراکسی‌ها در کنار Selenium Stealth

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

from selenium import webdriver
from selenium_stealth import stealth

proxy = "187.95.229.112:8080"  # مثال: برای پراکسی‌های بی‌احراز یا از پروتکل مناسب استفاده کنید
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f"--proxy-server={proxy}")

driver = webdriver.Chrome(options=chrome_options)
stealth(driver, languages=["en-US","en"], vendor="Google Inc.")

# تعامل با سایت
driver.quit()

نکات امنیتی و عملی:

  • برای پراکسی‌های احراز‌شده، اعتبارنامه را از طریق URL یا ابزارهایی مثل seleniumwire مدیریت کنید؛ رمزها را در متغیر محیطی نگهداری کنید، نه در کد.
  • پراکسی‌های رایگان معمولاً ناپایدار و کند هستند؛ از سرویس‌های قابل اتکاء برای عملیات در مقیاس استفاده کنید.
  • چک کنید که پراکسی انتخابی ترافیک HTTPS را پشتیبانی کند و latency آن مناسب باشد.

عملکرد، خطاها و پایداری

مواردی که در عملیات بلندمدت باید مدنظر قرار دهید:

  • مانیتورینگ و لاگینگ: خطاها، زمان پاسخ و نرخ بلوک شدن را لاگ کنید تا الگوهای مشکل‌زا را بیابید.
  • Retry و Backoff: هنگام مواجهه با خطاهای موقت یا 429، از الگوریتم‌های backoff تدریجی استفاده کنید.
  • همزمانی: برای افزایش throughput از صف‌بندی و worker pool استفاده کنید اما همزمانی زیاد می‌تواند منجر به تشدید شناسایی شود.
  • مصرف منابع: WebDriver حافظه و CPU بالایی مصرف می‌کند؛ در مقیاس از headless با pool کردن جلسات یا از روش‌های بدون مرورگر (API/requests) در جاهایی که ممکن است استفاده کنید.
  • تست عملکرد: قبل از تولید، با نمونه‌های کوچک تست کنید تا میزان تشخیص و مصرف منابع را ارزیابی کنید.

جایگزین‌ها و ترکیب ابزارها

گزینه‌های دیگری که معمولا در ترکیب یا به‌عنوان جایگزین استفاده می‌شوند:

  • Selenium Undetected Chrome Driver: نسخهٔ تغییر یافتهٔ ChromeDriver که تلاش می‌کند خودِ درایور را کمتر قابل تشخیص کند. در برخی سناریوها ساده‌تر از ترکیب چند ابزار عمل می‌کند.
  • پراکسی‌های مدیریت‌شده (مثلاً سرویس‌های پروکسی): برای دسترسی پایدار و pool پراکسی‌های چرخشی مفیدند؛ این سرویس‌ها را می‌توان در کنار Selenium Stealth به کار برد.
  • سرویس‌هایی مثل seleniumwire یا selenium-requests برای مواردی که نیاز دارید ترافیک HTTP را دستکاری یا لاگ کنید.

نکات حقوقی و اخلاقی

قبل از اسکریپ کردن هر وب‌سایتی قوانین استفاده، فایل robots.txt و حقوق مالکیت محتوایی را بررسی کنید. مسئولیت قانونی و اخلاقی استفاده از این تکنیک‌ها به عهدهٔ شماست.

جمع‌بندی

ترکیب Selenium Stealth با پراکسی‌های مناسب، چرخش User‑Agent و پیکربندی معقول WebDriver می‌تواند احتمال شناسایی را به‌طور چشمگیری کاهش دهد. اما هیچ راه‌حلی کامل و تضمینی برای جلوگیری از تشخیص وجود ندارد؛ بهترین نتیجه با آزمایش، پایش و ترکیب تکنیک‌ها حاصل می‌شود. همیشه از مدیریت اعتبارنامه‌ها، لاگینگ و رعایت قوانین هدف غافل نشوید.

آسان اسکریپ را در گوگل به‌عنوان منبع ترجیحی انتخاب کن

مقاله‌های جدید ما زودتر و پررنگ‌تر در نتایج گوگل و Discover برایت نمایش داده می‌شود. افزودن از تنظیمات گوگل

مطالب مرتبط

مقاله‌های مرتبط