วิธีตั้งค่าพร็อกซีพร้อมยืนยันตัวตนใน Puppeteer (Node.js)
อัปเดตเมื่อ:
Puppeteer ควบคุม Chrome และ Chromium ผ่าน DevTools Protocol (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 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
ขั้นตอนการตั้งค่าพร็อกซีสองสเต็ปใน 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() - หากต้องการใช้งานพร็อกซีต่างกันในบริบทไม่ระบุตัวตน (incognito) บนโพรเซส Chromium เดียวกัน ให้ใช้แพ็กเกจ npm
proxy-chain(anonymizeProxy()) ครอบ URLhttp://user:pass@ip:portแล้วส่งต่อไปยังbrowser.createBrowserContext({ proxyServer }) - สามารถทำงานร่วมกับ
puppeteer-extraและปลั๊กอินหลบการตรวจจับpuppeteer-extra-plugin-stealthได้อย่างสมบูรณ์แบบ
ขั้นตอนทีละขั้น
- 1
ส่งพารามิเตอร์ --proxy-server ไปยัง 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?
ข้อผิดพลาดนี้เกิดขึ้นเมื่อใส่ชื่อผู้ใช้และรหัสผ่านไว้ในแฟล็กเปิดเบราว์เซอร์ เช่น --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 มีการจำกัดปริมาณข้อมูลสำหรับการสแครปด้วย headless Chrome หรือไม่?
ไม่มี ทุกแพ็กเกจ Dedicated IPv4 และ Static ISP ของ VinaProxy มาพร้อมแบนด์วิดท์ไม่จำกัดตลอดทั้งเดือน
เพิ่มศักยภาพระบบ Puppeteer ใน Node.js ด้วย IP แบบคงที่เฉพาะคุณ
Dedicated IPv4 และ Static ISP พร็อกซีความเร็วสูง ไม่จำกัดการใช้งาน ใน 7 ประเทศทั่วโลก
ซื้อพร็อกซีสำหรับ Puppeteer