# Autenticación de proxy en Puppeteer con IPs residenciales y proxies móviles 4G

> Autenticación de proxy en Puppeteer: --proxy-server más page.authenticate(), una sesión por contexto de navegador, interceptación de solicitudes para ahorrar tráfico.

- URL: https://crawlrelay.com/es/docs/puppeteer/
- Última actualización: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Chrome toma la dirección del proxy de un flag de lanzamiento y las credenciales de page.authenticate(). Usa un contexto de navegador por sesión para que las credenciales nunca se filtren entre trabajos.

**Respuesta rápida — ¿Cómo uso un proxy autenticado en Puppeteer?**

Inicia Chrome con `--proxy-server=http://gw.crawlrelay.com:7777`, luego llama a `page.authenticate({ username, password })` antes de la primera `goto`. Chrome ignora las credenciales escritas en el flag. Los proxies residenciales CrawlRelay leen el país y la sesión persistente desde el nombre de usuario, así cada página o contexto puede tener su propia salida. El tráfico cuesta 0,50 US$/GB desde 50 GB. Se paga con criptomonedas, sin KYC.

## Configuración de Puppeteer en resumen

| Atributo | Valor |
| --- | --- |
| Dirección del proxy | `--proxy-server=http://gw.crawlrelay.com:7777` en `args`, o `proxyServer` en un contexto de navegador |
| Credenciales | `await page.authenticate({ username, password })` antes de navegar |
| Sesiones separadas | `browser.createBrowserContext({ proxyServer })`: un contexto por sesión |
| SOCKS5 | No con autenticación en Chrome: usa el puerto HTTP |
| Ahorrando tráfico | `page.setRequestInterception(true)` y aborta imágenes, fuentes y medios |

## ¿Cómo configuro un solo proxy autenticado?

Este es el patrón mínimo. El bloque `try … finally` cierra Chrome incluso si una navegación falla, lo cual es importante en servidores donde se acumulan navegadores huérfanos.

*Node.js (módulo ES): un navegador, una salida*

```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();
}
```

## ¿Cómo ejecuto varias sesiones o países en un mismo navegador?

Crea un contexto de navegador por sesión. Un contexto es un perfil aislado con sus propias cookies, caché y estado de red, así que las credenciales que das a un contexto no se filtran a otro. Dale a cada contexto un nombre de usuario con su propio país o ID de sesión.

*Node.js: un contexto por sesión persistente*

```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();
}
```

## ¿Por qué Puppeteer muestra 407 o ERR_TUNNEL_CONNECTION_FAILED?

Porque Chrome no envió credenciales o envió las equivocadas. Verifica tres cosas:

1. `page.authenticate()` se ejecuta **antes** de la primera `goto` en esa página.
2. El flag `--proxy-server` o `proxyServer` contiene solo el esquema, host y puerto, sin parte de `user:pass@`.
3. El nombre de usuario no tiene errores en su parte de destino: pruébalo primero con curl, como se muestra en la página [407](https://crawlrelay.com/es/docs/errors/407-proxy-authentication-required/).

Si curl funciona con el mismo usuario y contraseña y Puppeteer falla, lee [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/es/docs/errors/err-tunnel-connection-failed/).

## ¿Cuánto tráfico cuesta una página en Puppeteer?

Todo lo que Chrome descarga se cobra: HTML, scripts, estilos, imágenes, fuentes y llamadas al API que la página hace. El HTTP Archive Web Almanac 2025 midió un peso medio de página de 2,164 KB en móviles y 2,412 KB en escritorio. Bloquear imágenes, fuentes y medios con interceptación de solicitudes generalmente reduce eso a unos pocos cientos de kilobytes, y devolver respuestas cacheadas para scripts repetidos lo reduce aún más. Usa [proxies móviles 4G giratorios](https://crawlrelay.com/es/mobile-proxies/) solo para las páginas que los necesiten: el tráfico móvil cuesta 1,50 US$/GB desde 5 GB, el proxy residencial 0,50 US$/GB desde 50 GB.

## Puppeteer y proxies: preguntas

### ¿Puedo poner el nombre de usuario y contraseña en --proxy-server?

No. Chrome ignora las credenciales en el flag `--proxy-server`, y la primera solicitud HTTPS falla con un 407 oculto tras `ERR_TUNNEL_CONNECTION_FAILED`. Pon solo el proxy residencial `http://host:port` en el flag y pasa las credenciales con `page.authenticate()` en cada página nueva.

### ¿Cómo rotar la IP entre páginas en Puppeteer?

Abre cada página en un nuevo contexto de navegador, o da a cada página un nombre de usuario sin ID de sesión. Un contexto nuevo abre nuevas conexiones, y cada conexión nueva usualmente obtiene una salida residencial diferente. Dentro de una página, Chrome reutiliza conexiones, así que las solicitudes al mismo sitio suelen compartir salida hasta que la conexión se cierra.

### ¿Funciona page.authenticate() con interceptación de solicitudes?

Sí. Puppeteer maneja el desafío de autenticación del proxy por sí mismo, y tu manejador de interceptación solo necesita llamar a `continue()` o `abort()` en cada solicitud. Configura `authenticate()` primero, luego activa la interceptación, como en el primer ejemplo.

### ¿Debo usar plugins de stealth de puppeteer-extra con proxies?

No documentamos ni apoyamos herramientas destinadas a ocultar automatización o evadir detección de bots. Su propósito es superar la decisión de un sitio de filtrar visitantes automatizados, lo que nuestra [Política de Uso Aceptable](https://crawlrelay.com/es/acceptable-use/) no permite. Renderiza páginas públicas con un ritmo cortés y usa APIs oficiales cuando los sitios las ofrecen.

### ¿Qué Chrome usa Puppeteer con el proxy?

Las versiones recientes de Puppeteer descargan una versión Chrome for Testing compatible y la usan por defecto. Los flags de proxy y `page.authenticate()` funcionan igual que en Chrome normal. Si apuntas Puppeteer a tu propio Chrome con `executablePath`, mantén ese navegador actualizado.

**Ejecuta Puppeteer a través de IPs residenciales** 5,94 US$ para 10 GB, 0,50 US$/GB de 50 GB. [Ver precios](https://crawlrelay.com/es/pricing/) · [Guía Node.js](https://crawlrelay.com/es/docs/node/)

---

CrawlRelay: CrawlRelay es un servicio de proxies residenciales rotativos y proxies móviles 4G/5G para desarrolladores, ideal para scrapers y pipelines de datos de IA: tráfico prepago sin vencimiento desde 0,50 US$/GB, pagado con criptomonedas, sin subir documentos de identidad. Sin KYC — sin ID, sin selfie, sin documentos. Paga con criptomonedas.
