تعامل پیشرفته وب‌سایت و APIها

Apr 14, 2025

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

1. وب‌سایت‌های مبتنی بر API (فصل 7)

بسیاری از وب‌سایت‌های مدرن تمام داده‌هایشان را با HTML اولیه بارگذاری نمی‌کنند. در عوض، از جاوااسکریپت برای دریافت داده‌ها از APIهای بک‌اند (معمولاً با استفاده از fetch یا XMLHttpRequest) پس از بارگذاری صفحه استفاده می‌کنند. اسکرپینگ کارآمد این سایت‌ها اغلب به معنای دور زدن UI و تعامل مستقیم با این APIها است.

مفاهیم کلیدی:

  • شناسایی درخواست‌های API: از ابزارهای توسعه‌دهنده مرورگر (تب Network) برای شناسایی درخواست‌ها (اغلب XHR/Fetch) که داده برمی‌گردانند، معمولاً در فرمت JSON، استفاده کنید.
  • اسکرپینگ مستقیم APIها: هنگامی که یک نقطه پایانی API پیدا کردید، اغلب می‌توانید مستقیماً با استفاده از کتابخانه‌هایی مانند axios یا fetch داخلی در Node.js درخواست‌هایی به آن ارسال کنید. این معمولاً سریع‌تر و قابل اعتمادتر از اتوماسیون مرورگر است.
  • مدیریت صفحه‌بندی و پارامترها: APIها اغلب از پارامترهای query برای صفحه‌بندی (page، limit)، فیلتر کردن، یا مرتب‌سازی استفاده می‌کنند. شما باید این‌ها را در اسکریپت اسکرپینگ خود درک و تکرار کنید.

چالش (فصل 7): شما یک سایت تجاری را اسکرپ می‌کنید که فهرست محصولات به صورت پویا از یک API RESTful بارگذاری می‌شود. وظیفه شما دریافت همه محصولات از طریق تعامل با این API، با مدیریت صحیح صفحه‌بندی است.

راه‌حل مرجع که اسکرپینگ مستقیم API را نشان می‌دهد در دایرکتوری _solved/chapter7/ پیدا کنید.

2. فرم‌ها و احراز هویت (فصل 8)

اغلب، داده‌های باارزش پشت صفحه ورود یا نیاز به ارسال فرم‌های پیچیده قرار دارند. برای مثال، پلتفرم رزرو سفر در فصل 8 برای دسترسی به عملکرد اصلی نیاز به احراز هویت دارد. برای جستجوی مقاصد (با استفاده از تکمیل خودکار)، انتخاب تاریخ‌های سفر (تعامل با ویجت تقویم)، اعمال فیلترها، و مشاهده نتایج (شامل لیست‌های ممتاز فقط برای کاربران وارد شده)، ابتدا باید فرآیند ورود را خودکار کنید. این شامل مدیریت فرم‌ها، مدیریت کوکی‌های جلسه (شامل انقضاهای احتمالی که نیاز به احراز هویت مجدد و حفاظت CSRF دارند)، و در نهایت کنترل مرورگر برای انجام اقداماتی مانند یک کاربر واقعی است.

مفاهیم کلیدی:

  • خودکارسازی ارسال فرم‌ها: از ابزارهایی مانند Playwright یا Puppeteer برای پر کردن فیلدهای ورودی، انتخاب گزینه‌ها، و کلیک روی دکمه‌ها برای ارسال فرم‌ها (مثل فرم‌های ورود، نوار جستجو، کنترل‌های فیلتر) استفاده کنید.
  • مدیریت احراز هویت:
    • مبتنی بر کوکی: یک بار وارد شوید، و زمینه مرورگر (مدیریت شده توسط Playwright/Puppeteer) اغلب کوکی‌های جلسه را برای درخواست‌های بعدی به طور خودکار مدیریت می‌کند.
    • مبتنی بر توکن (مثل JWT): وارد شوید، توکن را استخراج کنید (اغلب از local storage یا پاسخ API)، و آن را در هدرها (مثل Authorization: Bearer <token>) برای درخواست‌های API بعدی قرار دهید.
  • مدیریت جلسات: حالت وارد شده را در صفحات یا اقدامات مختلف در اسکرپر خود حفظ کنید.
  • دسترسی به محتوای محافظت شده: پس از احراز هویت، می‌توانید به صفحات یا داده‌هایی که فقط برای کاربران وارد شده در دسترس است، بروید و آن‌ها را اسکرپ کنید.

چالش (فصل 8): این فصل شامل فرآیند چندمرحله‌ای است: ورود به سایت، رفتن به صفحه جستجو، پر کردن فرم پیچیده چندقسمتی با فیلترها، استخراج نتایج (شامل محتوای ممتاز فقط زمانی که وارد شده‌اید قابل مشاهده است)، و حتی ذخیره جستجو در داشبورد کاربری.

3. کار با APIهای GraphQL (فصل 9)

GraphQL جایگزینی محبوب و روبه‌رشد برای APIهای REST است. به کلاینت‌ها اجازه می‌دهد دقیقاً داده‌هایی که نیاز دارند را با استفاده از زبان پرس‌وجوی مشخص درخواست کنند.

مفاهیم کلیدی:

  • نقطه پایانی GraphQL: معمولاً، یک نقطه پایانی واحد وجود دارد (مثل /graphql یا /api/graphql).
  • زبان پرس‌وجو: باید پرس‌وجوهای GraphQL بسازید تا فیلدها و روابطی که می‌خواهید بازیابی کنید را مشخص کنید. ابزارهایی مانند Insomnia یا Postman می‌توانند در کاوش طرح‌واره‌های GraphQL کمک کنند.
  • جهش‌ها: برای اقداماتی که داده‌ها را تغییر می‌دهند (مانند ورود یا ارسال داده) استفاده می‌شود، شبیه به POST/PUT/DELETE در REST.
  • احراز هویت: اغلب شامل ارسال هدر Authorization است، شبیه به APIهای REST، معمولاً پس از جهش ورود بدست می‌آید.

چالش (فصل 9): شما با سایتی که توسط یک API GraphQL پشتیبانی می‌شود تعامل خواهید کرد. وظیفه احراز هویت از طریق جهش ورود و سپس دریافت داده‌های ساختاریافته مشخص در مورد چالش‌ها و پروفایل‌های کاربری با استفاده از پرس‌وجوهای GraphQL است.

تسلط بر این تکنیک‌های پیشرفته به طور قابل توجهی دامنه وب‌سایت‌ها و داده‌هایی که می‌توانید به طور مؤثر اسکرپ کنید را گسترش می‌دهد. به یاد داشته باشید که همیشه مسئولانه اسکرپ کنید و شرایط خدمات وب‌سایت‌ها را احترام بگذارید.

اسکرپینگ خوشحال!