# Xác thực proxy Puppeteer với IP proxy dân cư và proxy di động 4G

> Xác thực proxy Puppeteer: --proxy-server cùng với page.authenticate(), một phiên mỗi ngữ cảnh trình duyệt, chặn yêu cầu để tiết kiệm lưu lượng.

- URL: https://crawlrelay.com/vi/docs/puppeteer/
- Cập nhật lần cuối: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Chrome lấy địa chỉ proxy từ một cờ khởi chạy và thông tin xác thực từ page.authenticate(). Dùng một ngữ cảnh trình duyệt cho mỗi phiên để thông tin xác thực không bị rò rỉ giữa các công việc.

**Trả lời nhanh — Làm sao để tôi sử dụng proxy đã xác thực trong Puppeteer?**

Khởi động Chrome với `--proxy-server=http://gw.crawlrelay.com:7777`, sau đó gọi `page.authenticate({ username, password })` trước khi thực hiện `goto` đầu tiên. Chrome bỏ qua thông tin xác thực được ghi trong cờ. **CrawlRelay** proxy dân cư đọc quốc gia và phiên gắn liền từ tên người dùng, nên mỗi trang hoặc ngữ cảnh có thể có đường ra riêng. Chi phí lưu lượng 0,50 US$/GB từ 50 GB. Thanh toán bằng crypto, không cần KYC.

## Thiết lập Puppeteer nhanh

| Thuộc tính | Giá trị |
| --- | --- |
| Địa chỉ proxy | `--proxy-server=http://gw.crawlrelay.com:7777` trong `args`, hoặc `proxyServer` trên một ngữ cảnh trình duyệt |
| Thông tin xác thực | `await page.authenticate({ username, password })` trước khi điều hướng |
| Phiên riêng biệt | `browser.createBrowserContext({ proxyServer })`: một ngữ cảnh cho mỗi phiên |
| SOCKS5 | Không dùng với xác thực trong Chrome: dùng cổng HTTP |
| Tiết kiệm lưu lượng | `page.setRequestInterception(true)` và hủy hình ảnh, font chữ và phương tiện |

## Làm sao để tôi thiết lập một proxy đã xác thực duy nhất?

Đây là mẫu tối thiểu. Khối `try … finally` đóng Chrome ngay cả khi điều hướng thất bại, điều này quan trọng trên các máy chủ nơi trình duyệt mồ côi bị đóng lại.

*Node.js (module ES): một trình duyệt, một lối ra*

```javascript
import puppeteer from "puppeteer";

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://gw.crawlrelay.com:7777"],
});
try {
  const page = await browser.newPage();
  await page.authenticate({ username: "USERNAME-country-us", password: "PASSWORD" });
  await page.setRequestInterception(true);
  page.on("request", (req) =>
    ["image", "font", "media"].includes(req.resourceType()) ? req.abort() : req.continue()
  );
  const res = await page.goto("https://example.com/", { waitUntil: "domcontentloaded", timeout: 60000 });
  console.log(res.status(), await page.title());
} finally {
  await browser.close();
}
```

## Làm sao để tôi chạy nhiều phiên hoặc quốc gia trong một trình duyệt?

Tạo một ngữ cảnh trình duyệt cho mỗi phiên. Ngữ cảnh là hồ sơ cô lập với cookie, bộ nhớ đệm và trạng thái mạng riêng, vì thế thông tin xác thực bạn cung cấp cho một ngữ cảnh sẽ không rò rỉ sang ngữ cảnh khác. Gán cho mỗi ngữ cảnh một tên người dùng với quốc gia hoặc ID phiên riêng.

*Node.js: một ngữ cảnh cho mỗi phiên sticky*

```javascript
import puppeteer from "puppeteer";
import { randomUUID } from "node:crypto";

const GATEWAY = "http://gw.crawlrelay.com:7777";
const browser = await puppeteer.launch();

async function visit(country, url) {
  const session = randomUUID().replaceAll("-", "").slice(0, 10);
  const context = await browser.createBrowserContext({ proxyServer: GATEWAY });
  try {
    const page = await context.newPage();
    await page.authenticate({
      username: `USERNAME-country-${country}-session-${session}-ttl-20`,
      password: "PASSWORD",
    });
    await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 });
    return { country, session, ip: await page.evaluate(() => document.body.innerText.trim()) };
  } finally {
    await context.close();
  }
}

try {
  const results = await Promise.all([
    visit("us", "https://api.ipify.org"),
    visit("gb", "https://api.ipify.org"),
  ]);
  console.table(results);
} finally {
  await browser.close();
}
```

## Tại sao Puppeteer báo lỗi 407 hoặc ERR_TUNNEL_CONNECTION_FAILED?

