Skip to content
Intermediate / 2 min read

ProxyScrape + Puppeteer: چگونه اسکرپرهای Node.js را از طریق پروکسی‌های HTTP و SOCKS5 مسیریابی کنیم

راهنمای گام‌به‌گام پیکربندی پروکسی‌های مسکونی و دیتاسنتری ProxyScrape در Puppeteer، شامل احراز هویت برای پروکسی‌های HTTP و یک رله محلی برای SOCKS5.

Windows macOS لینوکس وب اسکرپینگ

مرور کلی

Puppeteer یک کتابخانه Node.js است که Chrome یا Chromium بدون رابط گرافیکی را کنترل می‌کند. هنگام اسکرپینگ در مقیاس بزرگ، مسیریابی درخواست‌ها از طریق پروکسی‌ها ضروری است تا از مسدود شدن IP جلوگیری شود و به محتوای محدودشده جغرافیایی دسترسی پیدا کنید. این آموزش نشان می‌دهد چگونه پروکسی‌های مسکونی و دیتاسنتری ProxyScrape را در Puppeteer برای هر دو پروتکل HTTP و SOCKS5 پیکربندی کنید. چون Chromium از پروکسی‌های SOCKS5 احراز هویت‌شده به‌طور مستقیم پشتیبانی نمی‌کند، همچنین یاد می‌گیرید چگونه یک رله محلی با استفاده از gost راه‌اندازی کنید تا احراز هویت HTTP را به SOCKS5 پل بزنید.

پیش‌نیازها

  • Node.js نسخه 18 یا جدیدتر نصب‌شده روی Windows، macOS یا Linux.
  • یک حساب ProxyScrape با پروکسی‌های مسکونی یا دیتاسنتری. میزبان، پورت، نام کاربری و رمز عبور پروکسی خود را از داشبورد ProxyScrape یادداشت کنید.
  • آشنایی مقدماتی با JavaScript و خط فرمان.

گام ۱: یک پروژه جدید Node.js راه‌اندازی کنید

  1. یک دایرکتوری جدید ایجاد کنید و یک پروژه را مقداردهی اولیه کنید:
    mkdir puppeteer-proxyscrape && cd puppeteer-proxyscrape
    npm init -y
    
  2. Puppeteer را نصب کنید:
    npm install puppeteer
    
    این یک نسخه سازگار از Chromium را دانلود می‌کند.

گام ۲: یک پروکسی HTTP با احراز هویت پیکربندی کنید

پروکسی‌های HTTP ProxyScrape از احراز هویت با نام کاربری/رمز عبور پشتیبانی می‌کنند. Puppeteer می‌تواند اعتبارنامه‌های پروکسی را با متد page.authenticate() ارسال کند.

یک فایل با نام http-proxy.js ایجاد کنید:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=http://proxy.proxyscrape.com:12345' // Replace with your ProxyScrape host and port
    ]
  });

  const page = await browser.newPage();

  // Replace with your ProxyScrape username and password
  await page.authenticate({
    username: 'your-username',
    password: 'your-password'
  });

  await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
  const content = await page.content();
  console.log(content);

  await browser.close();
})();

اسکریپت را اجرا کنید:

node http-proxy.js

خروجی باید IP پروکسی را نشان دهد که تأییدکننده پیکربندی است.

گام ۳: پروکسی‌های HTTP را برای هر درخواست بچرخانید

برای اسکرپ‌های بزرگ، پروکسی را برای هر صفحه یا درخواست بچرخانید. یک آرایه از پروکسی‌ها نگه دارید و یکی را به‌صورت تصادفی یا ترتیبی انتخاب کنید.

const proxies = [
  { host: 'proxy1.proxyscrape.com', port: 12345, username: 'user', password: 'pass' },
  { host: 'proxy2.proxyscrape.com', port: 12345, username: 'user', password: 'pass' }
];

function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}

(async () => {
  const proxy = getRandomProxy();
  const browser = await puppeteer.launch({
    args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
  });
  const page = await browser.newPage();
  await page.authenticate({ username: proxy.username, password: proxy.password });
  await page.goto('https://httpbin.org/ip');
  // ...
  await browser.close();
})();

