خانه/مقالات/راهنمای سریع Playwright Extra برای وب اسکریپ
پروکسی و چرخش IP
Playwright
مدیریت سشن و کوکی
برگشت به صفحه مقاله ها
راهنمای سریع Playwright Extra برای وب اسکریپ

راهنمای سریع Playwright Extra برای وب اسکریپ

این مقاله یک راهنمای فنی و عملی برای استفاده از Playwright Extra در وب اسکریپینگ است؛ نصب و نمونه‌های کد، پلاگین‌های کلیدی (stealth، anonymize-ua، recaptcha)، استراتژی‌های پایدارسازی مانند پراکسی و مدیریت session و نکات پیشرفته مانند TypeScript و چند نمونهٔ مستقل پوشش داده شده‌اند.
امیر حسین حسینیان
امیر حسین حسینیان
1404-10-12

مقدمه

اگر هدف شما انجام وب اسکریپینگ پایدار و قابل اتکا است، Playwright Extra ابزاری ارزشمند است که مجموعه‌ای از پلاگین‌ها را برای فرار از شناسایی، بهبود حریم خصوصی و تولید رفتارهای انسانی‌تر فراهم می‌کند. در این راهنما به زبان ساده و فنی به شما نشان می‌دهم چگونه آن را نصب کنید، پلاگین‌های کلیدی را به کار بگیرید، و نکات عملی برای مقاوم‌سازی اسکریپ‌ها را پیاده‌سازی کنید. پس از خواندن این مقاله، شما قادر خواهید بود یک اسکریپ پایه بسازید، پلاگین‌های stealth و anonymize-ua را اضافه کنید، با کپچاها روبه‌رو شوید و الگوهای پیشرفته مثل چند نمونه Playwright با تنظیمات متفاوت را پیاده‌سازی کنید.

Playwright Extra چیست؟

Playwright Extra یک لایهٔ افزونه‌ای (wrapper) برای Playwright است که به شما امکان می‌دهد پلاگین‌هایی را وارد کنید تا قابلیت‌های پایهٔ Playwright مثل navigation، تعامل با صفحه و گرفتن screenshot را با تکنیک‌های فرار از شناسایی، تغییر user-agent و حل کپچا ترکیب کنید. این پروژه از ایدهٔ Puppeteer Extra الهام گرفته و بسیاری از پلاگین‌های ساخته‌شده برای Puppeteer قابل استفاده یا تطبیق در این فریم‌ورک هستند.

مزایا و معایب

  • مزایا:
    • امکان اضافه‌کردن evasionها و رفتارهای انسانی بدون بازنویسی کامل کد.
    • ماژولار بودن: انتخاب پلاگین بر اساس نیاز (کپچا، UA، stealth و ...).
    • پشتیبانی جامعه و امکان استفاده از پلاگین‌های Puppeteer در بسیاری از موارد.
  • معایب:
    • پیچیدگی و اورهد: اضافه‌کردن پلاگین‌های متعدد می‌تواند کد را پیچیده کند.
    • ریسک ناسازگاری پلاگین‌ها یا نگهداری نامنظم پلاگین‌های جامعه.
    • منحنی یادگیری برای کاربرانی که با Playwright یا اکوسیستم Node آشنایی کمی دارند.

نصب و راه‌اندازی

برای استفاده از Playwright Extra در پروژهٔ Node.js مراحل عمومی به‌صورت زیر است. توجه: اگر شما توسعه‌دهندهٔ پایتون هستید و ترجیح می‌دهید با Playwright Python کار کنید، بسیاری از مفاهیم (مثل چرخش UA، پراکسی و مدیریت session) قابل‌انتقال‌اند اما پلاگین‌های ذکرشده معمولاً مخصوص اکوسیستم Node هستند.

  1. نصب پایه‌ای با npm:
npm install playwright playwright-extra

این دستور Playwright و wrapper پایه را نصب می‌کند. برای استفاده از chromium به‌صورت جداگانه:

npm install playwright-chromium

نکتهٔ امنیتی: بسته‌ها را در محیط‌های ایزوله مثل npm audit چک کنید و در پروژه‌های تولیدی از مدیریت نسخهٔ مشخص (lockfile) استفاده کنید.

