クイック回答
Selenium と Chrome で静的プロキシを使うには?
Selenium で Chrome に静的プロキシを使う場合、ユーザー名とパスワードを --proxy-server に入れないでください。Chrome はそこではスキーム、ホスト、ポートしか受け取りません。動作する2つの方法のどちらかを使ってください。プロキシの 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 と、接続ごとに1リクエストのプレーンな 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 など)でフォワーダーを1つ実行し、それぞれにその IP の認証情報を設定します。ポートごとに Chrome ドライバーを1つ起動します。IP 許可リストを使う場合は、フォワーダーを省略し、各 IP のホストとポートをそれぞれのドライバーに渡します。実行間で Cookie を保持する必要がある場合は、各ドライバーに独自の --user-data-dir を指定します。実際の作業前に、各ドライバーを api.ipify.org で確認します。
Firefox と Selenium でも同じ問題がありますか?
はい、同様の形で存在します。Firefox は設定からプロキシのホストとポートを読み取り、HTTP プロキシのログインは自動化が確実に入力できないダイアログとして表示されます。同じ2つの方法が使えます。IP 許可リスト、または Firefox の HTTP プロキシを 127.0.0.1 とポート 8899 に設定したローカルフォワーダーです。プロキシログインが組み込まれたブラウザ自動化ツールについては、Playwright ガイド を参照してください。
Selenium と静的プロキシについて他にどんな質問がありますか?
--proxy-server に http://user:password@host:port と書けますか?
確実には動作しません。--proxy-server の Chrome の文書化された形式にはログインの場所がないため、認証情報は使用されません。リクエストはプロキシ認証エラーで失敗するか、サインインボックスが表示されます。このページで説明している IP 許可リストまたはローカルフォワーダーを使用してください。
Chrome 拡張機能はプロキシログインを送信する良い方法ですか?
動作することはありますが、自動化するブラウザに広い権限を持つコードを追加し、拡張機能のルールは Chrome のバージョン間で変わります。ここで紹介する2つの方法は Chrome 内部に可動部分がありません。拡張機能を使う場合は、自分で書くか監査し、他の作業に使うプロファイルには入れないでください。
ローカルフォワーダーは安全ですか?
127.0.0.1でのみ待ち受けるため、お使いのマシン上のプログラムだけが利用できます。マシンにアクセスできる人は環境変数を読めるため、同様に利用できてしまいます。作業が終わったら停止してください。デフォルトでは何もログに記録しません。ログを追加する場合はProxy-Authorizationヘッダーを含めないようにしてください。
許可リストに追加するパブリックIPはどうやって確認しますか?
Seleniumを実行しているマシンで、プロキシを使わずにhttps://api.ipify.orgを開いてください。それがプロキシから見えるアドレスです。オフィスやサーバーが固定IPなら、一度許可リストに追加すれば済みます。IPが変わる家庭回線は不向きです。代わりにユーザー名とパスワードを使うフォワーダーをご利用ください。
Selenium Wireなどのライブラリで解決できますか?
一部のライブラリは、ここで紹介するフォワーダーのように独自の傍受プロキシを動かしてSeleniumにプロキシログインを追加します。依存する前に、そのライブラリが今もメンテナンスされているか確認してください。このページのフォワーダーは標準ライブラリのPythonで約60行、全体を読むことができます。
Seleniumマシン用に許可リストへ追加できるIPはいくつですか?
SteadyProxyアカウントでは最大10個の送信元IPに対応しており、ほとんどのオフィスやサーバーフリートをカバーします。ログイン方法はユーザー名とパスワード、またはIP許可リスト(最大10 IP)です。さらに多くのマシンでSeleniumを実行する場合は、固定IPの1台のサーバー経由にするか、各マシンでユーザー名とパスワードを使うフォワーダーをご利用ください。
このガイドはどの情報源を使用していますか? (3)
- ネットワーク設定(--proxy-server形式) — The Chromium Projects (2026-10-19)
- asyncioストリーム — Python Software Foundation (2026-10-19)
- Selenium WebDriver:Chromeオプション — Selenium (2026-10-19)