ใช้ Proxy กับ Playwright และ Puppeteer: Python และ Node (2026)

เผยแพร่เมื่อ 2 มิถุนายน 2026 · อ่าน ≈9 นาที

เบราว์เซอร์แบบ headless เรนเดอร์ JavaScript ได้ จึงรองรับเว็บไซต์สมัยใหม่ที่ HTTP client ธรรมดาทำไม่ได้ แต่เบราว์เซอร์ก็ยังส่งทุกคำขอออกจาก IP เดียว และระบบอัตโนมัติจะถูกจับได้ทันทีที่เว็บไซต์จำกัดอัตราคำขอหรือทำ fingerprint กับที่อยู่นั้น การใช้ proxy กับ Playwright และ Puppeteer ช่วยกระจายทราฟฟิกไปยังหลาย IP และเมื่อทำถูกวิธี ก็ทำให้ระบบอัตโนมัติของคุณดูเหมือนผู้ใช้ทั่วไป นี่คือการตั้งค่าที่ใช้งานได้จริงสำหรับทั้งสองตัว ทั้งใน Python และ Node

Playwright กับ Proxy (Python)

ตั้งค่า proxy ตอนเปิดเบราว์เซอร์ ส่งการยืนยันตัวตนเป็นฟิลด์ username และ password แยกกัน — อย่าฝัง credentials ลงใน 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 บน gateway ใช้ endpoint แบบ HTTP สำหรับการทำเบราว์เซอร์อัตโนมัติ: Playwright และ Puppeteer ไม่รองรับ SOCKS5 proxy ที่มีการยืนยันตัวตน ดังนั้น HTTP พร้อม auth จึงเป็นตัวเลือกที่เชื่อถือได้

Playwright กับ Proxy (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 ต่อ Browser Context

วิธีที่สะอาดที่สุดในการหมุน IP ใน Playwright คือใช้หนึ่ง IP ต่อหนึ่ง BrowserContext แต่ละ context เป็นเซสชันที่แยกอิสระจากกัน (มี cookies และ cache ของตัวเอง) ดังนั้นการผูกแต่ละ context เข้ากับ 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()

แต่ละ context ใช้ sticky session token ที่ต่างกัน ดังนั้น IP จึงคงที่ภายใน context (ดีสำหรับ login flow) แต่ต่างกันระหว่าง context (ดีสำหรับการรันหลายบัญชีพร้อมกัน) นี่คือแพตเทิร์นที่ anti-detect browser อย่าง GoLogin และ Dolphin Anty ทำให้เป็นอัตโนมัติ — ดูคู่มือการตั้งค่า proxy แบบ anti-detectของเรา

Puppeteer กับ Proxy (Node)

Puppeteer ตั้งค่าเซิร์ฟเวอร์ proxy เป็น flag ตอนเปิด Chromium แล้วยืนยันตัวตนบน object ของ 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();
})();

เนื่องจาก proxy เป็น flag ระดับกระบวนการ เบราว์เซอร์ Puppeteer หนึ่งตัวจึงใช้ IP เดียว หากต้องการหมุน IP ให้เปิดเบราว์เซอร์ใหม่ต่อหนึ่งตัวตน (หนักกว่า) หรือขับการหมุนผ่าน gateway ที่เปลี่ยน IP ต่อการเชื่อมต่อ

Sticky Session สำหรับ Login Flow

ทุก flow ที่สร้าง session cookie จะต้องคง IP เดิมไว้ตลอดอายุการใช้งาน cookie ที่ออกบน IP-A แล้วจู่ๆ ปรากฏจาก IP-B จะถูกอ่านว่าเป็นการยึดเซสชัน (session hijacking) และทำให้ต้องยืนยันตัวตนใหม่หรือถูกแบน ให้คงหนึ่ง context (หรือหนึ่งเบราว์เซอร์) ต่อหนึ่งบัญชีที่ล็อกอินไว้ ปักหมุดไว้ที่ sticky session token เดียวตลอดทั้งเซสชัน

อย่าลืม Fingerprint

residential IP เป็นสิ่งจำเป็นแต่ยังไม่เพียงพอ เว็บไซต์ยังอ่าน TLS/JA4 handshake ของเบราว์เซอร์ ลำดับเฟรม HTTP/2 canvas WebGL และคุณสมบัติของ navigator ด้วย Chromium แบบ headless ที่ไม่ปรับแต่งจะรั่ว navigator.webdriver = true และ fingerprint แบบ headless ที่เอาชนะแม้กระทั่ง IP ที่ดีที่สุดได้ บรรเทาด้วย stealth plugin และ launch flag ที่สมจริง:

// 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',
  ],
});

หากต้องการดูว่าคุณกำลังรั่วสัญญาณไหนบ้าง ให้รันเบราว์เซอร์อัตโนมัติของคุณกับเครื่องมือตรวจ fingerprint JA3/JA4ฟรีของ JIBAO สำหรับกลไกเชิงลึกว่าทำไม handshake ถึงถูกตั้งธง อ่านการข้าม TLS fingerprintingและสูตรข้าม Cloudflareฉบับสมบูรณ์

ตรวจสอบและดีบัก

ขับเคลื่อนการทำเบราว์เซอร์อัตโนมัติของคุณ

รับ500MB ทราฟฟิกฟรี และ residential IP ที่ทำให้ Playwright และ Puppeteer พ้นจากรายชื่อถูกแบน

เริ่มทดลองใช้ฟรี

สำหรับผลิตภัณฑ์ IP ทุกประเภท · พูลโหนดขนาดมหึมาพร้อมใช้งานได้ทุกเมื่อ

สมัครสมาชิกตอนนี้และรับเงินคืนการเติมเงินสูงสุด 100%

ผู้ใช้ใหม่รับ 500MB เมื่อสมัครสมาชิก พร้อมโบนัสในการเติมเงินครั้งแรก ข้อเสนอมีระยะเวลาจำกัด