Kort antwoord
Hoe gebruik ik een geverifieerde proxy in Puppeteer?
Start Chrome met --proxy-server=http://gw.crawlrelay.com:7777, en roep daarna page.authenticate({ username, password }) aan vóór de eerste goto. Chrome negeert credentials die in de vlag staan. CrawlRelay residentiële proxy's lezen het land en de sticky sessie uit de gebruikersnaam, dus elke pagina of context kan zijn eigen exit hebben. Verkeer kost US$ 0,50/GB vanaf 50 GB. Betaald in crypto, zonder KYC.
Puppeteer setup in één oogopslag
| Proxyadres | --proxy-server=http://gw.crawlrelay.com:7777 binnen args, of proxyServer op een browsercontext |
|---|---|
| Credentials | await page.authenticate({ username, password }) vóór navigatie |
| Gescheiden sessies | browser.createBrowserContext({ proxyServer }): één context per sessie |
| SOCKS5 | Niet met authenticatie in Chrome: gebruik de HTTP-poort |
| Verkeer besparen | page.setRequestInterception(true) en images, fonts en media afbreken |
Hoe stel ik een enkele geauthenticeerde proxy in?
Dit is het minimale patroon. Het try … finally blok sluit Chrome zelfs als een navigatie mislukt, wat belangrijk is op servers waar verweesde browsers zich opstapelen.
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();
}Hoe start ik meerdere sessies of landen in één browser?
Maak één browsercontext per sessie. Een context is een geïsoleerd profiel met eigen cookies, cache en netwerkstatus, dus de credentials die je aan een context geeft lekken niet naar een andere. Geef elke context een gebruikersnaam met een eigen land of sessie-ID.
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();
}Waarom toont Puppeteer een 407 of ERR_TUNNEL_CONNECTION_FAILED?
Omdat Chrome geen credentials stuurde, of de verkeerde. Controleer drie dingen:
page.authenticate()wordt uitgevoerd vóór de eerstegotoop die pagina.- De
--proxy-servervlag ofproxyServerbevat alleen het schema, host en poort, zonderuser:pass@deel. - De gebruikersnaam heeft geen typefout in het doelgedeelte: test het eerst met curl, zoals getoond op de 407 pagina.
Als curl slaagt met dezelfde gebruikersnaam en wachtwoord maar Puppeteer faalt nog steeds, lees dan ERR_TUNNEL_CONNECTION_FAILED.
Hoeveel verkeer kost een Puppeteer pagina?
Alles wat Chrome downloadt wordt gefactureerd: de HTML, scripts, styles, afbeeldingen, fonts en de API-aanroepen die de pagina doet. The HTTP Archive Web Almanac 2025 mat een mediane paginagrootte van 2.164 KB mobiel en 2.412 KB desktop. Het blokkeren van afbeeldingen, fonts en media met request-interceptie verlaagt dat meestal tot een paar honderd kilobytes, en het teruggeven van cachede responses voor herhaalde scripts drukt het nog verder. Gebruik roterende mobiele IP's alleen voor de pagina's die ze nodig hebben: mobiel verkeer kost US$ 1,50/GB vanaf 5 GB, residentieel US$ 0,50/GB vanaf 50 GB.
Puppeteer en proxy's: vragen
Kan ik de gebruikersnaam en het wachtwoord in --proxy-server zetten?
Nee. Chrome negeert credentials in de --proxy-server vlag, en het eerste HTTPS-verzoek mislukt dan met een 407 verborgen achter ERR_TUNNEL_CONNECTION_FAILED. Zet alleen http://host:port in de vlag en geef de credentials mee met page.authenticate() op elke nieuwe pagina.
Hoe roteer ik het IP tussen pagina's in Puppeteer?
Open elke pagina in een nieuwe browsercontext, of geef elke pagina een gebruikersnaam zonder sessie-ID. Een nieuwe context opent nieuwe verbindingen, en elke verbinding krijgt meestal een andere residentiële exit. Binnen één pagina hergebruikt Chrome verbindingen, dus verzoeken naar dezelfde site delen vaak een exit tot de verbinding sluit.
Werkt page.authenticate() met request-interceptie?
Ja. Puppeteer handelt zelf de authenticatie-uitdaging van de proxy af, en jouw interceptie-handler hoeft alleen continue() of abort() aan te roepen op elk verzoek. Zet authenticate() eerst op, en schakel dan interceptie aan, zoals in het eerste voorbeeld.
Moet ik puppeteer-extra stealth plugins gebruiken met proxy's?
Wij documenteren of ondersteunen geen tools die automatisering verbergen of botdetectie omzeilen. Het doel is om langs een site's beslissing te komen om geautomatiseerde bezoekers te filteren, wat ons Acceptable Use Policy niet toestaat. Render openbare pagina's rustig en gebruik officiële API's waar beschikbaar.
Welke Chrome gebruikt Puppeteer bij de proxy?
Recente Puppeteer-versies downloaden standaard een bijpassende Chrome voor Testing build. De proxyvlaggen en page.authenticate() werken daarin hetzelfde als in reguliere Chrome. Gebruik je je eigen Chrome met executablePath, houd die browser dan up-to-date.
Run Puppeteer via residentiële IP's
US$ 5,94 voor 10 GB, US$ 0,50/GB van 50 GB.