빠른 답변
Selenium과 Chrome에서 정적 프록시를 어떻게 사용하나요?
Selenium에서 Chrome 정적 프록시를 쓸 때는 --proxy-server에 사용자 이름과 비밀번호를 넣지 마세요. Chrome은 여기서 스킴, 호스트, 포트만 받습니다. 검증된 두 가지 방법 중 하나를 쓰세요. 프록시의 IP 허용 목록에 머신을 인증하거나, 작은 로컬 포워더를 실행해 Chrome을 대신해 로그인을 추가하게 하면 됩니다. SteadyProxy 로그인 옵션: 사용자 이름과 비밀번호, 또는 IP 허용 목록(최대 10개 IP). 2026년 10월 19일 업데이트.
핵심 정보는 무엇인가요?
| Chrome 스위치 | --proxy-server=http://host:port, 로그인을 넣을 필드가 없음 |
|---|---|
| 방법 1 | IP 허용 목록: 본인 IP 최대 10개까지 비밀번호 없이 연결 |
| 방법 2 | 127.0.0.1:8899의 로컬 포워더가 Proxy-Authorization 헤더를 추가 |
| 피해야 할 것 | --proxy-server 안의 user:password; 출처를 알 수 없는 브라우저 플러그인 |
| 확인 | 구동 중인 브라우저에서 api.ipify.org 열기 |
| 테스트 완료 | 포워더가 비밀번호로 보호된 테스트 프록시를 통해 HTTPS 및 HTTP 요청을 전달함, 2026년 10월 19일 |
Chrome이 프록시 URL의 자격 증명을 거부하는 이유는 무엇인가요?
Chrome의 --proxy-server 스위치는 스킴, 호스트, 포트를 받습니다. Chromium 네트워크 설정 문서를 보면 해당 형식에 사용자 이름이나 비밀번호가 없습니다. 프록시가 로그인을 요구하면 사람은 로그인 상자를 보게 되지만, Selenium으로 구동되는 스크립트는 이를 안정적으로 채울 수 없습니다. 따라서 로그인은 Chrome 바깥에서 이루어져야 합니다. 프록시가 머신의 IP를 신뢰하거나, 머신의 도우미가 Chrome을 대신해 로그인을 보내야 합니다.
Selenium에서 IP 허용 목록을 어떻게 사용하나요?
가장 간단한 방법입니다. 프록시 없이 api.ipify.org를 열어 머신의 공인 IP를 확인하세요. 그 IP를 SteadyProxy 계정의 허용 목록에 추가하면 됩니다. 소스 IP는 최대 10개까지 등록할 수 있습니다. 그런 다음 호스트와 포트만 Chrome에 전달하세요. 예제는 HTTP 포트를 사용하며, SOCKS5도 socks5://와 SOCKS5 포트로 동일하게 작동합니다. 허용 목록 가이드에서 양방향 허용 목록 설정을 설명합니다.
"""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()
로컬 포워더는 어떻게 로그인을 추가하나요?
로컬 포워더는 127.0.0.1에서 수신 대기하며, 로그인 없이 들어온 Chrome의 프록시 요청을 받아 Proxy-Authorization 헤더를 추가하고 정적 프록시로 전달합니다. Python 표준 라이브러리만 사용합니다. CONNECT 터널을 통한 HTTPS와 연결당 요청 하나로 처리되는 일반 http://를 지원합니다. 다른 머신이 이를 통해 프록시를 사용할 수 없도록 127.0.0.1에 바인딩해 두세요. 2026년 10월 19일, 올바른 로그인 없는 요청을 거부하는 테스트 프록시를 통해 curl로 HTTPS 및 HTTP에서 테스트했습니다.
"""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())
한 터미널에서 포워더를 시작한 다음, 로컬 주소로 Selenium을 실행하세요. Chrome은 비밀번호를 절대 보지 못하며, 로그인 정보는 머신의 환경 변수에 남습니다.
"""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()
Selenium으로 여러 정적 IP를 어떻게 실행하나요?
IP마다 자체 로컬 포트(예: 8899, 8900, 8901)에서 해당 IP의 자격 증명으로 포워더를 하나씩 실행하세요. 포트마다 Chrome 드라이버를 하나씩 시작합니다. IP 허용 목록을 사용하면 포워더를 건너뛰고 각 IP의 호스트와 포트를 해당 드라이버에 전달하면 됩니다. 실행 간에 쿠키를 유지해야 한다면 각 드라이버에 자체 --user-data-dir을 지정하세요. 실제 작업 전에 api.ipify.org로 각 드라이버를 확인하세요.
Firefox와 Selenium에서도 같은 문제가 있나요?
네, 비슷한 형태로 존재합니다. Firefox는 환경설정에서 프록시 호스트와 포트를 읽으며, HTTP 프록시 로그인은 자동화가 안정적으로 채울 수 없는 대화 상자로 나타납니다. 같은 두 방법이 통합니다. IP 허용 목록을 사용하거나, Firefox의 HTTP 프록시를 127.0.0.1과 포트 8899로 설정한 로컬 포워더를 쓰면 됩니다. 프록시 로그인이 내장된 브라우저 자동화 도구는 Playwright 가이드를 참고하세요.
Selenium과 정적 프록시에 대해 사람들이 또 무엇을 묻나요?
--proxy-server에 http://user:password@host:port를 쓸 수 있나요?
안정적으로 작동하지 않습니다. --proxy-server의 문서화된 형식에는 로그인을 넣을 자리가 없으므로 자격 증명이 사용되지 않습니다. 그러면 요청이 프록시 인증 오류로 실패하거나 로그인 상자가 나타납니다. 이 페이지에서 설명한 IP 허용 목록이나 로컬 포워더를 사용하세요.
Chrome 확장 프로그램이 프록시 로그인을 보내는 좋은 방법인가요?
작동할 수는 있지만, 자동화하는 브라우저에 광범위한 권한을 가진 코드가 추가되고 확장 프로그램 규칙은 Chrome 버전마다 바뀝니다. 여기서 소개한 두 방법은 Chrome 내부에 움직이는 부품이 없습니다. 확장 프로그램을 쓴다면 직접 작성하거나 감사하고, 다른 작업에 쓰는 프로필에는 넣지 마세요.
로컬 포워더는 안전한가요?
127.0.0.1에서만 수신하므로 본인 컴퓨터의 프로그램만 사용할 수 있습니다. 환경 변수를 읽을 수 있는 사람이라면 누구든 접근할 수 있는 컴퓨터에 접근할 수 있는 사람은 사용할 수 있습니다. 작업이 끝나면 중지하세요. 기본적으로 아무것도 기록되지 않습니다. Proxy-Authorization 헤더 없이 로깅만 추가하세요.
허용 목록에 추가할 공인 IP는 어떻게 찾나요?
Selenium을 실행하는 컴퓨터에서 프록시 없이 https://api.ipify.org를 여세요. 그것이 프록시가 보는 주소입니다. 사무실이나 서버에 고정 IP가 있다면 한 번만 허용 목록에 추가하세요. IP가 바뀌는 가정용 연결은 적합하지 않습니다. 대신 사용자 이름과 비밀번호를 사용하는 포워더를 사용하세요.
Selenium Wire나 비슷한 라이브러리가 이 문제를 해결하나요?
일부 라이브러리는 여기 포워더처럼 자체 인터셉트 프록시를 실행하여 Selenium에 프록시 로그인을 추가합니다. 의존하기 전에 라이브러리가 여전히 유지 관리되는지 확인하세요. 이 페이지의 포워더는 전체를 읽을 수 있는 약 60줄의 표준 라이브러리 Python입니다.
Selenium 컴퓨터에 몇 개의 IP를 허용 목록에 추가할 수 있나요?
SteadyProxy 계정에서 최대 10개의 소스 IP로, 대부분의 사무실과 서버 플릿을 커버합니다. 로그인 옵션은 사용자 이름과 비밀번호, 또는 IP 허용 목록(최대 10개 IP)입니다. 더 많은 컴퓨터에서 Selenium을 실행하는 경우 고정 IP가 있는 하나의 서버를 통해 라우팅하거나 각 컴퓨터에서 사용자 이름과 비밀번호를 사용하는 포워더를 사용하세요.
이 가이드는 어떤 출처를 사용하나요? (3)
- 네트워크 설정 (--proxy-server 형식) — The Chromium Projects (2026-10-19)
- asyncio 스트림 — Python Software Foundation (2026-10-19)
- Selenium WebDriver: Chrome 옵션 — Selenium (2026-10-19)