Bởi vì Chrome không gửi thông tin xác thực, hoặc gửi sai thông tin. Kiểm tra ba điều:

1. `page.authenticate()` chạy **trước** `goto` đầu tiên trên trang đó.
2. Cờ `--proxy-server` hoặc `proxyServer` chỉ chứa scheme, host và port, không có phần `user:pass@`.
3. Tên người dùng không có lỗi chính tả trong phần mục tiêu: thử với curl trước, như hướng dẫn trên trang [407](https://crawlrelay.com/vi/docs/errors/407-proxy-authentication-required/).

Nếu curl thành công với cùng tên người dùng và mật khẩu mà Puppeteer vẫn lỗi, đọc thêm [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/vi/docs/errors/err-tunnel-connection-failed/).

## Một trang Puppeteer tốn bao nhiêu lưu lượng?

Tất cả những gì Chrome tải về đều bị tính phí: HTML, script, style, hình ảnh, font chữ và các API gọi từ trang. HTTP Archive Web Almanac 2025 đo được trọng lượng trang trung bình là 2.164 KB trên di động và 2.412 KB trên desktop. Chặn hình ảnh, font chữ và phương tiện bằng chặn yêu cầu thường cắt xuống vài trăm kilobyte, và trả về các phản hồi cache cho script lặp lại thì giảm thêm. Chỉ dùng [proxy di động 4G](https://crawlrelay.com/vi/mobile-proxies/) xoay vòng cho những trang cần thôi: lưu lượng di động tính 1,50 US$/GB từ 5 GB, proxy dân cư 0,50 US$/GB từ 50 GB.

## Các câu hỏi về Puppeteer và proxy

### Tôi có thể đặt tên người dùng và mật khẩu trong --proxy-server không?

Không. Chrome bỏ qua thông tin xác thực trong cờ `--proxy-server`, và yêu cầu HTTPS đầu tiên bị lỗi 407 ẩn sau `ERR_TUNNEL_CONNECTION_FAILED`. Chỉ đặt `http://host:port` trong cờ và truyền thông tin xác thực với `page.authenticate()` trên mỗi trang mới.

### Làm sao để tôi xoay IP giữa các trang trong Puppeteer?

Mở từng trang trong ngữ cảnh trình duyệt mới, hoặc đặt mỗi trang một tên người dùng không có ID phiên. Một ngữ cảnh mới mở các kết nối mới, và mỗi kết nối thường có proxy dân cư khác nhau. Trong một trang, Chrome tái sử dụng kết nối, nên yêu cầu tới cùng một trang thường dùng chung proxy dân cư cho tới khi kết nối đóng.

### Page.authenticate() có hoạt động với việc chặn yêu cầu không?

Có. Puppeteer tự xử lý thách thức xác thực proxy, và trình xử lý chặn của bạn chỉ cần gọi `continue()` hoặc `abort()` trên từng yêu cầu. Thiết lập `authenticate()` trước, rồi bật chặn yêu cầu, như ví dụ đầu tiên.

### Tôi có nên dùng plugin stealth puppeteer-extra với proxy không?

Chúng tôi không tài liệu hay hỗ trợ các công cụ nhằm che giấu tự động hóa hoặc đánh bại hệ thống phát hiện bot. Mục đích của chúng là vượt qua quyết định lọc khách truy cập tự động của một trang, điều này không được phép theo [Chính sách Sử dụng Chấp nhận](https://crawlrelay.com/vi/acceptable-use/) của chúng tôi. Hãy tải trang công khai với tốc độ lịch sự và dùng API chính thức nếu có.

### Puppeteer dùng Chrome nào với proxy?

Các phiên bản Puppeteer gần đây tự tải về bản Chrome for Testing tương thích và dùng mặc định. Các cờ proxy và `page.authenticate()` hoạt động như Chrome bình thường. Nếu bạn trỏ Puppeteer tới Chrome riêng với `executablePath`, nhớ giữ trình duyệt đó luôn cập nhật.

**Chạy Puppeteer qua IP proxy dân cư** 5,94 US$ cho 10 GB, 0,50 US$/GB từ 50 GB. [Xem giá](https://crawlrelay.com/vi/pricing/) · [Hướng dẫn Node.js](https://crawlrelay.com/vi/docs/node/)

---

CrawlRelay: CrawlRelay là dịch vụ proxy dân cư xoay vòng và proxy di động 4G/5G dành cho nhà phát triển, hỗ trợ scrapers và pipeline dữ liệu AI: traffic trả tiền theo nhu cầu không hết hạn từ 0,50 US$/GB, thanh toán bằng crypto, không cần tải lên ID. Không cần KYC — không cần ID, không chụp selfie, không giấy tờ.