مثال ساده: Playwright پایه (بدون Extra)

در این مثال یک مرورگر باز می‌کنیم، به صفحه می‌رویم و اسکرین‌شات می‌گیریم. این مثال به شما ورودی‌ها و خروجی‌های اصلی را نشان می‌دهد.

// ورودی: هیچ آرگومان خارجی؛ خروجی: فایل screenshot.png
const playwright = require('playwright');

(async () => {
  // launch یک مرورگر؛ گزینه headless تعیین می‌کند که UI نمایش داده شود یا خیر
  const browser = await playwright.chromium.launch({ headless: false });
  const page = await browser.newPage();

  // goto صفحهٔ هدف را بارگذاری می‌کند
  await page.goto('https://quotes.toscrape.com/');

  // screenshot تصویر صفحه را ذخیره می‌کند
  await page.screenshot({ path: 'screenshot.png' });

  // بستن مرورگر
  await browser.close();
})();

آنچه در این کد اتفاق می‌افتد (بخش‌به‌بخش):

  • require('playwright'): بارگذاری کتابخانه Playwright.
  • launch: کرومیم را اجرا می‌کند؛ در حالت توسعه headless=false مفید است.
  • page.goto: درخواست GET برای URL مورد نظر و رندر صفحه در context را انجام می‌دهد.
  • page.screenshot: خروجی تصویری برای بازرسی محتوای صفحه تولید می‌کند.

اضافه کردن Playwright Extra و Stealth

حالا همان سناریو را با Playwright Extra و پلاگین Stealth اجرا می‌کنیم تا رفتار مرورگر مصنوعی شبیه‌تر به انسان شود و ریسک بلاک‌شدن کمتر شود.

npm install puppeteer-extra-plugin-stealth
// ورودی: نصب شده بودن پلاگین؛ خروجی: همان screenshot با evasions
const playwright = require('playwright-extra');
const stealthPlugin = require('puppeteer-extra-plugin-stealth');

// ثبت پلاگین روی chromium که توسط playwright-extra فراهم می‌شود
playwright.chromium.use(stealthPlugin());

(async () => {
  const browser = await playwright.chromium.launch({ headless: false, args: ['--no-sandbox'] });
  const page = await browser.newPage();
  await page.goto('https://quotes.toscrape.com/');
  await page.screenshot({ path: 'screenshot-stealth.png' });
  await browser.close();
})();

توضیح عملکرد و نقش هر بخش:

  • playwright.chromium.use(stealthPlugin()): ماژول‌های evasion را به lifecycle مرورگر اضافه می‌کند (مانند مخفی کردن ویژگی‌های قابل تشخیص WebDriver، اصلاح navigator و غیره).
  • این روش به تنهایی تضمین جلوگیری از بلاک نیست؛ ترکیب با پراکسی، چرخش UA و تاخیرهای انسانی ضروری است.

پلاگین‌های کلیدی

در ادامه سه پلاگینی که اغلب در اسکریپینگ کاربردی‌اند را بررسی می‌کنیم: stealth، anonymize-ua و recaptcha.

puppeteer-extra-plugin-stealth

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

محدودیت: سایت‌های پیشرفته‌تر ممکن است هنوز با روش‌های رفتارشناسی (behavioral analysis) یا بررسی شبکه شما را شناسایی کنند؛ بنابراین این پلاگین بخشی از استراتژی است نه کل راهکار.

puppeteer-extra-plugin-anonymize-ua

این پلاگین headerهای user-agent را اصلاح می‌کند تا UA مطابق دستگاه و مرورگر معقول تنظیم شود. مثال UA نمونه در متن اصلی:

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/... Safari/..."
npm install puppeteer-extra-plugin-anonymize-ua
const { chromium } = require('playwright-extra');
const anonymizeUaPlugin = require('puppeteer-extra-plugin-anonymize-ua');
chromium.use(anonymizeUaPlugin());

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://quotes.toscrape.com/');
  await page.screenshot({ path: 'screenshot-anonua.png' });
  await browser.close();
})();

نکات عملی:

  • همیشه UA را با سایر اجزای fingerprint همخوان کنید (screen size، timezone، زبان).
  • در محیط‌های تولیدی از فهرست UAهای واقعی و معقول استفاده کنید و آنها را دوره‌ای بچرخانید.

