Jawaban cepat
Bagaimana cara menggunakan proxy yang diautentikasi di Puppeteer?
Luncurkan Chrome dengan --proxy-server=http://gw.crawlrelay.com:7777, lalu panggil page.authenticate({ username, password }) sebelum goto pertama. Chrome mengabaikan kredensial yang ditulis di dalam flag. CrawlRelay proxy residensial membaca negara dan sesi lengket dari username, sehingga setiap halaman atau konteks bisa memiliki exit-nya sendiri. Biaya traffic US$0,50/GB mulai dari 50 GB. Dibayar dengan crypto, tanpa KYC.
Pengaturan Puppeteer secara singkat
| Alamat proxy | --proxy-server=http://gw.crawlrelay.com:7777 di args, atau proxyServer pada konteks browser |
|---|---|
| Kredensial | await page.authenticate({ username, password }) sebelum navigasi |
| Sesi terpisah | browser.createBrowserContext({ proxyServer }): satu konteks per sesi |
| SOCKS5 | Tidak dengan autentikasi di Chrome: gunakan port HTTP |
| Menghemat traffic | page.setRequestInterception(true) dan batalkan gambar, font, dan media |
Bagaimana cara saya mengatur satu proxy yang diautentikasi?
Ini pola minimal. Blok try … finally menutup Chrome meskipun navigasi gagal, penting di server di mana browser yatim menumpuk.
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();
}Bagaimana cara menjalankan beberapa sesi atau negara dalam satu browser?
Buat satu konteks browser per sesi. Sebuah konteks adalah profil terisolasi dengan cookie, cache, dan status jaringan sendiri, jadi kredensial yang Anda berikan pada satu konteks tidak bocor ke yang lain. Beri setiap konteks username dengan negara atau ID sesi sendiri.
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();
}Kenapa Puppeteer menunjukkan 407 atau ERR_TUNNEL_CONNECTION_FAILED?
Karena Chrome tidak mengirim kredensial, atau salah. Periksa tiga hal:
page.authenticate()dijalankan sebelumgotopertama pada halaman itu.- Flag
--proxy-serveratauproxyServerhanya berisi skema, host, dan port, tanpa bagianuser:pass@. - Username tidak ada salah ketik pada bagian targetnya: coba dengan curl dulu, seperti pada halaman 407.
Jika curl berhasil dengan username dan password yang sama tapi Puppeteer gagal, baca ERR_TUNNEL_CONNECTION_FAILED.
Berapa biaya traffic untuk sebuah halaman Puppeteer?
Semua yang diunduh Chrome dikenai biaya: HTML, skrip, gaya, gambar, font, dan panggilan API yang dilakukan halaman. HTTP Archive Web Almanac 2025 mengukur rata-rata bobot halaman 2.164 KB di mobile dan 2.412 KB di desktop. Memblokir gambar, font, dan media dengan intersepsi permintaan biasanya menurunkannya ke beberapa ratus kilobyte, dan mengembalikan respons cache untuk skrip berulang semakin menghemat. Gunakan rotating proxy seluler 4G hanya untuk halaman yang membutuhkannya: traffic seluler 4G biaya US$1,50/GB mulai 5 GB, proxy residensial US$0,50/GB mulai 50 GB.
Puppeteer dan proxy: pertanyaan
Bisakah saya mengisi username dan password dalam --proxy-server?
Tidak. Chrome mengabaikan kredensial dalam flag --proxy-server, dan permintaan HTTPS pertama kemudian gagal dengan 407 tersembunyi di balik ERR_TUNNEL_CONNECTION_FAILED. Masukkan hanya http://host:port di flag dan kirim kredensial dengan page.authenticate() di setiap halaman baru.
Bagaimana cara saya merotasi IP antar halaman di Puppeteer?
Buka setiap halaman di konteks browser baru, atau beri setiap halaman username tanpa ID sesi. Konteks baru membuka koneksi baru, dan setiap koneksi biasanya mendapat exit proxy residensial berbeda. Dalam satu halaman, Chrome menggunakan ulang koneksi, jadi permintaan ke situs yang sama sering berbagi exit sampai koneksi ditutup.
Apakah page.authenticate() bekerja dengan intersepsi permintaan?
Ya. Puppeteer menangani tantangan autentikasi proxy sendiri, dan handler intersepsi Anda hanya perlu memanggil continue() atau abort() pada setiap permintaan. Atur authenticate() terlebih dahulu, lalu aktifkan intersepsi, seperti contoh pertama.
Haruskah saya menggunakan plugin stealth puppeteer-extra dengan proxy?
Kami tidak mendokumentasikan atau mendukung alat untuk menyembunyikan automasi atau mengalahkan deteksi bot. Tujuannya untuk melewati penyaringan pengunjung otomatis oleh situs, yang tidak diizinkan oleh Acceptable Use Policy kami. Render halaman publik secara sopan dan gunakan API resmi bila tersedia.
Chrome mana yang digunakan Puppeteer dengan proxy?
Versi Puppeteer terbaru mengunduh build Chrome for Testing yang cocok dan menggunakannya secara default. Flag proxy dan page.authenticate() bekerja sama seperti di Chrome biasa. Jika Anda mengarahkan Puppeteer ke Chrome Anda sendiri dengan executablePath, pastikan browser itu selalu diperbarui.
Jalankan Puppeteer melalui IP proxy residensial
US$5,94 untuk 10 GB, US$0,50/GB dari 50 GB.