Szybka odpowiedź
Jak używać statycznego proxy z Selenium i Chrome?
W przypadku statycznego proxy w Selenium dla Chrome nie umieszczaj nazwy użytkownika i hasła w --proxy-server: Chrome przyjmuje tam tylko schemat, host i port. Użyj jednej z dwóch działających metod. Autoryzuj swoją maszynę na liście dozwolonych IP proxy lub uruchom mały lokalny forwarder, który doda login dla Chrome. SteadyProxy opcje logowania: Nazwa użytkownika i hasło lub lista dozwolonych IP (do 10 IP). Zaktualizowano 19 października 2026.
Jakie są najważniejsze informacje?
| Przełącznik Chrome | --proxy-server=http://host:port, bez pola na login |
|---|---|
| Metoda 1 | Lista dozwolonych IP: do 10 Twoich własnych IP łączy się bez hasła |
| Metoda 2 | Lokalny forwarder na 127.0.0.1:8899 dodaje nagłówek Proxy-Authorization |
| Czego unikać | user:password w --proxy-server; wtyczki przeglądarki nieznanego pochodzenia |
| Sprawdź | Otwórz api.ipify.org w sterowanej przeglądarce |
| Testowano | Forwarder przekazywał żądania HTTPS i HTTP przez chronione hasłem proxy testowe, 19 października 2026 |
Dlaczego Chrome odrzuca dane logowania w adresie proxy?
Przełącznik --proxy-server w Chrome przyjmuje schemat, host i port. Dokumentacja ustawień sieci Chromium nie pokazuje nazwy użytkownika ani hasła w tym formacie. Gdy proxy wymaga logowania, człowiek zobaczyłby okno logowania, ale skrypt sterowany przez Selenium nie potrafi go niezawodnie wypełnić. Dlatego logowanie musi odbywać się poza Chrome: albo proxy ufa IP Twojej maszyny, albo pomocnik na Twojej maszynie wysyła login za Chrome.
Jak używać listy dozwolonych IP z Selenium?
To najprostsza metoda. Znajdź publiczne IP swojej maszyny, otwierając api.ipify.org bez proxy. Dodaj to IP do listy dozwolonych w swoim koncie SteadyProxy; możesz zarejestrować do 10 źródłowych IP. Następnie przekaż do Chrome tylko host i port. Przykład używa portu HTTP; SOCKS5 działa tak samo ze socks5:// i portem SOCKS5. Nasz poradnik dotyczący listy dozwolonych wyjaśnia oba kierunki dodawania do listy dozwolonych.
"""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()
Jak lokalny forwarder dodaje login?
Lokalny forwarder nasłuchuje na 127.0.0.1, odbiera żądania proxy z Chrome bez logowania, dodaje nagłówek Proxy-Authorization i przekazuje je do Twojego statycznego proxy. Używa wyłącznie biblioteki standardowej Pythona. Obsługuje HTTPS przez tunele CONNECT oraz zwykłe http:// z jednym żądaniem na połączenie. Trzymaj go związanego z 127.0.0.1, aby żadna inna maszyna nie mogła przez niego korzystać z Twojego proxy. Przetestowaliśmy go 19 października 2026 z curl przez HTTPS i HTTP, przez proxy testowe, które odrzuca żądania bez prawidłowego logowania.
"""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())
Uruchom forwarder w jednym terminalu, a następnie uruchom Selenium z lokalnym adresem. Chrome nigdy nie widzi hasła, a login pozostaje w zmiennych środowiskowych na Twojej maszynie.
"""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()
Jak uruchomić kilka statycznych IP z Selenium?
Uruchom jeden forwarder na IP na osobnym lokalnym porcie, np. 8899, 8900 i 8901, każdy z danymi logowania tego IP. Uruchom jeden sterownik Chrome na port. W przypadku listy dozwolonych IP pomiń forwardery i przekaż host i port każdego IP do jego własnego sterownika. Nadaj każdemu sterownikowi własny --user-data-dir, jeśli ma zachowywać pliki cookie między uruchomieniami. Sprawdź każdy sterownik przez api.ipify.org przed właściwą pracą.
Czy ten sam problem występuje z Firefox i Selenium?
Tak, w podobnej formie. Firefox odczytuje host i port proxy ze swoich preferencji, a logowanie do proxy HTTP pojawia się jako okno dialogowe, którego automatyzacja nie potrafi niezawodnie wypełnić. Działają te same dwie metody: lista dozwolonych IP lub lokalny forwarder z proxy HTTP Firefoksa ustawionym na 127.0.0.1 i port 8899. W przypadku narzędzia do automatyzacji przeglądarki z wbudowanym logowaniem do proxy zobacz poradnik dotyczący Playwright.
O co jeszcze ludzie pytają w kontekście Selenium i statycznych proxy?
Czy mogę wpisać http://user:password@host:port w --proxy-server?
To nie działa niezawodnie. Udokumentowany format --proxy-server w Chrome nie ma miejsca na login, więc dane logowania nie są używane. Żądania kończą się wtedy błędem uwierzytelniania proxy lub pokazują okno logowania. Użyj listy dozwolonych IP lub lokalnego forwardera opisanego na tej stronie.
Czy rozszerzenie Chrome to dobry sposób na wysyłanie logowania do proxy?
Może działać, ale dodaje kod z szerokimi uprawnieniami do przeglądarki, którą automatyzujesz, a zasady rozszerzeń zmieniają się między wersjami Chrome. Dwie metody opisane tutaj nie mają ruchomych części wewnątrz Chrome. Jeśli używasz rozszerzenia, napisz je sam lub przeprowadź audyt i trzymaj je z dala od profili używanych do innych prac.
Czy lokalny forwarder jest bezpieczny?
Nasłuchuje tylko na 127.0.0.1, więc mogą z niego korzystać wyłącznie programy na Twojej maszynie. Każdy, kto ma dostęp do Twojej maszyny, też mógłby go użyć, ponieważ mógłby odczytać Twoje zmienne środowiskowe. Zatrzymaj go po zakończeniu zadania. Domyślnie nic nie loguje; dodaj logowanie tylko bez nagłówka Proxy-Authorization.
Jak znaleźć publiczny IP do dodania do listy dozwolonych?
Na maszynie, na której działa Selenium, otwórz https://api.ipify.org bez proxy. To adres, który widzi proxy. Jeśli Twoje biuro lub serwer ma stały IP, dodaj go do listy dozwolonych raz. Domowe łącze ze zmieniającym się IP słabo się nadaje; użyj przekierownika z nazwą użytkownika i hasłem.
Czy Selenium Wire lub podobna biblioteka rozwiązuje ten problem?
Niektóre biblioteki dodają logowanie proxy do Selenium, uruchamiając własne przechwytujące proxy, podobnie jak przekierownik tutaj. Sprawdź, czy biblioteka jest nadal utrzymywana, zanim zaczniesz od niej zależeć. Przekierownik na tej stronie to około 60 linii Pythona ze standardowej biblioteki, które możesz przeczytać w całości.
Ile IP mogę dodać do listy dozwolonych dla maszyn z Selenium?
Do 10 źródłowych IP na Twoim koncie SteadyProxy, co pokrywa większość biur i flot serwerów. Nasze opcje logowania to: Nazwa użytkownika i hasło lub lista dozwolonych IP (do 10 IP). Jeśli uruchamiasz Selenium na większej liczbie maszyn, przekieruj je przez jeden serwer ze stałym IP albo użyj przekierownika z nazwą użytkownika i hasłem na każdej maszynie.
Z jakich źródeł korzysta ten przewodnik? (3)
- Ustawienia sieci (format --proxy-server) — The Chromium Projects (2026-10-19)
- strumienie asyncio — Python Software Foundation (2026-10-19)
- Selenium WebDriver: opcje Chrome — Selenium (2026-10-19)