اگر پلن ProxyScrape شما یک endpoint چرخشی (یک host:port واحد که IP را برای هر درخواست می‌چرخاند) ارائه می‌دهد، به‌جای مدیریت یک لیست از آن استفاده کنید.

گام ۴: استفاده از پروکسی‌های SOCKS5 از طریق یک رله محلی

Chromium از پروکسی‌های SOCKS5 پشتیبانی می‌کند اما از احراز هویت با نام کاربری/رمز عبور برای آن‌ها پشتیبانی نمی‌کند. برای استفاده از پروکسی‌های SOCKS5 ProxyScrape همراه با احراز هویت، یک رله محلی اجرا کنید که HTTP را بدون احراز هویت می‌پذیرد و به پروکسی SOCKS5 احراز هویت‌شده فوروارد می‌کند.

  1. gost را نصب کنید (یک رله ساده پروکسی). روی macOS با Homebrew:

    brew install gost
    

    روی Linux، باینری را از صفحه انتشارهای gost دانلود کنید. روی Windows، فایل .exe را از همان صفحه دانلود کنید.

  2. gost را با یک listener HTTP و یک forwarder SOCKS5 راه‌اندازی کنید:

    gost -L http://:8080 -F socks5://your-username:[email protected]:1080
    

    نام کاربری، رمز عبور، میزبان و پورت را با جزئیات SOCKS5 ProxyScrape خود جایگزین کنید.

  3. Puppeteer را به رله HTTP محلی اشاره دهید:

    const browser = await puppeteer.launch({
      args: ['--proxy-server=http://127.0.0.1:8080']
    });
    

    نیازی به page.authenticate() نیست چون رله محلی احراز هویت را انجام می‌دهد.

  4. با همان بررسی httpbin.org/ip تست کنید.

گام ۵: تأیید کنید که پروکسی کار می‌کند

از یک سرویس بازتاب IP قابل‌اعتماد استفاده کنید تا تأیید کنید پروکسی فعال است و IP واقعی شما را لو نمی‌دهد:

await page.goto('https://api.ipify.org?format=json');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body).ip);

IP بازگشتی را با IP واقعی خود مقایسه کنید.

عیب‌یابی

  • 407 Proxy Authentication Required: مطمئن شوید page.authenticate() قبل از page.goto() فراخوانی می‌شود. برای SOCKS5، صحیح بودن اعتبارنامه‌های رله را تأیید کنید.
  • ERR_PROXY_CONNECTION_FAILED: میزبان و پورت پروکسی را بررسی کنید. برای SOCKS5، مطمئن شوید رله gost در حال اجرا و قابل‌دسترسی است.
  • خطاهای SSL: برخی پروکسی‌ها ممکن است از تونل‌زنی HTTPS پشتیبانی نکنند. برای مقصدهای HTTPS از پروکسی‌های HTTP استفاده کنید، یا تأیید کنید که پروکسی SOCKS5 شما از CONNECT پشتیبانی می‌کند.
  • پاسخ‌های کند: پروکسی‌های مسکونی می‌توانند کندتر باشند. زمان‌های انتظار را با page.setDefaultNavigationTimeout(60000) افزایش دهید.
  • IP تغییر نمی‌کند: اگر از لیست پروکسی ثابت استفاده می‌کنید، منطق چرخش را تأیید کنید. اگر از endpoint چرخشی استفاده می‌کنید، بررسی کنید که چرخش ProxyScrape در داشبورد شما فعال باشد.

خلاصه

شما با موفقیت پروکسی‌های HTTP و SOCKS5 ProxyScrape را با Puppeteer پیکربندی کردید. برای پروکسی‌های HTTP، از --proxy-server و page.authenticate() استفاده کنید. برای SOCKS5، یک رله محلی با gost اجرا کنید تا احراز هویت را انجام دهد. پروکسی‌ها را برای هر درخواست بچرخانید تا ترافیک توزیع شود و از مسدود شدن جلوگیری کنید. همیشه قبل از شروع یک اسکرپ بزرگ، IP خروجی خود را تأیید کنید.