نحوه تنظیم پروکسی دارای احراز هویت در Puppeteer (Node.js)
Updated:
ابزار Puppeteer مرورگرهای Chrome و Chromium را از طریق پروتکل DevTools (یا CDP) کنترل میکند و یک API بومی به نام await page.authenticate({ username, password }) را برای احراز هویت پروکسی HTTP 407 ارائه میدهد. ترکیب --proxy-server=http://ip:port با page.authenticate() به اسکریپتهای اسکرپینگ Node.js شما امکان میدهد ترافیک خود را بدون نیاز به هیچ افزونه مرورگر جانبی، از طریق پروکسیهای استاتیک VinaProxy هدایت کنند.
--proxy-server=http://ip:port + page.authenticate({ username, password })- 1 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
- 1 آیپی₫۴۰٬۰۰۰
- +5 آیپی₫۳۵٬۰۰۰
- +10 آیپی₫۲۵٬۰۰۰
- +20 آیپی₫۲۵٬۰۰۰
- +50 آیپی₫۲۵٬۰۰۰
- +100 آیپی₫۲۵٬۰۰۰
- +200 آیپی₫۲۵٬۰۰۰
- +500 آیپی₫۲۵٬۰۰۰
- +1000 آیپی₫۲۲٬۰۰۰
- +2000 آیپی₫۲۰٬۰۰۰
پیکربندی دو مرحلهای پروکسی در Puppeteer
هرگز user:pass@ را داخل آرگومان راهاندازی --proxy-server قرار ندهید. در عوض، هاست و پورت را هنگام اجرا ارسال کرده و روی نمونه Page احراز هویت کنید:
| مرحله | کد Puppeteer | علت اهمیت |
|---|---|---|
| 1. راهاندازی Chromium | puppeteer.launch({ args: ['--proxy-server=http://ip:port'] }) | سوکت شبکه Chromium را به سمت پروکسی VinaProxy شما هدایت میکند |
| 2. احراز هویت Page | await page.authenticate({ username, password }) | اطلاعات ورود CDP را برای چالشهای HTTP 407 ارسال میکند |
| 3. ناوبری و هدایت به آدرس | await page.goto(url, { waitUntil: 'domcontentloaded' }) | آدرس اینترنتی هدف را از طریق تونل احراز هویتشده بارگذاری میکند |
چرخش چندین پروکسی بین تبها با proxy-chain
- به یاد داشته باشید که محدوده کاری
page.authenticate()برای هر تبPageمجزاست؛ بنابراین آن را روی هر تب جدیدی که توسطbrowser.newPage()باز میشود فراخوانی کنید - برای استفاده از پروکسیهای مختلف در کانتکستهای ناشناس داخل یک فرایند Chromium، هر آدرس
http://user:pass@ip:portرا با پکیج npm به نامproxy-chain(متدanonymizeProxy()) کپسولهسازی کرده وproxyServerرا بهbrowser.createBrowserContext({ proxyServer })ارسال کنید - سازگار با
puppeteer-extraوpuppeteer-extra-plugin-stealth
گام به گام
- 1
ارسال --proxy-server=http://ip:port به puppeteer.launch()
مرورگر را با دستور
const browser = await puppeteer.launch({ args: ['--proxy-server=http://ip:port'] });اجرا کنید. - 2
فراخوانی await page.authenticate() در صفحه جدید
یک تب را با
const page = await browser.newPage();باز کرده وawait page.authenticate({ username: 'USER', password: 'PASS' });را فراخوانی کنید. - 3
تست آدرس IP خروجی
دستور
await page.goto('https://vinaproxy.com/api/my-ip');را اجرا کرده و JSON خروجی را بررسی کنید. - 4
بستن فرایندهای مرورگر
پس از پایان کار، دستور
await browser.close();را فراخوانی کنید.
پرسشهای متداول
چرا Puppeteer خطای `ERR_NO_SUPPORTED_PROXIES` را نمایش میدهد؟
این خطا زمانی رخ میدهد که user:pass@ را داخل --proxy-server=http://user:pass@ip:port قرار دهید. مقدار --proxy-server=http://ip:port را تمیز نگه دارید و مشخصات ورود را از طریق await page.authenticate({ username, password }) ارسال کنید.
چرا تب دوم باز شده با `browser.newPage()` با خطای HTTP 407 مواجه شد؟
دستور page.authenticate() برای هر تب به طور جداگانه اعمال میشود. قبل از ناوبری در هر تب تازه باز شده، await secondPage.authenticate({ username, password }) را فراخوانی کنید.
آیا پروکسیهای VinaProxy برای اسکرپینگ با Chrome بدون سر (headless) نامحدود هستند؟
بله. تمام پلنهای Dedicated IPv4 و Static ISP شامل پهنای باند ماهانه نامحدود هستند.
ناوگان Node.js Puppeteer خود را با IPهای استاتیک قدرتمند کنید
پروکسیهای فوری و نامحدود Dedicated IPv4 و Static ISP در 7 کشور مختلف.
خرید پروکسیهای Puppeteer