

اگر هدف شما انجام وب اسکریپینگ پایدار و قابل اتکا است، Playwright Extra ابزاری ارزشمند است که مجموعهای از پلاگینها را برای فرار از شناسایی، بهبود حریم خصوصی و تولید رفتارهای انسانیتر فراهم میکند. در این راهنما به زبان ساده و فنی به شما نشان میدهم چگونه آن را نصب کنید، پلاگینهای کلیدی را به کار بگیرید، و نکات عملی برای مقاومسازی اسکریپها را پیادهسازی کنید. پس از خواندن این مقاله، شما قادر خواهید بود یک اسکریپ پایه بسازید، پلاگینهای stealth و anonymize-ua را اضافه کنید، با کپچاها روبهرو شوید و الگوهای پیشرفته مثل چند نمونه Playwright با تنظیمات متفاوت را پیادهسازی کنید.
Playwright Extra یک لایهٔ افزونهای (wrapper) برای Playwright است که به شما امکان میدهد پلاگینهایی را وارد کنید تا قابلیتهای پایهٔ Playwright مثل navigation، تعامل با صفحه و گرفتن screenshot را با تکنیکهای فرار از شناسایی، تغییر user-agent و حل کپچا ترکیب کنید. این پروژه از ایدهٔ Puppeteer Extra الهام گرفته و بسیاری از پلاگینهای ساختهشده برای Puppeteer قابل استفاده یا تطبیق در این فریمورک هستند.
برای استفاده از Playwright Extra در پروژهٔ Node.js مراحل عمومی بهصورت زیر است. توجه: اگر شما توسعهدهندهٔ پایتون هستید و ترجیح میدهید با Playwright Python کار کنید، بسیاری از مفاهیم (مثل چرخش UA، پراکسی و مدیریت session) قابلانتقالاند اما پلاگینهای ذکرشده معمولاً مخصوص اکوسیستم Node هستند.
npm install playwright playwright-extra
این دستور Playwright و wrapper پایه را نصب میکند. برای استفاده از chromium بهصورت جداگانه:
npm install playwright-chromium
نکتهٔ امنیتی: بستهها را در محیطهای ایزوله مثل npm audit چک کنید و در پروژههای تولیدی از مدیریت نسخهٔ مشخص (lockfile) استفاده کنید.
در این مثال یک مرورگر باز میکنیم، به صفحه میرویم و اسکرینشات میگیریم. این مثال به شما ورودیها و خروجیهای اصلی را نشان میدهد.
// ورودی: هیچ آرگومان خارجی؛ خروجی: فایل 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();
})();
آنچه در این کد اتفاق میافتد (بخشبهبخش):
حالا همان سناریو را با 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();
})();
توضیح عملکرد و نقش هر بخش:
در ادامه سه پلاگینی که اغلب در اسکریپینگ کاربردیاند را بررسی میکنیم: stealth، anonymize-ua و recaptcha.
هدف این پلاگین کاهش شاخصهای قابل تشخیص بودن مرورگر خودکار است. وقتی سایتها fingerprinting یا بررسیهای ساده انجام میدهند، این پلاگین میتواند بسیاری از شاخصها را اصلاح کند.
محدودیت: سایتهای پیشرفتهتر ممکن است هنوز با روشهای رفتارشناسی (behavioral analysis) یا بررسی شبکه شما را شناسایی کنند؛ بنابراین این پلاگین بخشی از استراتژی است نه کل راهکار.
این پلاگین 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();
})();
نکات عملی:
کپچاها (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 نگهداری کنید؛ هرگز آنها را در کد منبع سِری نکنید.
ترکیب چند تکنیک عملی به شما کمک میکند اسکریپ مقاومتری بنویسید:
دو مسیر پیشرفته که در منابع آمده است: استفاده از TypeScript و ساختن چندین instance از Playwright با پلاگینهای متفاوت.
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 برای یکپارچگی کد بهره ببرید.
برای اسکریپینگ گسترده، ممکن است بخواهید چند محیط مجزا داشته باشید: یکی برای صفحات حساس که 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 و تست جداگانه برای هر نوع هدف است.
برای اسکریپهای تولیدی به این موارد توجه کنید:
Playwright Extra یک ابزار قدرتمند برای بهبود موفقیت عملیات وب اسکریپینگ است، مخصوصاً وقتی با پلاگینهایی مانند stealth، anonymize-ua و recaptcha ترکیب شود. با این حال، هیچ کدام از این پلاگینها جایگزین یک استراتژی کامل (پراکسی مناسب، مدیریت session، مدیریت خطا و مانیتورینگ) نیستند. پیشنهاد عملی: با یک اسکریپ ساده شروع کنید، سپس تدریجاً پلاگینها و پراکسیها را اضافه کنید، همهٔ کلیدهای API را به صورت امن ذخیره کنید و تستهای پایداری و نرخ موفقیت را همیشه در چرخهٔ توسعه داشته باشید.


