Credenziali dentro --proxy-server
Chrome scarta nome utente e password da quell’argomento senza alcun errore, si collega senza di essi e riceve un 407 dal proxy. La pagina allora non si carica, e sembra un problema di rete anziché di autenticazione.
Esegui Chrome o Firefox con Selenium tramite un indirizzo ISP statico. Ogni esempio di questa pagina è stato eseguito su un proxy locale prima della pubblicazione, e ciò che non ha funzionato è detto chiaramente.
In breve: In Chrome, passa
--proxy-server=http://HOST:PORTcome argomento; in Firefox, imposta un Proxy manuale nelle opzioni. Firefox può rispondere alla richiesta di password del proxy tramite l’handler WebDriver BiDi di Selenium,add_authentication_handler. Chrome nel nostro test non ci è riuscito: ignora le credenziali in--proxy-server, ed entrambi gli handler BiDi sono andati in timeout. Per Chrome, metti nella whitelist del proxy l’IP da cui girano i tuoi test, e il proxy non ha bisogno di credenziali, né in HTTP né in SOCKS5.
Selenium non instrada il traffico da solo: avvia un browser e gli consegna il proxy come parte delle sue opzioni. Per questo la risposta cambia tra Chrome e Firefox, e per questo l’autenticazione del proxy è il punto in cui falliscono la maggior parte delle configurazioni.
Chrome legge il proxy da uno switch della riga di comando, Firefox da un oggetto proxy nelle sue opzioni. Entrambi accettano un proxy in whitelist senza altre impostazioni; Firefox può anche rispondere alla richiesta di password del proxy tramite WebDriver BiDi, cosa che Chrome nel nostro test non ha fatto.
L’indirizzo della macchina o del runner CI così come lo vede internet, non quello locale. What Is My IP lo mostra.
Una chiamata API, PUT /orders/ORDER_ID/whitelist, oppure lo strumento set_proxy_whitelist del server MCP; la dashboard non ha ancora un comando per farlo. La whitelist accetta indirizzi IPv4 e sostituisce la lista a ogni chiamata. Finché una whitelist è impostata, il proxy ammette solo gli indirizzi della lista e nome utente e password smettono di funzionare per quell’ordine; inviando una lista vuota la whitelist si disattiva e l’accesso con password torna a funzionare.
Da I miei proxy oppure dall’API. Con la whitelist impostata, nome utente e password non servono.
Chrome: --proxy-server=http://HOST:PORT, oppure socks5://HOST:PORT dopo aver passato il proxy a SOCKS5. Firefox: un Proxy manuale con httpProxy e sslProxy.
Carica una volta What Is My IP nel browser pilotato e verifica che mostri l’indirizzo che hai acquistato, poi esegui la suite.
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent: Chrome ignores them in --proxy-server anyway.
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # remove to watch the browser
options.add_argument("--proxy-server=http://HOST:PORT")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Selenium 4.51+ with WebDriver BiDi; pip install selenium
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = webdriver.FirefoxOptions()
options.enable_bidi = True
options.add_argument("-headless") # remove to watch the browser
options.proxy = Proxy({
"proxyType": ProxyType.MANUAL,
"httpProxy": "HOST:PORT",
"sslProxy": "HOST:PORT",
})
driver = webdriver.Firefox(options=options)
try:
# Answers the proxy's 407 with your username and password
driver.network.add_authentication_handler(
lambda request: request.provide_credentials("USERNAME", "PASSWORD")
)
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent. For a password instead, see selenium-firefox-auth.
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = webdriver.FirefoxOptions()
options.add_argument("-headless") # remove to watch the browser
options.proxy = Proxy({
"proxyType": ProxyType.MANUAL,
"httpProxy": "HOST:PORT",
"sslProxy": "HOST:PORT",
})
driver = webdriver.Firefox(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Switch the proxy to SOCKS5 first, then use the port the order shows.
# The whitelist applies to SOCKS5 as well, so no credentials here either.
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # remove to watch the browser
options.add_argument("--proxy-server=socks5://HOST:PORT")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Put the public IPv4 address your code runs from on the proxy's
# whitelist. Replaces the list; an empty list turns whitelisting off
# and the proxy falls back to username and password.
curl -X PUT "https://api.proxyjam.com/public/v1/orders/ORDER_ID/whitelist" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"whitelisted_ips": ["YOUR_IP"]}'
L’esempio Firefox con password invia nome utente e password, quindi richiede un ordine senza whitelist impostata. Gli altri esempi per browser presuppongono che l’IP della tua macchina sia nella whitelist del proxy; quello SOCKS5 richiede anche di passare prima il proxy a SOCKS5, il che dà una nuova porta. Sostituisci i valori in maiuscolo con quelli del tuo ordine, e ORDER_ID, YOUR_API_KEY e YOUR_IP nella chiamata della whitelist.
| Proxy HTTP | Proxy SOCKS5 | Nome utente e password | |
|---|---|---|---|
| Chrome | --proxy-server=http://HOST:PORT | --proxy-server=socks5://HOST:PORT | Ignorati in --proxy-server; usa la whitelist |
| Firefox | Proxy con httpProxy e sslProxy | Proxy con socksProxy e socksVersion 5 | Ha funzionato tramite add_authentication_handler (BiDi), in HTTP |
| Chrome, handler BiDi | add_auth_handler e add_authentication_handler sono andati entrambi in timeout | Non testato | Usa la whitelist finché una versione successiva di Selenium o di Chrome non cambierà le cose |
Chrome scarta nome utente e password da quell’argomento senza alcun errore, si collega senza di essi e riceve un 407 dal proxy. La pagina allora non si carica, e sembra un problema di rete anziché di autenticazione.
Quando le opzioni di Firefox contengono un proxy, Selenium Manager scarica il driver tramite quello stesso proxy. Con un proxy solo a password quel download fallisce prima che il browser parta; con la whitelist va a buon fine.
Un runner CI esce spesso da un IP pubblico diverso da quello del tuo portatile, e alcuni lo cambiano tra un’esecuzione e l’altra. Metti in whitelist l’indirizzo da cui girano i test, e aggiornalo quando cambia, perché ogni chiamata sostituisce la lista.
Un indirizzo impostato su HTTP non risponde in SOCKS5. Passa prima il proxy a SOCKS5 sul tuo ordine e usa la porta che mostra a quel punto; cambiare solo lo schema nell’argomento dà un browser che non riesce a collegarsi.
In Firefox, attiva WebDriver BiDi e registra con driver.network.add_authentication_handler un handler che fornisca nome utente e password; con Selenium 4.51 ha funzionato. In Chrome, nel nostro test, non ha funzionato nulla che invii credenziali: le ignora nello switch del proxy, ed entrambi gli handler BiDi sono andati in timeout. Per Chrome, metti in whitelist l’IP pubblico da cui girano i tuoi test, e il browser si collega senza alcuna credenziale.
Crea ChromeOptions, aggiungi l’argomento --proxy-server=http://HOST:PORT e passa le opzioni a webdriver.Chrome. Per SOCKS5, passa il proxy a SOCKS5 sul tuo ordine e usa socks5://HOST:PORT con la porta che l’ordine mostra a quel punto.
Sì. Un indirizzo in whitelist viene accettato senza credenziali in HTTP e in SOCKS5, ed è questo che rende SOCKS5 utilizzabile da Chrome, dato che Chrome non può inviare nome utente e password SOCKS5. La whitelist si imposta tramite l’API o il server MCP e accetta indirizzi IPv4. SOCKS5
Sì, uno per driver: il proxy fa parte delle opzioni con cui parte un driver, quindi due driver possono usare due indirizzi. Non è possibile cambiare il proxy di un Chrome in esecuzione; avvia invece un nuovo driver.
No. Il driver mantiene l’indirizzo con cui è partito finché non si chiude, e l’indirizzo stesso resta assegnato a te per l’intero periodo di fatturazione. Le suite che hanno bisogno di molte origini contemporaneamente richiederebbero un pool che le cambia, e non è ancora in vendita.
I test end-to-end del tuo prodotto, i controlli regionali del tuo negozio online, la verifica degli annunci, le ricerche di prezzo e la tutela del marchio si svolgono tutti senza revisione preventiva secondo la nostra politica di utilizzo accettabile. Pilotare un browser per superare CAPTCHA, difese anti-bot, limiti di frequenza o ban degli account è un’altra questione: l’indirizzo non lo fa, e la politica vieta di provarci. Politica di Utilizzo Accettabile
--proxy-server e i suoi schemi