クイック回答
Playwrightで静的プロキシを設定するには?
Playwright静的プロキシでは、サーバー、ユーザー名、パスワードを含むプロキシをchromium.launch()に渡すか、各ブラウザコンテキストに独自のプロキシを指定して1つのブラウザで複数の静的IPを実行します。その後api.ipify.orgを開いて出口IPを確認します。SteadyProxyの静的IPは30日間レンタルで、2026年10月時点でIPあたり$2.24から、KYC不要、暗号通貨決済です。
主なポイントは?
| 起動オプション | proxy = サーバー、ユーザー名、パスワード(HTTPプロキシログイン) |
|---|---|
| コンテキストごと | browser.newContext({ proxy }) は各コンテキストに専用の静的IPを付与します |
| SOCKS5 | Playwrightでサポートされています。ドキュメントではHTTP(S)プロキシのユーザー名とパスワードについて説明されているため、SOCKS5はIP許可リストと組み合わせてください |
| SteadyProxy 認証 | ユーザー名とパスワード、またはIP許可リスト(最大10 IP) |
| 確認 | api.ipify.orgで出口IP、ipinfo.io/jsonでネットワークを確認 |
| コードチェック | Pythonはpy_compile、Node.jsはnode --checkに2026年10月19日に合格(Playwright 1.60) |
Python版Playwrightで静的プロキシを設定するには?
ブラウザ全体で1つの静的IPを使う場合は起動時にプロキシを指定します。serverにはIPのHTTPアドレス(http://host:port)を、ユーザー名とパスワードはURLではなく専用フィールドに入れます。Playwrightがプロキシのログイン要求に自動で応答するため、サインイン画面は表示されません。この例ではapi.ipify.orgを開き、次にipinfo.io/jsonを開いて両方を出力します。
"""Playwright (Python) through one static proxy.
Install: python -m pip install playwright && python -m playwright install chromium
"""
import os
from playwright.sync_api import sync_playwright
PROXY = {
"server": "http://" + os.environ.get("PROXY_HOST", "gw.steadyproxy.com") + ":"
+ os.environ.get("PROXY_PORT", "7777"),
"username": os.environ.get("PROXY_USER", "USERNAME"),
"password": os.environ.get("PROXY_PASS", "PASSWORD"),
}
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY)
context = browser.new_context()
page = context.new_page()
page.goto("https://api.ipify.org?format=json", timeout=30000)
print("Exit IP:", page.inner_text("body"))
page.goto("https://ipinfo.io/json", timeout=30000)
print("Network:", page.inner_text("body"))
browser.close()
1つのPlaywrightブラウザで複数の静的IPを使うには?
IPごとにブラウザコンテキストを1つずつ作成します。Playwrightのドキュメントには、プロキシはブラウザ全体にも、各ブラウザコンテキスト個別にも設定できると記載されています。コンテキストはCookieやストレージを共有しないため、それぞれが独自のIPを持つ別プロファイルとして機能します。Node.jsの例では2つのIPをループし、各コンテキストでapi.ipify.orgを開き、使用後にコンテキストを閉じます。リストにはダッシュボードにある各IPのホスト、ポート、ユーザー名、パスワードを入力してください。
// Playwright (Node.js): one browser, one context per static IP.
// Install: npm i playwright && npx playwright install chromium
import { chromium } from 'playwright';
// Copy host, port, username and password of each IP from your dashboard.
const staticIps = [
{ name: 'client-a', host: 'gw.steadyproxy.com', port: '7777', username: 'USERNAME', password: 'PASSWORD' },
{ name: 'client-b', host: 'gw.steadyproxy.com', port: '7777', username: 'USERNAME', password: 'PASSWORD' },
];
const browser = await chromium.launch();
try {
for (const ip of staticIps) {
const context = await browser.newContext({
proxy: { server: `http://${ip.host}:${ip.port}`, username: ip.username, password: ip.password },
});
const page = await context.newPage();
await page.goto('https://api.ipify.org?format=json', { timeout: 30000 });
console.log(ip.name, await page.innerText('body'));
await context.close();
}
} finally {
await browser.close();
}
PlaywrightではHTTPとSOCKS5のどちらを使うべき?
ほとんどの場合はユーザー名とパスワード付きのHTTPポートを使用します。これはPlaywrightのドキュメントがプロキシログイン用に説明している組み合わせで、HTTPSページはCONNECTトンネル経由で通信されます。SOCKS5は、お使いのマシンがIP許可リストに登録されていてログインが不要な場合に限り、socks5://のserverで使用してください。1つの静的IPのどちらのポートでも出口IPは同じです。SteadyProxyはHTTP、HTTPS(CONNECT)、SOCKS5をサポートしています。
同じ静的IPで実行間のログイン状態を保持するには?
ログイン後にコンテキストのstorage stateを保存し、次回同じプロキシで読み込みます。Pythonではcontext.storage_state(path='client-a.json')がCookieとローカルストレージを書き出し、browser.new_context(storage_state='client-a.json', proxy=...)がそれを復元します。stateファイルはIPごと、アカウントごとに1つ保持し、あるアカウントのstateを別アカウントのIPで読み込まないでください。これらのファイルは秘密情報として扱ってください。
よくある失敗は?
ほとんどのケースは4つのエラーで説明できます。ERR_PROXY_CONNECTION_FAILEDはホストかポートが間違っているか、お使いの側でブロックされていることを意味します。407レスポンスはログイン情報の誤り、または許可リストにない送信元IPを意味します。ERR_TUNNEL_CONNECTION_FAILEDはプロキシがターゲットを拒否したことを意味します。ブロックリストを確認してください: 銀行、政府、決済ポータル、チケット販売サイト、およびSMTP(メール送信)ポート25、465、587。すべてのページでタイムアウトする場合はIP側の障害です。curlでテストし、サポートに連絡してください。
Playwrightと静的プロキシについて他によくある質問は?
ユーザー名とパスワードをserverのURLに入れてもいい?
代わりにユーザー名とパスワードの専用フィールドを使用してください。これはPlaywrightでHTTPプロキシにログインする際のドキュメント記載の方法で、特殊文字によるURLエンコードの問題を回避できます。serverフィールドには静的IPのスキーム、ホスト、ポートのみを入れます。
Playwrightの各ページに個別のIPが割り当てられる?
いいえ。ページは所属するコンテキストのプロキシを継承し、コンテキストは独自に設定しない限りブラウザのプロキシを継承します。1つのコンテキスト内のすべてのページは1つの静的IPを共有します。複数のIPを使うには、Node.jsの例のように複数のコンテキストを作成するか、複数のブラウザを使用してください。
PlaywrightでFirefoxやWebKitと静的プロキシを併用できる?
はい。proxyオプションはchromium、firefox、webkitの起動で同じ形式です。エンジンによって一部のプロキシエラー処理が異なるため、各エンジンをapi.ipify.orgでテストしてください。エンジン間のQAでは、結果を比較できるよう全エンジンで同じ静的IPを使用してください。
IPに合わせてロケールとタイムゾーンを設定すべき?
ローカルQAやジオロケーションテストでは、はい。browser.new_context(locale='de-DE', timezone_id='Europe/Berlin')を使うと、その地域の訪問者に対してと同じようにサイトが表示されます。これはテストブラウザが要求する内容を変えるだけで、IPは変わりません。IPがサイト側で検出される国を決めます。テスト計画についてはジオロケーションQAをご覧ください。
各コンテキストが正しいIPを使用しているか確認するには?
新しいコンテキストごとに最初にapi.ipify.orgを開き、結果をダッシュボードのIPリストと比較します。一致しなければ実行を失敗させてください。コストはコンテキストごとに軽いリクエスト1回分で、実行全体が誤ったIPで送信されるのを防げます。
10個の静的IPで10個のPlaywrightコンテキストを実行するコストは?
2026年10月時点で、10個のISP IPは$20.86、10個の専用データセンターIPは$12.69(いずれも30日間)です。課金はGB単位ではなくIP単位です。支払いは暗号通貨で、KYC不要です。全プランサイズは料金をご覧ください。
このガイドはどの情報源を使用していますか? (3)
- ネットワーク: HTTPプロキシ(Python) — Playwright (2026-10-19)
- ネットワーク: HTTPプロキシ(Node.js) — Playwright (2026-10-19)
- ipify API — ipify (2026-10-19)