Playwright ও Puppeteer-এর সঙ্গে প্রক্সি ব্যবহার: Python ও Node (২০২৬)

2 জুন 2026 প্রকাশিত · ≈9 মিনিট পড়া

Headless ব্রাউজার JavaScript রেন্ডার করে, তাই এগুলো এমন আধুনিক সাইট সামলাতে পারে যা সাধারণ HTTP ক্লায়েন্ট পারে না। কিন্তু একটি ব্রাউজার এখনও প্রতিটি রিকোয়েস্ট একটিমাত্র IP থেকে পাঠায়, এবং কোনো সাইট সেই অ্যাড্রেসকে rate-limit করা বা ফিঙ্গারপ্রিন্ট করার মুহূর্তেই অটোমেশন ধরা পড়ে যায়। Playwright এবং Puppeteer-এর সঙ্গে প্রক্সি ব্যবহার করলে ট্র্যাফিক একাধিক IP-তে ছড়িয়ে যায় এবং সঠিকভাবে করলে আপনার অটোমেশন সাধারণ ব্যবহারকারীদের মতো দেখায়। নিচে Python এবং Node উভয়ের জন্য কার্যকর সেটআপ দেওয়া হলো।

প্রক্সিসহ Playwright (Python)

ব্রাউজার লঞ্চের সময় প্রক্সি সেট করুন। অথেন্টিকেশন আলাদা username এবং password ফিল্ড হিসেবে পাঠান — সার্ভার URL-এর ভেতরে ক্রেডেনশিয়াল ইনলাইন করবেন না:

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://gate.jibaoproxy.com:10001",
    "username": "USERNAME",
    "password": "PASSWORD",
}

with sync_playwright() as p:
    browser = p.chromium.launch(proxy=PROXY, headless=True)
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.inner_text("body"))
    browser.close()

JIBAO গেটওয়েতে HTTP এবং SOCKS5 উভয়ই দেয়। ব্রাউজার অটোমেশনের জন্য HTTP এন্ডপয়েন্ট ব্যবহার করুন: Playwright ও Puppeteer অথেন্টিকেটেড SOCKS5 প্রক্সি সমর্থন করে না, তাই auth-সহ HTTP-ই নির্ভরযোগ্য পছন্দ।

প্রক্সিসহ Playwright (Node)

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    headless: true,
    proxy: {
      server: 'http://gate.jibaoproxy.com:10001',
      username: 'USERNAME',
      password: 'PASSWORD',
    },
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  console.log(await page.innerText('body'));
  await browser.close();
})();

প্রতি ব্রাউজার কনটেক্সটে IP রোটেট করুন

Playwright-এ রোটেট করার সবচেয়ে পরিচ্ছন্ন উপায় হলো প্রতি BrowserContext-এ একটি করে IP। প্রতিটি কনটেক্সট একটি আলাদা সেশন (নিজস্ব cookie ও cache), তাই প্রতিটিকে আলাদা exit IP-তে বাঁধলে একটি একক ব্রাউজার প্রসেস থেকেই আপনি সমান্তরাল পরিচয় পাবেন:

from playwright.sync_api import sync_playwright

def ctx_proxy(session_id):
    return {
        "server": "http://gate.jibaoproxy.com:10001",
        "username": f"USERNAME-session-{session_id}",
        "password": "PASSWORD",
    }

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    for i in range(3):
        context = browser.new_context(proxy=ctx_proxy(f"ctx{i}"))
        page = context.new_page()
        page.goto("https://httpbin.org/ip")
        print(i, page.inner_text("body"))
        context.close()
    browser.close()

প্রতিটি কনটেক্সট একটি স্বতন্ত্র sticky session টোকেন ব্যবহার করে, তাই একটি কনটেক্সটের ভেতরে IP স্থির থাকে (login flow-এর জন্য ভালো) কিন্তু কনটেক্সটগুলোর মধ্যে আলাদা হয় (অনেক অ্যাকাউন্ট সমান্তরালে চালানোর জন্য ভালো)। এটিই সেই প্যাটার্ন যা GoLogin এবং Dolphin Anty-র মতো anti-detect ব্রাউজার স্বয়ংক্রিয় করে — দেখুন আমাদের anti-detect প্রক্সি সেটআপ গাইড

