Cách cấu hình proxy HTTP(S) trong Puppeteer trên Node.js
Cập nhật:
Puppeteer điều khiển trực tiếp Chrome/Chromium thông qua giao thức DevTools (CDP). Để gắn proxy có xác thực ip:port:user:pass của VinaProxy vào Puppeteer, bạn kết hợp cờ khởi chạy --proxy-server=http://ip:port trong puppeteer.launch() với hàm await page.authenticate({ username, password }) trên mỗi tab mở ra.
--proxy-server=http://ip:port + page.authenticate({ username, password })- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
- 1 IP40.000 ₫
- 5+ IP35.000 ₫
- 10+ IP25.000 ₫
- 20+ IP25.000 ₫
- 50+ IP25.000 ₫
- 100+ IP25.000 ₫
- 200+ IP25.000 ₫
- 500+ IP25.000 ₫
- 1000+ IP22.000 ₫
- 2000+ IP20.000 ₫
Quy trình 2 bước xác thực proxy chuẩn trong Puppeteer
Khác với Selenium cần tiện ích mở rộng, Puppeteer cung cấp sẵn hàm page.authenticate() gửi thông tin đăng nhập xuống tầng mạng CDP ngay khi máy chủ proxy trả về yêu cầu xác thực HTTP 407:
| Bước cấu hình trong Puppeteer | Lệnh JavaScript / TypeScript | Vai trò |
|---|---|---|
| Bước 1: Khởi chạy Browser | puppeteer.launch({ args: ['--proxy-server=http://ip:port'] }) | Trỏ kết nối mạng của tiến trình Chromium về máy chủ proxy |
| Bước 2: Xác thực trên Tab | await page.authenticate({ username: 'u', password: 'p' }) | Cung cấp thông tin đăng nhập trước khi gọi page.goto() |
| Bước 3: Chặn tài nguyên nặng | await page.setRequestInterception(true) | Bỏ qua tải ảnh/video/font khi chỉ cần lấy nội dung trang |
Xoay vòng nhiều proxy cho từng tab Puppeteer với proxy-chain
- Mặc định cờ
--proxy-serveráp dụng cho toàn bộ tiến trìnhbrowser; nếu bạn mở tab mới bằngbrowser.newPage(), nhớ gọi lạiawait newPage.authenticate({ username, password })cho tab đó - Nếu muốn mỗi
BrowserContextẩn danh (browser.createBrowserContext()) dùng một proxy khác nhau mà không cần bật nhiều Chrome, hãy dùng gói npmproxy-chain(await proxyChain.anonymizeProxy('http://user:pass@ip:port')) - Luôn đặt
{ waitUntil: 'domcontentloaded', timeout: 30000 }trongpage.goto()để script không bị treo bởi các trình theo dõi quảng cáo
Các bước thực hiện
- 1
Truyền cờ --proxy-server vào puppeteer.launch()
Khởi tạo
const browser = await puppeteer.launch({ args: ['--proxy-server=http://ip:port'] });(không điền user:pass ở cờ này). - 2
Mở trang mới và gọi page.authenticate()
Chạy
const page = await browser.newPage(); await page.authenticate({ username: 'USER', password: 'PASS' });. - 3
Truy cập trang kiểm tra IP
Gọi
await page.goto('https://vinaproxy.com/api/my-ip', { waitUntil: 'networkidle2' });để xác minh IP đầu ra. - 4
Đóng trình duyệt sau khi hoàn tất
Gọi
await browser.close()để giải phóng bộ nhớ RAM trên máy chủ.
Câu hỏi thường gặp
Tại sao Puppeteer báo lỗi `ERR_NO_SUPPORTED_PROXIES`?
Lỗi này xuất hiện khi bạn truyền cả user:pass@ vào trong cờ --proxy-server=http://user:pass@ip:port. Ở cờ --proxy-server, bạn chỉ được phép viết http://ip:port, còn username và password phải truyền qua hàm await page.authenticate().
Mở tab thứ hai bằng `browser.newPage()` bị lỗi 407 thì xử lý sao?
Hàm page.authenticate() có phạm vi trên từng đối tượng Page (từng tab). Khi mở tab thứ hai, bạn chỉ cần gọi await page2.authenticate({ username, password }) trước khi điều hướng.
Puppeteer Extra Stealth Plugin có dùng chung cách cài proxy này không?
Hoàn toàn giống hệt. Bạn vẫn truyền --proxy-server=http://ip:port vào puppeteer.launch() và gọi page.authenticate().
Tăng tốc Puppeteer trên Node.js với bể proxy tĩnh VinaProxy
Proxy IPv4 riêng & Static ISP không giới hạn băng thông tại Mỹ, Việt Nam và 5 nước khác.
Mua Proxy cho Puppeteer