Respuesta rápida
¿Cómo uso proxies con Playwright, Puppeteer y Selenium?
Apunta el navegador a http://gw.namelessproxy.com:7777 e inicia sesión con tu usuario y contraseña de proxy. Nameless Proxy, un proveedor de proxy residencial sin KYC y con privacidad primero, funciona con la opción proxy de Playwright, la page.authenticate() de Puppeteer y Selenium mediante un reenviador local. Un ID de sesión por contexto de navegador mantiene una IP fija por perfil. El tráfico residencial empieza en 0,53 US$/GB. Sin KYC — sin ID, sin selfie, sin documentos. Paga con criptomonedas.
Configuración rápida del navegador
| Servidor proxy | http://gw.namelessproxy.com:7777 (puerto HTTP) |
|---|---|
| Playwright | Opción proxy con servidor, usuario y contraseña, por navegador o por contexto |
| Puppeteer | Bandera --proxy-server más page.authenticate() |
| Selenium | Reenviador local que añade las credenciales, o una lista blanca de IP |
| Una IP por perfil | Un ID de sesión por contexto, hasta por 60 minutos |
| Segmentación | En el nombre de usuario: USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes} |
¿Qué puerto de proxy necesitan los navegadores?
Usa el puerto HTTP, 7777. Transporta HTTPS mediante túneles CONNECT, que todos los navegadores soportan. Chromium no soporta SOCKS5 con usuario y contraseña, así que el puerto SOCKS5 solo sirve para herramientas que gestionan el login SOCKS5 por sí mismas.
Un navegador descarga imágenes, fuentes y scripts, por lo que usa mucho más tráfico por página que un cliente HTTP simple. Bloquea recursos pesados que no necesites; el tráfico se factura por GB decimal.
¿Cómo configuro un proxy en Playwright?
Pasa un objeto proxy con server, username y password. Configúralo en cada contexto de navegador para que cada contexto tenga su propio país y sesión persistente en un solo proceso de navegador. Haz coincidir locale y timezone_id con el país de salida para que la página vea un visitante consistente.
# pip install playwright && playwright install chromium
import uuid
from playwright.sync_api import sync_playwright
SERVER = "http://gw.namelessproxy.com:7777" # HTTP port: browsers
USERNAME, PASSWORD = "USERNAME", "PASSWORD"
def proxy_for(country, city, ttl=30):
"""One sticky session per browser context."""
session = uuid.uuid4().hex[:10]
return {
"server": SERVER,
"username": f"{USERNAME}-country-{country}-city-{city}-session-{session}-ttl-{ttl}",
"password": PASSWORD,
}
with sync_playwright() as p:
# Placeholder launch proxy: some Chromium builds need one before contexts
# can set their own. It is never used when every context sets a proxy.
browser = p.chromium.launch(proxy={"server": "http://per-context"})
for country, city, tz in [("ae", "dubai", "Asia/Dubai"), ("sa", "riyadh", "Asia/Riyadh")]:
context = browser.new_context(proxy=proxy_for(country, city), locale="ar", timezone_id=tz)
page = context.new_page()
page.goto("https://api.ipify.org")
print(country, page.inner_text("body"))
context.close()
browser.close()// npm i playwright && npx playwright install chromium
const { chromium } = require('playwright');
const crypto = require('crypto');
const server = 'http://gw.namelessproxy.com:7777';
const proxyFor = (country, city, ttl = 30) => ({
server,
username: `USERNAME-country-${country}-city-${city}-session-${crypto.randomBytes(5).toString('hex')}-ttl-${ttl}`,
password: 'PASSWORD',
});
(async () => {
const browser = await chromium.launch({ proxy: { server: 'http://per-context' } });
const context = await browser.newContext({ proxy: proxyFor('eg', 'cairo') });
const page = await context.newPage();
await page.goto('https://api.ipify.org');
console.log(await page.textContent('body'));
await browser.close();
})();¿Cómo configuro un proxy en Puppeteer?
Lanza Chrome con --proxy-server y llama a page.authenticate() antes de la primera navegación. Chrome ignora las credenciales escritas en la bandera, así que la página responde al desafío 407 del proxy. Cada página puede autenticarse con un usuario diferente, por lo que cada página puede tener su propio país y sesión. Las versiones recientes de Puppeteer también aceptan una opción proxyServer en browser.createBrowserContext().
// npm i puppeteer
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://gw.namelessproxy.com:7777'],
});
const page = await browser.newPage();
// Chrome ignores credentials in --proxy-server, so answer the 407 challenge per page
await page.authenticate({
username: 'USERNAME-country-ng-city-lagos-session-x7k2p9-ttl-30',
password: 'PASSWORD',
});
await page.goto('https://api.ipify.org');
console.log(await page.evaluate(() => document.body.innerText));
await browser.close();
})();¿Cómo uso un proxy autenticado con Selenium?
Ejecuta un pequeño reenviador local que añade tus credenciales y apunta Chrome a él. La bandera --proxy-server de Chrome no acepta usuario ni contraseña, y Selenium no tiene opción para rellenar el login del proxy. El reenviador usa pproxy: escucha en tu máquina sin contraseña y reenvía al gateway con tu usuario, incluyendo el target. Ejecuta un reenviador por sesión persistente, cada uno en su propio puerto local.
Si tu máquina tiene una IP pública fija, puedes incluirla en la lista blanca en el área de cliente y pasar la dirección del gateway directamente a --proxy-server. El paquete selenium-wire también gestionaba el login de proxy, pero ya no se mantiene.
pip install pproxy selenium
# Local forwarder: no auth on 127.0.0.1:8899, adds your credentials upstream (#user:pass)
pproxy -l http://127.0.0.1:8899 \
-r "http://gw.namelessproxy.com:7777#USERNAME-country-ke-city-nairobi-session-k3m9q1-ttl-30:PASSWORD"# Selenium 4.6+ downloads the matching chromedriver itself (Selenium Manager)
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8899") # the local forwarder
driver = webdriver.Chrome(options=options)
try:
driver.get("https://api.ipify.org")
print(driver.find_element(By.TAG_NAME, "body").text)
finally:
driver.quit()¿Cómo mantengo una IP por perfil de navegador?
Dale a cada contexto de navegador su propio ID de sesión y un TTL, y conserva ese ID durante la vida del perfil. El contexto entonces sale desde la misma IP residencial mientras dure el TTL (hasta por 60 minutos). Si el dispositivo detrás de la IP se desconecta, inicia un nuevo ID de sesión.
Cuando un perfil debe mantener una IP por días, un puerto dedicado 4G/5G es mejor: la IP permanece hasta que la rotas. Usa proxies residenciales para trabajos legítimos como verificación de anuncios, QA y gestión de cuentas de clientes. Las cuentas falsas y la evasión de baneos están prohibidas por la Política de Uso Aceptable.
Preguntas frecuentes
¿Por qué Chrome ignora el usuario y contraseña en --proxy-server?
La bandera de línea de comandos de Chrome solo acepta esquema, host y puerto; no lee credenciales de ahí. El navegador espera el desafío 407 del proxy. Playwright responde desde su opción proxy y Puppeteer desde page.authenticate(). Selenium no tiene ese gancho para login de proxy, por eso necesita un reenviador local o una lista blanca de IP.
¿Puedo usar el puerto SOCKS5 con Playwright o Puppeteer?
No con usuario y contraseña: Chromium no soporta la autenticación de proxy SOCKS5. Usa el puerto HTTP, 7777, que lleva HTTPS a través de túneles CONNECT y soporta login. El puerto SOCKS5, 7778, es para herramientas que manejan la autenticación SOCKS5 por sí mismas, como curl o Python con socks5h://.
¿Cómo asigno a cada contexto del navegador un país diferente?
Construye el nombre de usuario del proxy por contexto: USERNAME-country-ae-city-dubai-session-… para un contexto y USERNAME-country-sa-city-riyadh-session-… para otro. En Playwright, pásalo en new_context(proxy=…). En Puppeteer, abre una página por país y llama a page.authenticate() con cada usuario. Un proceso de navegador puede servir muchos países así.
¿Cómo reduzco el tráfico que usa un navegador sin interfaz?
Bloquea lo que no necesitas. En Playwright, page.route() puede abortar solicitudes de imágenes, fuentes y medios; en Puppeteer, usa la interceptación de solicitudes. Reutiliza un contexto para varias páginas del mismo sitio para que funcione la caché. El tráfico se factura por GB decimal, y el área de cliente muestra el uso diario, así que mide antes y después.
¿Por qué un sitio sigue mostrando el país incorrecto?
La IP es solo una señal. Los sitios también leen el idioma del navegador, la zona horaria y a veces la API de Geolocalización. Configura locale y timezone_id en el contexto de Playwright para que coincidan con el país de salida, por ejemplo Asia/Dubai para los EAU. También borra las cookies que el sitio haya guardado en visitas anteriores desde otro país.
¿Sigue siendo buena idea usar selenium-wire para añadir login de proxy?
Funcionaba, pero el proyecto ya no se mantiene, por lo que puede romperse con nuevas versiones de Chrome o Selenium. Un reenviador local como pproxy hace un solo trabajo, añadir credenciales a un proxy ascendente, y funciona con cualquier navegador. Añadir la IP de tu servidor a la lista blanca en el área de cliente elimina la necesidad de credenciales por completo.
Dale a cada perfil de navegador su propia IP
Proxies residenciales de 0,53 US$/GB, puertos dedicados 4G/5G de $2.63/día. Sin KYC — sin ID, sin selfie, sin documentos.