# Selenium con proxy autenticato: un forwarder locale funzionante

> Proxy autenticati in Selenium: perché Chrome ignora le credenziali proxy e un forwarder Python di 40 linee che le aggiunge. Proxy residenziali, senza KYC.

- URL: https://crawlrelay.com/it/docs/selenium/
- Ultimo aggiornamento: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Il flag proxy di Chrome non supporta password. Un piccolo forwarder locale su 127.0.0.1 aggiunge le credenziali, così Selenium vede sempre un proxy locale aperto.

**Risposta rapida — Come usare un proxy con username e password in Selenium?**

Esegui un piccolo forwarder locale che aggiunge l'intestazione `Proxy-Authorization` e punta Chrome verso di esso con `--proxy-server=http://127.0.0.1:8899`. Chrome ignora le credenziali in quel flag e Selenium non ha opzioni portabili per password proxy. **CrawlRelay** proxy residenziali funzionano così su `gw.crawlrelay.com:7777`, da 0,50 USD/GB. Pagati in crypto, senza KYC.

## Configurazione Selenium in sintesi

| Attributo | Valore |
| --- | --- |
| Perché un forwarder | Il flag `--proxy-server` di Chrome non accetta username né password |
| Forwarder | Ascolta su `127.0.0.1:8899`, aggiunge `Proxy-Authorization`, rilancia a `gw.crawlrelay.com:7777` |
| Opzione Chrome | `--proxy-server=http://127.0.0.1:8899` |
| Rotazione | Ogni nuovo tunnel CONNECT è una nuova connessione, quindi solitamente un'uscita diversa; aggiungi un ID sessione per un IP |
| Alternativa più semplice | [Playwright](https://crawlrelay.com/it/docs/playwright/) prende direttamente nome utente e password |

## Come funziona il forwarder locale?

Accetta la richiesta proxy del browser, inserisce un header con le tue credenziali e poi copia i byte in entrambe le direzioni. Per un sito HTTPS il browser invia `CONNECT host:443`, il gateway risponde `200 Connection established`, e TLS funziona end-to-end tra Chrome e il sito web. Il forwarder non vede mai il contenuto della pagina in chiaro.

Questa versione minimale gestisce siti HTTPS, dove ogni connessione gestisce un tunnel CONNECT. Copre quasi tutti i siti oggi. Mantienilo legato a `127.0.0.1` così nessun altro dispositivo può usare le tue credenziali.

*forwarder.py (Python 3.8+, solo libreria standard)*

```python
import asyncio
import base64
import os

UPSTREAM = ("gw.crawlrelay.com", 7777)
USER = os.environ.get("CRAWLRELAY_USER", "USERNAME-country-us")
PASSWORD = os.environ.get("CRAWLRELAY_PASSWORD", "PASSWORD")
AUTH = b"Proxy-Authorization: Basic " + base64.b64encode(("%s:%s" % (USER, PASSWORD)).encode())


async def pipe(reader, writer):
    try:
        while True:
            data = await reader.read(65536)
            if not data:
                break
            writer.write(data)
            await writer.drain()
    except ConnectionError:
        pass
    finally:
        writer.close()


async def handle(client_reader, client_writer):
    try:
        head = await client_reader.readuntil(b"\r\n\r\n")  # request line and headers from the browser
    except asyncio.IncompleteReadError:
        client_writer.close()
        return
    lines = head.split(b"\r\n")
    lines.insert(1, AUTH)  # add the credentials right after the request line
    up_reader, up_writer = await asyncio.open_connection(*UPSTREAM)
    up_writer.write(b"\r\n".join(lines))
    await up_writer.drain()
    await asyncio.gather(pipe(client_reader, up_writer), pipe(up_reader, client_writer))


async def main():
    server = await asyncio.start_server(handle, "127.0.0.1", 8899)
    async with server:
        await server.serve_forever()


if __name__ == "__main__":
    asyncio.run(main())
```

## Come indirizzo Selenium al forwarder?

Avvia `forwarder.py` in un terminale, poi esegui lo script Selenium con l’indirizzo proxy locale. Selenium Manager, integrato da Selenium 4.6 in poi, scarica automaticamente il ChromeDriver corrispondente, quindi non serve altro.

*selenium_example.py*

```python
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
options.add_argument("--headless=new")

driver = webdriver.Chrome(options=options)
try:
    driver.set_page_load_timeout(60)
    driver.get("https://api.ipify.org")
    print("exit IP:", driver.find_element(By.TAG_NAME, "body").text)
finally:
    driver.quit()
```

## Come ottengo un IP per sessione Selenium, o un nuovo IP per pagina?

Il forwarder invia qualunque nome utente gli fornisci, quindi il comportamento della sessione dipende da questo:

- **Rotazione per connessione:** ometti la parte sessione (`USERNAME-country-us`). Chrome apre più connessioni per pagina, quindi una singola pagina può caricare tramite più uscite.
- **Un IP per sessione Selenium:** imposta `CRAWLRELAY_USER` a `USERNAME-country-us-session-run42-ttl-30` prima di avviare il forwarder. Ogni connessione userà lo stesso IP fino a 30 minuti; l’IP può cambiare prima.
- **Più sessioni in parallelo:** esegui un forwarder per sessione su porte locali diverse, per esempio 8899 e 8900, e assegna a ogni WebDriver la sua porta.

## Che ne è di selenium-wire o estensioni browser?

selenium-wire, un popolare pacchetto che aggiungeva autenticazione proxy intercettando il traffico, è stato archiviato dall’autore a gennaio 2024 e non riceve più aggiornamenti. Un’estensione browser che risponde alla richiesta di autenticazione proxy funziona, ma va configurata e caricata in ogni profilo. Il forwarder sopra non ha dipendenze e funziona con qualsiasi browser guidato da Selenium. Per progetti nuovi, [Playwright](https://crawlrelay.com/it/docs/playwright/) è ancora più semplice: prende direttamente nome utente e password del proxy.

## Selenium e proxy: domande

### Perché Chrome mostra il popup di login con il mio proxy in Selenium?

Perché il proxy ha chiesto le credenziali e Chrome non ne aveva: la sua flag `--proxy-server` accetta solo host e porta. In modalità headless lo stesso problema appare come `ERR_TUNNEL_CONNECTION_FAILED`. Usa un forwarder locale che aggiunge le credenziali, oppure passa a Playwright, che accetta nome utente e password.

### Il forwarder rallenta il mio scraping?

Difficilmente. Copia byte tra due socket locali e uno remoto, senza decriptare nulla. Il tempo di caricamento di una pagina dipende dall’exit proxy residenziale e dal sito target, non dal forwarder che gira sulla stessa macchina.

### Posso usare Firefox invece di Chrome con Selenium?

Sì. Imposta i proxy di Firefox tramite `FirefoxOptions`: `network.proxy.type` a 1, e `network.proxy.http` e `network.proxy.ssl` a `127.0.0.1` con porta 8899. Tieni il forwarder davanti: Firefox mostra una finestra per le credenziali proxy che Selenium non riesce a compilare in modo affidabile.

### La mia password è sicura nel forwarder?

Rimane nella tua macchina finché il forwarder ascolta su `127.0.0.1`, come nell’esempio. Leggila dalle variabili ambiente, mai inserirla nel codice, e usa un sub-user dedicato con un limite traffico per ogni scraper così se la password viene compromessa non rischi di consumare tutto il piano.

**Dai a Selenium un exit residenziale** 1,50 USD per 1 GB da testare, 0,50 USD/GB da 50 GB. [Vedi i prezzi](https://crawlrelay.com/it/pricing/) · [Guida Playwright](https://crawlrelay.com/it/docs/playwright/)

---

CrawlRelay: CrawlRelay è un servizio di proxy residenziali rotanti e proxy mobili 4G/5G primo per sviluppatori: traffico pay-as-you-go senza scadenza da 0,50 USD/GB, pagato in crypto, senza caricamento documenti. Senza KYC — niente documento, selfie o altri documenti. Paga in crypto.
