Không cần KYC — không cần ID, không selfie, không giấy tờ. Thanh toán bằng crypto: BTC, USDT, USDC, ETH, SOL, LTC
Ngôn ngữ: Tiếng Việt
Bắt đầu ngay

Tài liệu · Puppeteer · Chrome for Testing

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

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.

Cập nhật lần cuối: · 5 phút đọ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

Đị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ựcawait page.authenticate({ username, password }) trước khi điều hướng
Phiên riêng biệtbrowser.createBrowserContext({ proxyServer }): một ngữ cảnh cho mỗi phiên
SOCKS5Không dùng với xác thực trong Chrome: dùng cổng HTTP
Tiết kiệm lưu lượngpage.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
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
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.

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.

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 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 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.

Từ 0,50 US$/GB · không cần KYC

Bắt đầu ngay