FA-TOOLS — Header Component

کدهای آماده ورود خودکار به سایت با Selenium

سلام رفیق برنامه‌نویس! تا حالا شده از وارد کردن مداوم اطلاعات ورودت به سایت‌ها خسته بشی؟ یا اینکه بخوای یه فرآیند تست رو خودکار کنی و ببینی چه بلایی سر دکمه لاگین میاد؟ اگه آره، پس این مقاله دقیقاً برای خودته. قراره با هم بریم سراغ غول اتوماسیون وب، یعنی Selenium، و یاد بگیریم چطور با چند خط کد ساده پایتون، ورود خودکار به هر سایتی رو انجام بدیم. آماده‌ای برای صرفه‌جویی در وقت و انرژی؟ اگه دنبال کدهای آماده و اسنیپت‌های خفن برای پروژه‌های پایتون یا هر زبان دیگه‌ای هستی، همین الان یه سر به بخش اسنیپت‌های پایتون ما بزن؛ کلی کد ناب اونجا منتظرته! برای مشاوره یا کمک بیشتر هم می‌تونی با شماره 09202232789 در تماس باشی.

🛣️ نقشه راه: ورود خودکار با Selenium در یک نگاه

کدهای آماده ورود خودکار به سایت با Selenium — تصویر 1
╔═════════════════════════════════════════════════════════════════════════════╗
║ هدف: ورود خودکار به سایت با پایتون و Selenium                               ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ قدم اول: نصب و راه‌اندازی ابزارها                                              ║
║   • نصب پایتون و pip                                                         ║
║   • نصب Selenium (`pip install selenium`)                                    ║
║   • دانلود WebDriver مناسب مرورگر (Chrome, Firefox, Edge)                   ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ قدم دوم: آشنایی با Locators                                                   ║
║   • ID, Name, Class Name, Tag Name, Link Text, Partial Link Text             ║
║   • XPath و CSS Selector (قدرتمندترین‌ها)                                     ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ قدم سوم: نوشتن کد ورود خودکار                                                ║
║   • راه‌اندازی WebDriver                                                    ║
║   • باز کردن صفحه ورود (`driver.get(url)`)                                  ║
║   • پیدا کردن عناصر (یوزرنیم، پسورد، دکمه لاگین)                             ║
║   • ارسال اطلاعات (`send_keys()`)                                           ║
║   • کلیک کردن (`click()`)                                                   ║
║   • مدیریت زمان‌بندی (Implicit/Explicit Waits)                               ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ قدم چهارم: راهنمای عیب‌یابی و نکات حرفه‌ای                                      ║
║   • خطاهای رایج (`NoSuchElementException`, `StaleElementReferenceException`)║
║   • استفاده از Headless Mode                                                 ║
║   • مدیریت CAPTCHA و 2FA (چالش‌ها و راهکارها)                                 ║
╚═════════════════════════════════════════════════════════════════════════════╝
    

اینفوگرافیک بالا یک دید کلی از مسیر پیش رو بهت می‌ده تا بدونی دقیقاً قراره چیکار کنیم.

Selenium چیه و چرا برای ورود خودکار عالیه؟

کدهای آماده ورود خودکار به سایت با Selenium — تصویر 2

Selenium یه مجموعه ابزاره که برای اتوماسیون مرورگرها توسعه داده شده. این یعنی چی؟ یعنی می‌تونی به جای اینکه خودت با دست کلیک کنی، تایپ کنی یا توی سایت‌ها بگردی، به Selenium بگی که این کارها رو برات انجام بده. فکر کن یه ربات داری که دقیقاً همون کارهایی رو می‌کنه که تو روی مرورگرت انجام می‌دی، با این تفاوت که سرعتش بالاتره و خسته هم نمیشه. از تست خودکار نرم‌افزار گرفته تا جمع‌آوری اطلاعات (Web Scraping)، Selenium یه انتخاب فوق‌العاده‌ست.

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

راه‌اندازی Selenium: اولین قدم برای اتوماسیون

کدهای آماده ورود خودکار به سایت با Selenium — تصویر 3

