Resposta rápida
Como usar proxies com Playwright, Puppeteer e Selenium?
Aponte o navegador para http://gw.namelessproxy.com:7777 e faça login com seu nome de usuário e senha do proxy. Nameless Proxy, um provedor de proxy residencial focado em privacidade e sem KYC, funciona com a opção proxy do Playwright, page.authenticate() do Puppeteer e Selenium via um encaminhador local. Um ID de sessão por contexto do navegador mantém um IP por perfil. Tráfego residencial começa em US$ 0,53/GB. Sem KYC — sem ID, sem selfie, sem documentos. Pague com cripto.
Configuração do navegador em resumo
| Servidor proxy | http://gw.namelessproxy.com:7777 (porta HTTP) |
|---|---|
| Playwright | Opção proxy com servidor, nome de usuário e senha, por navegador ou por contexto |
| Puppeteer | Flag --proxy-server mais page.authenticate() |
| Selenium | Encaminhador local que adiciona as credenciais, ou uma whitelist de IP |
| Um IP por perfil | Um ID de sessão por contexto, por até 60 minutos |
| Segmentação | No nome de usuário: USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes} |
Qual porta de proxy os navegadores precisam?
Use a porta HTTP, 7777. Ela transporta HTTPS via túneis CONNECT, que todo navegador suporta. Chromium não suporta SOCKS5 com nome de usuário e senha, então a porta SOCKS5 serve apenas para ferramentas que gerenciam login SOCKS5 por conta própria.
Um navegador baixa imagens, fontes e scripts, então usa muito mais tráfego por página do que um cliente HTTP simples. Bloqueie recursos pesados que você não precisa; o tráfego é cobrado por GB decimal.
Como configurar um proxy no Playwright?
Passe um objeto proxy com server, username e password. Defina em cada contexto do navegador para dar a cada contexto seu próprio país e sessão fixa em um único processo do navegador. Combine locale e timezone_id com o país de saída para que a página veja um 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();
})();Como configurar um proxy no Puppeteer?
Inicie o Chrome com --proxy-server e chame page.authenticate() antes da primeira navegação. O Chrome ignora as credenciais inseridas na flag, então a página responde ao desafio 407 do proxy. Cada página pode autenticar com um nome de usuário diferente, assim cada página pode ter seu próprio país e sessão. Versões recentes do Puppeteer também aceitam uma opção proxyServer em 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();
})();Como usar um proxy autenticado com Selenium?
Execute um pequeno encaminhador local que adiciona suas credenciais e aponte o Chrome para ele. A flag --proxy-server do Chrome não aceita nome de usuário nem senha, e o Selenium não tem opção para preencher o login do proxy. O encaminhador abaixo usa pproxy: ele escuta na sua máquina sem senha e encaminha para o gateway com seu nome de usuário, incluindo o target. Execute um encaminhador por sessão sticky, cada um em sua própria porta local.
Se sua máquina tem um IP público fixo, você pode liberá-lo na área do cliente e passar o endereço do gateway direto para --proxy-server. O pacote selenium-wire também lidava com login no proxy, mas não é mais mantido.
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()Como manter um IP por perfil de navegador?
Dê a cada contexto do navegador seu próprio ID de sessão e um TTL, e mantenha esse ID durante a vida do perfil. O contexto então sai pelo mesmo IP residencial enquanto o TTL durar (por até 60 minutos). Se o dispositivo por trás do IP ficar offline, inicie um novo ID de sessão.
Quando um perfil precisa manter um IP por dias, uma porta dedicada 4G/5G](/mobile-proxies/) é melhor: o IP fica até você rotacionar. Use proxies para trabalhos legítimos como verificação de anúncios, QA e gerenciamento de contas dos seus clientes. Contas falsas e evasão de banimento são proibidas pela Política de Uso Aceitável.
Perguntas frequentes
Por que o Chrome ignora o nome de usuário e senha em --proxy-server?
A flag de linha de comando do Chrome aceita apenas esquema, host e porta; não lê credenciais. O navegador espera pelo desafio 407 do proxy. O Playwright responde a ele pela opção proxy e o Puppeteer por page.authenticate(). O Selenium não tem esse recurso para login no proxy, por isso precisa de um encaminhador local ou whitelist de IP.
Posso usar a porta SOCKS5 com Playwright ou Puppeteer?
Não com nome de usuário e senha: o Chromium não suporta autenticação SOCKS5. Use a porta HTTP, 7777, que transporta HTTPS via túneis CONNECT e suporta login. A porta SOCKS5, 7778, é para ferramentas que gerenciam autenticação SOCKS5, como curl ou Python com socks5h://.
Como dar a cada contexto do navegador um país diferente?
Monte o nome de usuário do proxy por contexto: USERNAME-country-ae-city-dubai-session-… para um contexto e USERNAME-country-sa-city-riyadh-session-… para outro. No Playwright, passe isso em new_context(proxy=…). No Puppeteer, abra uma página por país e chame page.authenticate() com cada nome de usuário. Um processo do navegador pode servir vários países assim.
Como reduzir o tráfego usado por um navegador headless?
Bloqueie o que não precisa. No Playwright, page.route() pode abortar requisições de imagens, fontes e mídia; no Puppeteer, use interceptação de requisições. Reuse um contexto para várias páginas do mesmo site para que o cache funcione. O tráfego é cobrado por GB decimal, e a área do cliente mostra uso diário, então meça antes e depois.
Por que um site ainda mostra o país errado?
O IP é apenas um sinal. Sites também leem o idioma do navegador, o fuso horário e às vezes a API de Geolocalização. Configure locale e timezone_id no contexto do Playwright para combinar com o país de saída, por exemplo Asia/Dubai para os Emirados Árabes Unidos. Também limpe cookies que o site definiu numa visita anterior de outro país.
O selenium-wire ainda é uma boa forma de adicionar login no proxy?
Funcionava, mas o projeto não é mais mantido, então pode quebrar com novas versões do Chrome ou Selenium. Um encaminhador local como pproxy faz uma coisa só, adiciona credenciais a um proxy upstream, e funciona com qualquer navegador. Liberar o IP do seu servidor na área do cliente elimina a necessidade de credenciais.
Dê a cada perfil de navegador seu próprio IP
Proxies residenciais da US$ 0,53/GB, portas dedicadas 4G/5G da $2,63/dia. Sem KYC — sem ID, sem selfie, sem documentos.