puppeteer-extra-plugin-recaptcha

کپچاها (reCAPTCHA، hCaptcha و ...) یکی از موانع اصلی اسکریپینگ هستند. این پلاگین به شما اجازه می‌دهد از سرویس‌های حل کپچا (مثلاً 2Captcha) استفاده کنید تا چالش‌ها را حل کنید.

npm install puppeteer-extra-plugin-recaptcha
const { chromium } = require('playwright-extra');
const RecaptchaPlugin = require('puppeteer-extra-plugin-recaptcha');

chromium.use(RecaptchaPlugin({
  provider: { id: '2captcha', token: 'YOUR_2CAPTCHA_API_KEY' }, // توکن را در env نگهدارید
  visualFeedback: true
}));

// تابع ورود که کپچاها را حل می‌کند
const logIn = async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto('https://example-login-page/');

  // پر کردن فرم ورودی: ورودی‌ها email و password
  await page.waitForSelector('#email');
  await page.type('#email', 'you@example.com', { delay: 100 });
  await page.waitForSelector('#password');
  await page.type('#password', 'your-password');

  // حل خودکار reCAPTCHA در صورت وجود
  await page.solveRecaptchas();

  // ارسال فرم
  await Promise.all([
    page.waitForNavigation(),
    page.click('[type="submit"]')
  ]);

  await browser.close();
};

logIn();

هشدار امنیتی: کلیدهای API را در متغیرهای محیطی یا vault نگهداری کنید؛ هرگز آنها را در کد منبع سِری نکنید.

استراتژی‌های عملی برای اسکریپ کردن پایدار

ترکیب چند تکنیک عملی به شما کمک می‌کند اسکریپ مقاوم‌تری بنویسید:

  • پراکسی‌ها: استفاده از پروکسی‌های چرخشی یا پراکسی استخر برای تفکیک IP و کاهش نرخ بلاک. در صورت امکان از پراکسی‌های با کیفیت (residential یا datacenter مناسب هدف) استفاده کنید.
  • چرخش UA و تنظیمات محیطی: UA، timezone، زبان مرورگر و اندازهٔ صفحه را هماهنگ کنید تا fingerprint طبیعی‌تر شود.
  • تاخیر و رفتار انسانی: از تاخیرهای متغیر بین کلیک‌ها و تایپ‌ها استفاده کنید و عملیات را با page.waitForSelector و بررسی المان‌ها هماهنگ کنید.
  • Retry و مدیریت خطا: شبکه و رندر صفحات ممکن است نامطمئن باشند؛ از استراتژی retry با backoff و ثبت لاگ برای خطاها استفاده کنید.
  • Session و کوکی‌ها: reuse کردن contextها یا ذخیره/بارگذاری کوکی‌ها کمک می‌کند تا نیاز به لاگین مکرر کاهش یابد و رفتار طبیعی‌تری نمایش داده شود.
  • محدودسازی همزمانی: افزایش بیش از حد concurrency ممکن است باعث اعلان آنالیتیکس سایت شود؛ نرخ را کنترل کنید و از صف‌بندی (جُب Scheduling) استفاده کنید.

ادغام‌های پیشرفته

دو مسیر پیشرفته که در منابع آمده است: استفاده از TypeScript و ساختن چندین instance از Playwright با پلاگین‌های متفاوت.

TypeScript با Playwright Extra

TypeScript به‌خاطر تایپ‌ها و قابلیت تکمیل کد، توسعهٔ اسکریپ‌های پیچیده را ساده‌تر و قابل نگهداری‌تر می‌کند. مراحل اولیه:

npm install typescript
npx tsc --init
// نمونهٔ import در TypeScript
import { chromium } from 'playwright-extra';
import stealthPlugin from 'playwright-extra-plugin-stealth';

chromium.use(stealthPlugin());

(async () => {
  const browser = await chromium.launch();
  // ...
})();

نکات: پیکربندی tsconfig را برای target و module مناسب تنظیم کنید و از ابزارهای lint و pre-commit برای یکپارچگی کد بهره ببرید.

چند نمونه Playwright با پلاگین‌های مختلف