خب، بریم سراغ عملیات! قبل از اینکه بتونیم کدی بزنیم، باید Selenium رو توی سیستم‌مون راه‌اندازی کنیم. نگران نباش، کار پیچیده‌ای نیست.

1. نصب پایتون و PIP

اگه هنوز پایتون رو نصب نکردی، باید اول اونو از سایت رسمیش دانلود و نصب کنی (نسخه 3.x رو پیشنهاد می‌کنم). PIP هم ابزار مدیریت پکیج پایتونه که معمولاً همراه پایتون نصب میشه.

2. نصب کتابخانه Selenium

بعد از اینکه پایتون آماده شد، ترمینال یا Command Prompt رو باز کن و دستور زیر رو بزن:

pip install selenium

این دستور، Selenium رو روی سیستمت نصب می‌کنه.

3. دانلود WebDriver مناسب مرورگرت

Selenium برای اینکه بتونه با مرورگرت صحبت کنه، به یه “راننده” یا WebDriver نیاز داره. هر مرورگر WebDriver مخصوص به خودشو داره. مثلاً:

بعد از دانلود، فایل اجرایی WebDriver (مثلاً `chromedriver.exe`) رو توی یه مسیری که پایتون بتونه پیداش کنه بذار. بهترین کار اینه که بذاریش تو همون پوشه‌ای که اسکریپت پایتونت هست، یا مسیرش رو به متغیر PATH سیستم اضافه کنی.

پیدا کردن عناصر وب (Locators): چشم و گوش Selenium

برای اینکه Selenium بدونه کجا باید یوزرنیم رو تایپ کنه یا کدوم دکمه رو بزنه، باید بهش بگیم که هر عنصر توی صفحه وب کجاست. به این کار می‌گن “پیدا کردن عناصر” یا “Locating Elements”. این قسمت از کار، خیلی مهمه و اگه درست انجامش ندی، اسکریپتت دائم خطا میده.

برای این کار، Selenium روش‌های مختلفی داره که بهشون “Locators” میگیم. با راست کلیک روی هر عنصر در مرورگر و انتخاب “Inspect” یا “فحص عنصر” می‌تونی اطلاعات لازم رو ببینی.

انواع Locatorها:

جدول مقایسه Locatorهای پرکاربرد

Locator توضیحات و مزایا
ID سریع‌ترین و مطمئن‌ترین. برای عناصر با ID یکتا.
Name خوب برای فرم‌ها. بر اساس ویژگی `name`.
CSS Selector قدرتمند و انعطاف‌پذیر. سینتکس شبیه CSS. مناسب برای انتخاب‌های پیچیده.
XPath بسیار قدرتمند. می‌تواند هر عنصر را پیدا کند، حتی بر اساس متن یا روابط.

انتخاب Locator مناسب، کلید موفقیت اسکریپت اتوماسیون شماست.

نوشتن کدهای آماده ورود خودکار: قدم به قدم

حالا که با ابزارها و مفاهیم اولیه آشنا شدی، وقتشه اولین اسکریپت ورود خودکار رو بنویسیم. من از کروم استفاده می‌کنم، اما برای فایرفاکس یا اج هم تقریباً همین رونده.

ساختار کلی کد:


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 1. مسیر WebDriver رو مشخص کن (اگه تو PATH سیستم نیست)
# driver_path = 'مسیر/فایل/chromedriver.exe'
# driver = webdriver.Chrome(service=webdriver.chrome.service.Service(driver_path))

# یا اگه WebDriver تو PATH سیستمه یا کنار اسکریپتت هست:
driver = webdriver.Chrome() 

# 2. آدرس صفحه ورود
login_url = "https://example.com/login" # اینو با آدرس سایت خودت عوض کن!

# 3. باز کردن صفحه
driver.get(login_url)

# 4. صبر کردن هوشمندانه برای بارگذاری عناصر (Explicit Wait)
# اینجوری کدت پایدارتر میشه
wait = WebDriverWait(driver, 10) # تا 10 ثانیه صبر کن

