Entrega automática tras confirmar el pago · IP dedicado · Soporte por ticket en el panel Pago local según tu país · Precios en dólares (USD)
ProxyBox
Automatización

Proxy en Playwright, Puppeteer y Scrapy

Cómo autenticar un proxy HTTP en Playwright, Puppeteer y Scrapy: server, username y password, qué no poner en la URL de Chromium y cómo validar la salida.

3 min de lectura Actualizado el 26 de septiembre de 2026

La recopilación de datos y las pruebas de páginas usan el mismo producto de red; lo que cambia es la API de la herramienta. Esta guía cubre tres de las más usadas. Para cuentas con sesión iniciada, vuelve a las guías de AdsPower o de n8n. Para Selenium, mira proxy en Selenium; para peticiones sin navegador, proxy en Python. Playwright tiene además una guía propia más completa: proxy en Playwright.

Credenciales: host, puerto HTTP, usuario y contraseña en el panel. Valídalas antes con la prueba con cURL.

Playwright

La API oficial acepta el proxy al lanzar el navegador, con usuario y contraseña incluidos, sin trucos en la URL.

import { chromium } from 'playwright'

const browser = await chromium.launch({
  proxy: {
    server: 'http://p1.ejemplo.com:8000',
    username: 'tu-usuario',
    password: 'tu-contrasena',
  },
})

const page = await browser.newPage()
await page.goto('https://api.ipify.org?format=json')
console.log(await page.textContent('body'))
await browser.close()

SOCKS5: Playwright acepta server: 'socks5://p1.ejemplo.com:1080', pero Chromium no admite usuario y contraseña en un proxy SOCKS5. Con credencial, usa HTTP. Si cada pestaña necesita una IP distinta, usa contextos aislados (browser.newContext({ proxy: … })), explicados en la guía de Playwright.

Puppeteer

Al Chrome de Puppeteer no hay que pasarle http://user:pass@host. Separa el servidor de la autenticación:

import puppeteer from 'puppeteer'

const browser = await puppeteer.launch({
  args: ['--proxy-server=http://p1.ejemplo.com:8000'],
})

const page = await browser.newPage()
await page.authenticate({
  username: 'tu-usuario',
  password: 'tu-contrasena',
})

await page.goto('https://api.ipify.org?format=json')
console.log(await page.content())
await browser.close()

Si authenticate no funciona en algún flujo (PDF, worker), usa proxy-chain como en la guía de WPPConnect: el navegador habla con un proxy local sin contraseña.

Scrapy

Scrapy no lanza Chrome por defecto. La URL con usuario y contraseña en request.meta es el camino documentado:

# settings.py: opcional, valor por defecto para todas las peticiones
# DOWNLOADER_MIDDLEWARES ya incluye HttpProxyMiddleware

# en el spider
def start_requests(self):
    yield scrapy.Request(
        "https://api.ipify.org?format=json",
        meta={
            "proxy": "http://tu-usuario:[email protected]:8000",
        },
    )

Rotación: un middleware propio elige la URL del proxy en cada petición. No apuntes el crawler al mismo ISP residencial que usas en el Business Manager. Usa residencial por GB (IP de Brasil) o IPv6 cuando el sitio de destino acepta IPv6.

Respeta robots.txt, los términos de cada sitio y nuestra política de uso aceptable.

Lo que el proxy no resuelve

El proxy cambia la IP de salida. No resuelve CAPTCHAs, no cambia la huella digital del navegador automatizado ni hace que un sitio que prohíbe la recopilación automática pase a permitirla.

Después de configurar

Preguntas frecuentes

¿Puedo pasar usuario:contraseña en la URL de --proxy-server?
En Chromium suele fallar. Playwright tiene los campos username y password. Puppeteer usa page.authenticate o proxy-chain. Scrapy usa la URL completa en el meta porque no es Chrome.
¿Sirve la misma IP que uso para cuentas publicitarias?
No mezcles la recopilación de datos y el Business Manager en la misma dirección. Para el crawler, residencial por GB (IP de Brasil) o IPv6 en lote; para cuentas, IPv4 o ISP fija.
¿SOCKS5 en estas tres herramientas?
Scrapy y las bibliotecas HTTP funcionan bien con SOCKS mediante un middleware adicional. Playwright acepta socks5 en server, pero sin usuario y contraseña en Chromium. Puppeteer con SOCKS y contraseña es el caso más frágil. Empieza por HTTP.

¿Te atascaste en algún paso?

Envíanos una captura del error por WhatsApp o abre un ticket en el panel. En la mayoría de los casos el problema es un campo intercambiado entre host y puerto.

¿Tienes dudas? Escríbenos por WhatsApp