Snel antwoord
Hoe gebruik ik een statische proxy met Selenium en Chrome?
Voor een Selenium statische proxy in Chrome zet je de gebruikersnaam en het wachtwoord niet in --proxy-server: Chrome accepteert daar alleen een schema, een host en een poort. Gebruik een van twee werkende methoden. Autoriseer je machine in de IP-allowlist van de proxy, of draai een kleine lokale forwarder die de login voor Chrome toevoegt. SteadyProxy login-opties: Gebruikersnaam en wachtwoord, of een IP-allowlist (maximaal 10 IP's). Bijgewerkt 19 oktober 2026.
Wat zijn de belangrijkste feiten?
| Chrome-switch | --proxy-server=http://host:port, zonder veld voor een login |
|---|---|
| Methode 1 | IP-allowlist: tot 10 van je eigen IP's verbinden zonder wachtwoord |
| Methode 2 | Lokale forwarder op 127.0.0.1:8899 voegt de Proxy-Authorization-header toe |
| Vermijd | user:password in --proxy-server; browserplug-ins van onbekende herkomst |
| Controleren | Open api.ipify.org in de aangestuurde browser |
| Getest | Forwarder liet HTTPS- en HTTP-verzoeken door een met wachtwoord beveiligde testproxy gaan, 19 oktober 2026 |
Waarom weigert Chrome inloggegevens in de proxy-URL?
Chrome's --proxy-server-switch accepteert een schema, een host en een poort. De netwerkinstellingen-documentatie van Chromium toont geen gebruikersnaam of wachtwoord in dat formaat. Wanneer een proxy om een login vraagt, ziet een persoon een inlogvenster, maar een script dat door Selenium wordt aangestuurd kan dat niet betrouwbaar invullen. De login moet dus buiten Chrome gebeuren: ofwel vertrouwt de proxy het IP van je machine, ofwel stuurt een hulpprogramma op je machine de login voor Chrome.
Hoe gebruik ik de IP-allowlist met Selenium?
Dit is de eenvoudigste methode. Vind het publieke IP van je machine door api.ipify.org zonder de proxy te openen. Voeg dat IP toe aan de allowlist van je SteadyProxy-account; je kunt tot 10 bron-IP's registreren. Geef Chrome vervolgens alleen de host en poort door. Het voorbeeld gebruikt de HTTP-poort; SOCKS5 werkt hetzelfde met socks5:// en de SOCKS5-poort. Onze allowlist-gids legt beide richtingen van allowlisting uit.
"""Selenium + Chrome through a static proxy authorised by IP allowlist.
Install: python -m pip install selenium
Before running: add this machine's public IP to the allowlist of your account.
"""
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
options = webdriver.ChromeOptions()
# Host and port only: Chrome's --proxy-server switch has no field for a username or password
options.add_argument("--proxy-server=http://" + HOST + ":" + PORT)
driver = webdriver.Chrome(options=options)
try:
driver.get("https://api.ipify.org?format=json")
print("Exit IP:", driver.find_element(By.TAG_NAME, "body").text)
finally:
driver.quit()
Hoe voegt een lokale forwarder de login toe?
Een lokale forwarder luistert op 127.0.0.1, ontvangt Chrome's proxyverzoeken zonder login, voegt de Proxy-Authorization-header toe en stuurt ze door naar je statische proxy. Het gebruikt alleen de Python-standaardbibliotheek. Het verwerkt HTTPS via CONNECT-tunnels, en gewone http:// met één verzoek per verbinding. Houd het gebonden aan 127.0.0.1, zodat geen andere machine je proxy erdoor kan gebruiken. We hebben het getest op 19 oktober 2026 met curl over HTTPS en HTTP, via een testproxy die verzoeken zonder de juiste login weigert.
"""Local forwarder: Chrome -> 127.0.0.1:8899 (no login) -> static proxy (with login).
It adds the Proxy-Authorization header for you. Keep it bound to 127.0.0.1.
Run: python local_forwarder.py (standard library only)
"""
import asyncio
import base64
import os
LISTEN_PORT = int(os.environ.get("LOCAL_PORT", "8899"))
UPSTREAM_HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
UPSTREAM_PORT = int(os.environ.get("PROXY_PORT", "7777"))
CREDENTIALS = os.environ.get("PROXY_USER", "USERNAME") + ":" + os.environ.get("PROXY_PASS", "PASSWORD")
AUTH = "Proxy-Authorization: Basic " + base64.b64encode(CREDENTIALS.encode()).decode()
DROP = ("proxy-authorization:", "proxy-connection:", "connection:")
async def pipe(reader, writer):
try:
while data := await reader.read(65536):
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")
except (asyncio.IncompleteReadError, asyncio.LimitOverrunError):
client_writer.close()
return
lines = head.decode("latin-1").split("\r\n")
headers = [h for h in lines[1:] if h and not h.lower().startswith(DROP)]
headers.append(AUTH)
if not lines[0].upper().startswith("CONNECT "):
headers.append("Connection: close") # plain http:// - one request per connection
try:
up_reader, up_writer = await asyncio.open_connection(UPSTREAM_HOST, UPSTREAM_PORT)
except OSError:
client_writer.write(b"HTTP/1.1 502 Bad Gateway\r\nContent-Length: 0\r\n\r\n")
client_writer.close()
return
up_writer.write(("\r\n".join([lines[0]] + headers) + "\r\n\r\n").encode("latin-1"))
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", LISTEN_PORT)
print("Forwarding 127.0.0.1:%d -> %s:%d" % (LISTEN_PORT, UPSTREAM_HOST, UPSTREAM_PORT))
async with server:
await server.serve_forever()
if __name__ == "__main__":
asyncio.run(main())
Start de forwarder in één terminal en voer daarna Selenium uit met het lokale adres. Chrome ziet het wachtwoord nooit, en de login blijft in omgevingsvariabelen op je machine.
"""Selenium + Chrome through the local forwarder (username/password kept out of Chrome).
Start local_forwarder.py first, then run this file.
"""
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")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://api.ipify.org?format=json")
print("Exit IP:", driver.find_element(By.TAG_NAME, "body").text)
finally:
driver.quit()
Hoe draai ik meerdere statische IP's met Selenium?
Draai één forwarder per IP op een eigen lokale poort, zoals 8899, 8900 en 8901, elk met de inloggegevens van dat IP. Start één Chrome-driver per poort. Met de IP-allowlist sla je de forwarders over en geef je de host en poort van elk IP door aan de eigen driver. Geef elke driver een eigen --user-data-dir als hij cookies tussen runs moet bewaren. Controleer elke driver met api.ipify.org voordat je echt werk begint.
Bestaat hetzelfde probleem met Firefox en Selenium?
Ja, in een vergelijkbare vorm. Firefox leest proxy-host en -poort uit zijn voorkeuren, en een HTTP-proxylogin verschijnt als een dialoogvenster dat automatisering niet betrouwbaar kan invullen. Dezelfde twee methoden werken: de IP-allowlist, of de lokale forwarder met Firefox's HTTP-proxy ingesteld op 127.0.0.1 en poort 8899. Voor een browserautomatiseringstool met ingebouwde proxylogin, zie de Playwright-gids.
Wat vragen mensen nog meer over Selenium en statische proxy's?
Kan ik http://user:password@host:port in --proxy-server schrijven?
Het werkt niet betrouwbaar. Chrome's gedocumenteerde formaat voor --proxy-server heeft geen plek voor een login, dus de inloggegevens worden niet gebruikt. Verzoeken mislukken dan met een proxy-authenticatiefout of tonen een inlogvenster. Gebruik de IP-allowlist of de lokale forwarder die op deze pagina wordt beschreven.
Is een Chrome-extensie een goede manier om de proxylogin te versturen?
Het kan werken, maar het voegt code met brede rechten toe aan de browser die je automatiseert, en extensieregels veranderen tussen Chrome-versies. De twee methoden hier hebben geen bewegende onderdelen in Chrome. Als je een extensie gebruikt, schrijf hem dan zelf of controleer hem, en houd hem buiten profielen die voor ander werk worden gebruikt.
Is de lokale forwarder veilig?
Het luistert alleen op 127.0.0.1, dus alleen programma's op jouw machine kunnen het gebruiken. Iedereen met toegang tot jouw machine zou het ook kunnen gebruiken, omdat die jouw omgevingsvariabelen kan uitlezen. Stop het als de taak klaar is. Standaard wordt er niets gelogd; voeg alleen logging toe zonder de Proxy-Authorization-header.
Hoe vind ik het openbare IP dat ik moet allowlisten?
Open op de machine die Selenium draait https://api.ipify.org zonder de proxy. Dat is het adres dat de proxy ziet. Als je kantoor of server een vast IP heeft, allowlist je dat één keer. Een thuisverbinding waarvan het IP verandert, is geen goede match; gebruik dan de forwarder met een gebruikersnaam en wachtwoord.
Lost Selenium Wire of een vergelijkbare library dit op?
Sommige libraries voegen proxylogin toe aan Selenium door hun eigen onderscheppende proxy te draaien, ongeveer zoals de forwarder hier. Controleer of een library nog wordt onderhouden voordat je erop vertrouwt. De forwarder op deze pagina is ongeveer 60 regels standaard-Python die je volledig kunt doorlezen.
Hoeveel IP's kan ik allowlisten voor Selenium-machines?
Tot 10 bron-IP's op je SteadyProxy-account, wat de meeste kantoren en serverfarms dekt. Onze login-opties zijn: Gebruikersnaam en wachtwoord, of een IP-allowlist (maximaal 10 IP's). Draai je Selenium op meer machines, routeer ze dan via één server met een vast IP, of gebruik de forwarder met een gebruikersnaam en wachtwoord op elke machine.
Welke bronnen gebruikt deze gids? (3)
- Netwerkinstellingen (--proxy-server-formaat) — The Chromium Projects (2026-10-19)
- asyncio-streams — Python Software Foundation (2026-10-19)
- Selenium WebDriver: Chrome-opties — Selenium (2026-10-19)