প্রক্সিসহ Puppeteer (Node)

Puppeteer প্রক্সি সার্ভারটিকে একটি Chromium লঞ্চ ফ্ল্যাগ হিসেবে সেট করে, তারপর page অবজেক্টে অথেন্টিকেট করে:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: ['--proxy-server=http://gate.jibaoproxy.com:10001'],
  });
  const page = await browser.newPage();
  await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });

  await page.goto('https://httpbin.org/ip');
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

যেহেতু প্রক্সি একটি প্রসেস-লেভেল ফ্ল্যাগ, একটি একক Puppeteer ব্রাউজার একটিমাত্র IP ব্যবহার করে। রোটেট করতে হলে প্রতি পরিচয়ের জন্য একটি নতুন ব্রাউজার লঞ্চ করুন (ভারী) অথবা এমন একটি গেটওয়ের মাধ্যমে রোটেশন চালান যা প্রতি কানেকশনে IP বদলায়।

Login Flow-এর জন্য Sticky Session

যে কোনো flow যা একটি session cookie তৈরি করে তাকে তার পুরো জীবনকাল একই IP ধরে রাখতে হবে। IP-A-তে তৈরি একটি cookie হঠাৎ IP-B থেকে দেখা গেলে তা session hijacking হিসেবে পড়া হয় এবং re-auth বা ban ট্রিগার করে। প্রতিটি লগ-ইন করা অ্যাকাউন্টের জন্য একটি কনটেক্সট (বা একটি ব্রাউজার) রাখুন, পুরো সেশনের জন্য একটি sticky session টোকেনে পিন করা।

ফিঙ্গারপ্রিন্ট ভুলবেন না

একটি residential IP দরকারি কিন্তু যথেষ্ট নয়। সাইটগুলো আপনার ব্রাউজারের TLS/JA4 handshake, HTTP/2 ফ্রেম অর্ডার, canvas, WebGL এবং navigator প্রপার্টিও পড়ে। ভ্যানিলা headless Chromium navigator.webdriver = true এবং একটি headless ফিঙ্গারপ্রিন্ট ফাঁস করে যা সেরা IP-কেও পরাস্ত করে। stealth প্লাগইন এবং বাস্তবসম্মত লঞ্চ ফ্ল্যাগ দিয়ে এটি প্রশমিত করুন:

// Node: puppeteer-extra + stealth
const puppeteer = require('puppeteer-extra');
const Stealth = require('puppeteer-extra-plugin-stealth');
puppeteer.use(Stealth());

// Realistic launch flags
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--proxy-server=http://gate.jibaoproxy.com:10001',
    '--disable-blink-features=AutomationControlled',
    '--window-size=1920,1080',
  ],
});

আপনি ঠিক কোন সিগন্যালগুলো ফাঁস করছেন তা দেখতে, আপনার অটোমেটেড ব্রাউজারটি JIBAO-র ফ্রি JA3/JA4 ফিঙ্গারপ্রিন্ট চেকার-এ চালান। handshake কেন ফ্ল্যাগ হয় তার গভীরতর মেকানিক্সের জন্য পড়ুন TLS ফিঙ্গারপ্রিন্টিং বাইপাস করা এবং সম্পূর্ণ Cloudflare বাইপাস রেসিপি

যাচাই এবং ডিবাগ

আপনার ব্রাউজার অটোমেশনকে শক্তি দিন

500MB ফ্রি ট্রাফিক এবং residential IP পান যা Playwright ও Puppeteer-কে ban list থেকে দূরে রাখে।

ফ্রি ট্রায়াল শুরু করুন

সকল IP পণ্যের জন্য · যেকোনো সময় উপলব্ধ বিশাল নোড পুল

এখনই নিবন্ধন করুন এবং আপনার রিচার্জে ১০০% পর্যন্ত ফেরত পান

নতুন ব্যবহারকারীরা নিবন্ধনের সময় 500MB পান, সাথে প্রথম রিচার্জে বোনাস। সীমিত সময়ের অফার।