try:
    # 5. پیدا کردن فیلد یوزرنیم و وارد کردنش
    username_field = wait.until(EC.presence_of_element_located((By.ID, "username"))) # یا By.NAME, By.XPATH, etc.
    username_field.send_keys("YourUsername") # یوزرنیم واقعی خودتو بذار

    # 6. پیدا کردن فیلد پسورد و وارد کردنش
    password_field = wait.until(EC.presence_of_element_located((By.NAME, "password"))) # مثال: استفاده از NAME
    password_field.send_keys("YourStrongPassword") # پسورد واقعی خودتو بذار

    # 7. پیدا کردن و کلیک روی دکمه ورود
    login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))) # مثال: استفاده از CSS Selector
    login_button.click()

    # 8. صبر کردن برای ریدایرکت یا بارگذاری صفحه بعد از ورود
    # مثلاً می‌تونی صبر کنی تا URL تغییر کنه یا یه عنصر خاص توی صفحه بعد ظاهر بشه
    wait.until(EC.url_changes(login_url)) # صبر کن تا URL صفحه تغییر کنه

    print("ورود با موفقیت انجام شد!")
    print("URL فعلی:", driver.current_url)

    # 9. (اختیاری) گرفتن اسکرین‌شات بعد از ورود
    driver.save_screenshot("after_login.png")

except Exception as e:
    print(f"خطا در هنگام ورود: {e}")
    # (اختیاری) گرفتن اسکرین‌شات در صورت بروز خطا
    driver.save_screenshot("error_login.png")

finally:
    # 10. بستن مرورگر
    driver.quit()
    

توضیحات کد:

  • `from selenium import webdriver` و `By`: این خطوط کتابخانه‌های لازم رو وارد می‌کنن. `By` برای مشخص کردن نوع Locator استفاده میشه (مثل `By.ID`, `By.NAME`, `By.CSS_SELECTOR`).
  • `WebDriverWait` و `expected_conditions as EC`: اینا برای مدیریت زمان‌بندی و صبر کردن هوشمندانه هستن. به جای `time.sleep()` که فقط برای مدت زمان مشخصی صبر می‌کنه، `WebDriverWait` به Selenium میگه تا زمانی که یه شرط خاص برقرار نشده (مثلاً عنصر پیدا نشده)، صبر کن و بعد از اون ادامه بده. این باعث میشه کدت خیلی پایدارتر بشه.
  • `driver = webdriver.Chrome()`: این خط، مرورگر کروم رو باز می‌کنه. اگه WebDriver رو توی PATH سیستم قرار دادی، همین کافیه. در غیر این صورت، باید مسیر کامل فایل اجرایی WebDriver رو بهش بدی.
  • `driver.get(login_url)`: با این دستور، Selenium به آدرس URL مورد نظر می‌ره.
  • `wait.until(EC.presence_of_element_located((By.ID, “username”)))`: این خط یه مثال از نحوه پیدا کردن عنصر “یوزرنیم” با استفاده از ID و صبر کردن تا اون عنصر توی صفحه ظاهر بشه.
  • `.send_keys(“YourUsername”)`: بعد از پیدا کردن عنصر، با این متد می‌تونی متن مورد نظرت رو داخلش تایپ کنی.
  • `.click()`: برای کلیک کردن روی دکمه‌ها یا لینک‌ها استفاده میشه.
  • `driver.quit()`: در نهایت، این دستور مرورگر رو می‌بنده و منابع رو آزاد می‌کنه. همیشه یادت باشه که `driver.quit()` رو توی `finally` بذاری تا حتی اگه خطایی هم پیش اومد، مرورگر بسته بشه.

برای جزئیات بیشتر در مورد اسنیپت‌های CSS، می‌تونی به صفحه کدهای آماده CSS ما سر بزنی، یا اگه به دنبال کدهای جاوااسکریپت هستی، اینجا کدهای JS منتظرته.

نکات پیشرفته و سناریوهای خاص

گاهی اوقات ورود خودکار به همین سادگی‌ها هم نیست و سایت‌ها برای جلوگیری از ربات‌ها، تدابیر امنیتی خاصی می‌چینن. بیا یه نگاهی به چندتا از این سناریوها بندازیم.

مدیریت CAPTCHA و reCAPTCHA

