Guía de Puppeteer · 2 min de lectura

Configuración de proxy Puppeteer con autenticación

Puppeteer toma el servidor proxy como una bandera de lanzamiento, pero el nombre de usuario y la contraseña van a otro lugar completamente — a través de page.authenticate(). Aquí está el patrón correcto para proxies s4m autenticados, con código completo de Node.

Por qué la bandera sola no es suficiente

Chromium — the browser Puppeteer drives — accepts a proxy through the --proxy-server command-line flag. The catch is that Chromium's flag format does not accept credentials inline: you cannot write --proxy-server=http://USER:PASS@host:3128 and expect it to work. When the proxy challenges for authentication, Chromium raises a native auth prompt that a headless browser cannot answer on its own.

Puppeteer's answer is page.authenticate({ username, password }). You pass the bare host and port to the launch flag, then hand the credentials to the page, and Puppeteer responds to the proxy's 407 Proxy Authentication Required challenge for you. With s4m that means launching with --proxy-server=http://proxy.s4m.online:3128 and authenticating with your USER:PASS. The HTTP endpoint (port 3128) is the right one here — Chromium's proxy flag speaks HTTP and SOCKS, but authenticated SOCKS5 with a browser is fiddly, so HTTP is the reliable choice. See the proxy overview and the proxy authentication guide.

Lanzamiento autenticado de Puppeteer

El host del proxy va en la bandera de lanzamiento; USER:PASS pasa a través de page.authenticate(). Reemplaza las credenciales antes de ejecutar.

javascript
// npm install puppeteer
const puppeteer = require("puppeteer");

const HOST = "proxy.s4m.online";
const PORT = 3128;             // HTTP proxy endpoint
const USER = "USER";
const PASS = "PASS";

(async () => {
  const browser = await puppeteer.launch({
    headless: "new",
    args: [
      `--proxy-server=http://${HOST}:${PORT}`,
      // credentials are NOT allowed here — see page.authenticate below
      "--no-sandbox",
    ],
  });

  const page = await browser.newPage();

  // This answers the proxy's 407 challenge:
  await page.authenticate({ username: USER, password: PASS });

  await page.goto("https://api.ipify.org?format=json", {
    waitUntil: "networkidle0",
    timeout: 30000,
  });
  console.log("Exit IP:", await page.evaluate(() => document.body.innerText));

  await browser.close();
})();

Cosas que confunden a la gente

Los errores que se convierten en una página en blanco o un 407.

Las credenciales van a la página

Nunca pongas USER:PASS en --proxy-server; Chromium lo ignora. Siempre llama a page.authenticate() antes de tu primera navegación, una vez por página.

Usa el punto final HTTP

SOCKS5 autenticado en un navegador es poco confiable. Apunta --proxy-server a http://proxy.s4m.online:3128 y deja que page.authenticate maneje el inicio de sesión.

Autenticarse antes de ir a

Llama a page.authenticate() antes de page.goto(), de lo contrario, la primera solicitud llega al proxy sin credenciales y devuelve 407.

Un contexto, una identidad

Cada contexto de navegador lleva su propia autenticación. Para múltiples identidades, lanza contextos separados en lugar de re-autenticar una página compartida.

Bloqueos, huellas digitales y honestidad

Un proxy oculta tu IP; no oculta que estás automatizando un navegador. Los sistemas modernos anti-bot también analizan las propiedades del navegador, el tiempo y las huellas digitales de TLS. Si un objetivo marca Chromium sin cabeza, un proxy por sí solo no lo solucionará; puede que necesites configuraciones realistas de viewport y User-Agent, y un ritmo similar al humano, y aun así, algunos sitios simplemente están fuera de los límites para la automatización.

Sé honesto sobre el tipo de proxy también: los proxies s4m son de centro de datos, lo cual es perfecto para pruebas, monitoreo y sitios moderadamente defendidos, pero los objetivos fuertemente defendidos pueden bloquear rangos de centros de datos. Cuando necesites una salida estable para un inicio de sesión o una lista de permitidos, añade una IP personal dedicada. ¿Prefieres Playwright? El patrón es casi idéntico; consulta la guía de proxy de Playwright. Verifica tu salida con las herramientas y prototipa contra la lista de proxies gratuitos.

FAQ

Preguntas, respondidas

¿Por qué mi solicitud de Puppeteer devuelve 407?

Porque el proxy está desafiando la autenticación y no has respondido. Llama a page.authenticate({ username, password }) antes de tu primer page.goto() — las credenciales en la bandera --proxy-server son ignoradas por Chromium.

¿Puede Puppeteer usar un proxy SOCKS5?

La bandera de proxy de Chromium puede apuntar a SOCKS, pero SOCKS5 autenticado en un navegador es poco confiable. Usa el punto final HTTP en el puerto 3128 con page.authenticate() para una configuración confiable.

¿Necesito autenticar cada página?

Sí — llama a page.authenticate() una vez por página (o por contexto de navegador) antes de navegar. Cada contexto lleva sus propias credenciales.

¿Un proxy me detendrá de ser detectado como un bot?

No. Un proxy solo cambia tu IP. Los sistemas anti-bot también inspeccionan huellas dactilares del navegador y comportamiento, por lo que un proxy es necesario pero no suficiente contra la detección agresiva.

Ejecutar Chrome sin cabeza detrás de un proxy

Proxies de datacenter autenticados en proxy.s4m.online, listos para page.authenticate() de Puppeteer. Pago por uso, con una IP dedicada opcional para inicios de sesión estables.

Las personas encontraron esta página buscando

Frases de búsqueda reales que esta página responde — los enlaces abren la página que las cubre en profundidad.