برای اسکریپینگ گسترده، ممکن است بخواهید چند محیط مجزا داشته باشید: یکی برای صفحات حساس که Stealth فعال است و دیگری برای صفحات با کپچا که Recaptcha فعال دارد. با addExtra() می‌توانید instanceهای مجزا ایجاد کنید:

const { addExtra } = require('playwright-extra');
const { chromium: vanillaChromium } = require('playwright');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const RecaptchaPlugin = require('puppeteer-extra-plugin-recaptcha');

(async () => {
  // یک chromium که Stealth دارد
  const stealthChromium = addExtra(vanillaChromium);
  stealthChromium.use(StealthPlugin());

  // یک chromium که Recaptcha دارد
  const recaptchaChromium = addExtra(vanillaChromium);
  recaptchaChromium.use(RecaptchaPlugin({ /* config */ }));

  // اکنون هر کدام را جداگانه launch کنید و برای مقاصد مختلف استفاده کنید
})();

مزیت این الگو تفکیک concerns و تست جداگانه برای هر نوع هدف است.

عملکرد و مانیتورینگ

برای اسکریپ‌های تولیدی به این موارد توجه کنید:

  • لاگ‌گیری ساخت‌یافته و metricها (زمان بارگذاری صفحه، نرخ خطا، تعداد retries).
  • مانیتورینگ سلامت پراکسی‌ها و نرخ خطا برای تغییر خودکار استراتژی‌ها.
  • تست دوره‌ای پلاگین‌ها پس از آپدیت کتابخانه‌ها برای بررسی ناسازگاری‌ها.

جمع‌بندی

Playwright Extra یک ابزار قدرتمند برای بهبود موفقیت عملیات وب اسکریپینگ است، مخصوصاً وقتی با پلاگین‌هایی مانند stealth، anonymize-ua و recaptcha ترکیب شود. با این حال، هیچ کدام از این پلاگین‌ها جایگزین یک استراتژی کامل (پراکسی‌ مناسب، مدیریت session، مدیریت خطا و مانیتورینگ) نیستند. پیشنهاد عملی: با یک اسکریپ ساده شروع کنید، سپس تدریجاً پلاگین‌ها و پراکسی‌ها را اضافه کنید، همهٔ کلیدهای API را به صورت امن ذخیره کنید و تست‌های پایداری و نرخ موفقیت را همیشه در چرخهٔ توسعه داشته باشید.

مقاله‌های مرتبط
اسکرپینگ با Selenium و Playwright
1404-11-20
اسکریپ با Playwright: گرفتن اسکرین‌شات
این راهنمای عملی نشان می‌دهد چگونه با Playwright انواع اسکرین‌شات (صفحه کامل، ناحیه‌ای، المنتی، سفارشی با کیفیت) بگیریم، خروجی را به بافر منتقل کنیم، PDF بسازیم و خطاهای رایج را رفع کنیم. مثال‌های کد محور، نکات بهینه‌سازی و الگوهای retry/pattern برای پروژه‌های وب اسکریپینگ ارائه شده‌اند.
اسکرپینگ با Selenium و Playwright
1404-11-18
اسکریپ فرم‌ها با Playwright برای توسعه‌دهنده‌های پایتون
این راهنمای عملی به توسعه‌دهنده‌های پایتون نشان می‌دهد چگونه با Playwright فرم‌های وب را برای اسکریپینگ و تست اتوماتیک کنند؛ شامل انتخابگرها، نمونه‌کدهای پایتون برای انواع ورودی‌ها، مدیریت پاسخ‌ها، روش‌های حل کپچا و نکات رفع اشکال و بهترین‌شیوه‌ها است.
اسکرپینگ با Selenium و Playwright
1404-11-17
مدیریت کوکی‌ها با Playwright
این مقاله یک راهنمای عملی برای مدیریت کوکی‌ها با Playwright در وب اسکریپینگ ارائه می‌دهد: گرفتن، فیلتر، ذخیره/بارگذاری، حذف و نکات تولیدی. مثال‌های پایتون، بهترین شیوه‌ها و روش‌های عیب‌یابی به شما کمک می‌کنند کوکی‌ها را امن و پایدار در خودکارسازی‌ها مدیریت کنید.