CAPTCHAها (مثل “من ربات نیستم” یا حل پازل‌های تصویری) طوری طراحی شدن که تشخیص انسان از ربات رو سخت کنن. Selenium به خودی خود نمی‌تونه CAPTCHA رو حل کنه. برای این کار، معمولاً نیاز به راه‌حل‌های جانبی مثل سرویس‌های CAPTCHA solving (مثل 2Captcha یا Anti-Captcha) یا استفاده از الگوریتم‌های هوش مصنوعی برای تشخیص تصویر داری که البته خیلی پیچیده و پرهزینه‌ست. بهترین راهکار برای اتوماسیون با CAPTCHA، معمولاً اینه که از سایت‌های دارای CAPTCHA پرهیز کنی یا به صورت دستی اونو حل کنی.

احراز هویت دو مرحله‌ای (2FA/MFA)

اگه سایتی که می‌خوای واردش بشی، 2FA داره (مثلاً کد پیامک یا اپلیکیشن Google Authenticator)، کار اتوماسیون کمی سخت‌تر میشه. برای حل این مشکل، چندتا راه داری:

  • غیرفعال کردن 2FA (فقط برای تست): اگه دسترسی به تنظیمات داری و فقط برای تست داخلیه، می‌تونی 2FA رو موقتاً غیرفعال کنی.
  • استفاده از کد یکبار مصرف (Recovery Code): برخی سرویس‌ها کدهای یکبار مصرفی برای مواقع اضطراری میدن که میشه ازشون استفاده کرد.
  • اتوماسیون دریافت کد: اگه کد از طریق ایمیل یا SMS ارسال میشه، می‌تونی از ابزارهای اتوماسیون ایمیل/SMS برای خوندن کد و وارد کردنش استفاده کنی. (پیچیده است و ممکنه حریم خصوصی رو نقض کنه)

Headless Browsing

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


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

chrome_options = Options()
chrome_options.add_argument("--headless") # این خط برای فعال کردن حالت Headless
# chrome_options.add_argument("--window-size=1920,1080") # می‌تونی سایز پنجره رو هم مشخص کنی

driver = webdriver.Chrome(options=chrome_options)
# بقیه کدها مثل قبل...
driver.get("https://fa-tools.ir/") # یک لینک داخلی به صفحه اصلی
print("در حالت Headless وارد شد.")
driver.quit()
    

با استفاده از `options=chrome_options` موقع ساخت درایور، مرورگر در حالت بدون سر نمایش (Headless) اجرا می‌شود. برای کدهای HTML آماده هم می‌تونی یه نگاهی به اینجا بندازی.

عیب‌یابی سریع: مشکلات رایج و راه‌حل‌ها

طبیعیه که توی مسیر اتوماسیون با Selenium، به خطا بخوری. نگران نباش، اینا چندتا از رایج‌ترین مشکلات و نحوه حل کردنشون هستن:

1. `NoSuchElementException`

این خطا یعنی Selenium نتونسته عنصری رو که دنبالشی پیدا کنه.
علت:

  • Locator اشتباهه (ID، Name، XPath و…).
  • عنصر هنوز روی صفحه بارگذاری نشده.
  • صفحه تغییر کرده و Locator دیگه معتبر نیست.

راه‌حل:

  • Locatorت رو دوباره بررسی کن. از ابزارهای توسعه‌دهنده مرورگر (Inspect Element) برای پیدا کردن Locator صحیح استفاده کن.
  • از `WebDriverWait` و `expected_conditions` (مثل `EC.presence_of_element_located` یا `EC.visibility_of_element_located`) برای صبر کردن تا عنصر بارگذاری بشه استفاده کن.
  • برای وب‌سایت‌های داینامیک، `By.CSS_SELECTOR` و `By.XPATH` معمولاً پایدارترن.

2. `WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH`

این خطا وقتی پیش میاد که Selenium نتونه WebDriver رو پیدا کنه.
علت:

  • فایل WebDriver (مثلاً `chromedriver.exe`) در مسیری نیست که سیستم بتونه پیداش کنه.
  • نسخه WebDriver با نسخه مرورگرت همخونی نداره.

