Configuración de proxy en Puppeteer
Añade proxies rotativos al scraping con Chrome headless en Puppeteer.
Puppeteer controla Chrome headless para hacer scraping de páginas con mucho JavaScript. Establece el proxy al lanzar el navegador - todas las páginas que abra esta instancia del navegador se enrutarán por SotaProxy.
Guía de configuración
Instala Puppeteer
npm install puppeteerPuppeteer instala automáticamente una versión integrada de Chromium.
Lanzar con proxy
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
// Authenticate the proxy
await page.authenticate({
username: 'YOUR_USERNAME',
password: 'YOUR_PASSWORD',
});
await page.goto('https://httpbin.org/ip');
const content = await page.content();
console.log(content);
await browser.close();
})();Establece --proxy-server en los argumentos de lanzamiento y llama a page.authenticate() con tus credenciales. Puppeteer requiere establecer las credenciales por página, no por navegador.
Geo-segmentación
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
await page.authenticate({
username: 'YOUR_USERNAME_c_FR', // French IP
password: 'YOUR_PASSWORD',
});Añade _c_XX al nombre de usuario en page.authenticate() para segmentar un país concreto.
Automatízalo con la API de SotaProxy
Todo lo anterior funciona sin abrir el panel. Con una clave API, Puppeteer puede obtener credenciales de proxy actualizadas, comprar nuevos proxies y renovar los que caducan - directamente desde el código.
const API = 'https://api.sotaproxy.com/api/v1'
const H = { Authorization: 'Bearer sk_live_your_key' }
// Every active proxy on your account - no copy-pasting credentials
const { proxies } = await (await fetch(`${API}/proxies`, { headers: H })).json()
const p = proxies[0]
const proxyUrl = `http://${p.login}:${p.password}@${p.ip}:${p.portHttp}`
// Buy more when you scale (price-check first with POST /quote)
await fetch(`${API}/orders`, {
method: 'POST',
headers: { ...H, 'Content-Type': 'application/json', 'Idempotency-Key': 'my-unique-order-id' },
body: JSON.stringify({ product: 'ipv4', countryId: 565, periodId: '1m', quantity: 5 }),
})Why Puppeteer needs two steps
Chromium takes the proxy from a launch flag, and that flag has no place for credentials. Authentication happens afterwards, per page:
The proxy is set for the whole browser process, so one browser equals one address. Run several browsers when you need several identities in parallel.
One browser per address
Launch with the endpoint, then call page.authenticate before the first navigation:
Node: browser per identity
const puppeteer = require('puppeteer');
async function browserFor(sessionId) {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy.sotaproxy.com:10000'],
});
const page = await browser.newPage();
await page.authenticate({
username: `login_c_US_s_${sessionId}_ttl_1h`,
password: 'password',
});
return { browser, page };
}
const { page } = await browserFor(7);
await page.goto('https://example.com', { timeout: 30000 });- Call authenticate on every new page, not once per browser. A page opened later starts unauthenticated and the first request comes back 407.
- Use a separate user data directory per browser. Otherwise profiles share cookies and the address separation buys you nothing.
- Close browsers you are done with. Each one holds an open connection to our endpoint, and a leak here looks like a rate limit later.
- For many parallel identities, Playwright contexts are cheaper than Puppeteer browsers. Consider it when the count passes about ten.
Puppeteer specifics
Credentials in the launch flag do nothing
--proxy-server accepts a host and port only. Anything before the @ is dropped silently and you get 407.
One proxy per browser process
There is no per-context proxy. Rotating means launching another browser, which is why heavy rotation belongs in Playwright.
authenticate applies per page
New tabs and popups need their own call, and OAuth flows that open a popup break without it.
Headless detection is a separate problem
The proxy fixes the address, not the fingerprint. Pair it with stealth measures or an antidetect browser for account work.
Notas y consejos
- •Puppeteer requiere page.authenticate() para cada página nueva. Playwright maneja la autenticación a nivel de navegador (más simple para sesiones multipágina).
- •Considera puppeteer-extra y puppeteer-extra-plugin-stealth para reducir la detección por huella digital.
- •Para scraping de alto volumen, considera Playwright - maneja la configuración de proxy multicontexto de forma más limpia.
FAQ
¿Cuál es la diferencia entre Puppeteer y Playwright para el uso de proxy?
Playwright admite la configuración de proxy a nivel de contexto del navegador (más limpio para configuraciones multisesión). Puppeteer requiere autenticación por página. Ambos funcionan con SotaProxy.
¿Puede Puppeteer manejar los desafíos CAPTCHA?
Puppeteer no resuelve CAPTCHAs de forma nativa. Los proxies residenciales reducen la frecuencia de CAPTCHA. Para los desafíos restantes, integra un servicio de resolución de CAPTCHA (2Captcha, Anti-Captcha).
Integraciones relacionadas
Obtén tus credenciales de proxy
Regístrate, recarga tu saldo y copia tu endpoint en Puppeteer. Tarda menos de 5 minutos.
Empezar