راه‌حل:

  • فایل WebDriver رو توی همون پوشه‌ای بذار که اسکریپت پایتونت هست.
  • مسیر کامل فایل WebDriver رو موقع ساخت درایور بهش بده: `webdriver.Chrome(service=webdriver.chrome.service.Service(‘مسیر/کامل/chromedriver’))`.
  • مطمئن شو که نسخه WebDriver دقیقاً با نسخه مرورگرت یکی باشه.

3. `StaleElementReferenceException`

این یکی یکم موزیه. یعنی عنصری رو که قبلاً پیدا کردی، بعد از یه تغییر توی DOM (مثلاً بارگذاری مجدد بخشی از صفحه)، دیگه معتبر نیست.
علت:

  • بعد از پیدا کردن عنصر، صفحه رفرش شده یا بخشی از DOM تغییر کرده.

راه‌حل:

  • عنصر رو درست قبل از اینکه بخوای باهاش کار کنی، دوباره پیدا کن (یعنی هر بار که می‌خوای از عنصر استفاده کنی، دوباره از `find_element` استفاده کن).
  • از `expected_conditions.staleness_of` و بعد `presence_of_element_located` برای اطمینان از به روز بودن عنصر استفاده کن.

4. صفحات پاپ‌آپ یا آلرت‌ها

اگه سایت یه پاپ‌آپ یا پنجره هشدار (Alert) نشون میده که اجازه نمیده ادامه بدی.
راه‌حل:

  • برای پاپ‌آپ‌های HTML (داخل DOM)، اونا رو با Locator پیدا کن و ببندشون (کلیک روی دکمه بستن).
  • برای آلرت‌های مرورگر (مثل `alert()`, `confirm()`, `prompt()`) از `driver.switch_to.alert` استفاده کن. می‌تونی اونا رو `accept()` (تایید) یا `dismiss()` (لغو) کنی.

پایان کار: خودکارسازی در دستان تو

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

در نهایت، برای هر سوال یا نیاز به کدهای بیشتر، می‌تونی به وب‌سایت ما سر بزنی یا با شماره 09202232789 با ما در تماس باشی. موفق باشی!


نکته مهم برای کپی در ویرایشگر بلوک (گوتنبرگ):

برای اینکه این محتوا در ویرایشگر بلوک وردپرس (گوتنبرگ) به بهترین شکل نمایش داده شود:

  • هدینگ‌ها (H1, H2, H3): متن‌های مشخص شده با `

    `, `

    `, `

    ` را به عنوان بلوک‌های Heading انتخاب کرده و تگ مناسب (H1، H2 یا H3) را از تنظیمات بلوک انتخاب کنید. استایل‌های `font-size`, `font-weight`, `color` جهت پیشنهاد طراحی هستند و می‌توانید آن‌ها را در CSS سایت خود تنظیم کنید یا از تنظیمات بلوک گوتنبرگ استفاده نمایید.
  • باکس اینفوگرافیک و کد: بلوک‌های `div` و `pre` با استایل‌های پس‌زمینه و border، به گونه‌ای طراحی شده‌اند که به راحتی می‌توانید آن‌ها را در بلوک “Custom HTML” یا “Code” قرار دهید. برای زیبایی بیشتر، می‌توانید آن‌ها را در بلوک “Group” یا “Columns” قرار داده و استایل‌های پیشنهادی (رنگ پس‌زمینه، border-radius، padding) را به بلوک اعمال کنید.
  • جدول: جدول موجود یک جدول HTML ساده است که می‌توانید آن را در بلوک “Table” گوتنبرگ قرار داده و استایل‌های دلخواه را به آن اعمال کنید.
  • رسپانسیو بودن: ساختار کلی مقاله با پاراگراف‌های کوتاه، لیست‌ها و جداول دو ستونه، به طور طبیعی برای نمایش در دستگاه‌های مختلف (موبایل، تبلت، لپ‌تاپ و تلویزیون) مناسب است. بلوک‌های کد و جداول برای نمایش بهتر در صفحات کوچک، ممکن است به اسکرول افقی نیاز داشته باشند که توسط `overflow-x: auto;` در استایل‌ها پیش‌بینی شده است.

با این راهنما، محتوای نهایی شما ظاهری حرفه‌ای و جذاب خواهد داشت.


Table of Contents

آخرین نوشته‌ها