# Playwrightのプロキシ設定：認証付き、PythonとNode | ProxyJam

Playwrightでブラウザごと、またはコンテキストごとにプロキシを設定する方法。HTTPでのユーザー名とパスワード、SOCKS5にIPホワイトリストが必要な理由。検証済みのコード付き。

- Canonical: https://proxyjam.com/ja/integrations/playwright/
- Updated: 2026-10-23
- Language: ja

Playwrightに1つの静的ISPアドレスを渡します。起動時に渡すことも、1つのブラウザコンテキストだけに渡すこともできます。サンプルは、公開前にChromium、Firefox、WebKitでローカルのプロキシに対して実際に動かしたものです。


server、username、passwordを持つproxyをchromium.launchに渡すか、1つのコンテキストに限定するならbrowser.new_contextに渡します。HTTPでは、3つのエンジンすべてがこれらのフィールドで認証します。SOCKS5では、どのエンジンもユーザー名とパスワードを受け付けず、Playwrightは起動を拒否します。お客様のIPをプロキシのホワイトリストに登録し、socks5://のserverだけを渡してください。


## Playwrightでプロキシを設定する

1. **ホスト、ポート、ユーザー名、パスワードをコピーする** ダッシュボードの「マイプロキシ」か、APIの注文情報から取得します。アドレスごとに、専用の4つの値があります。
2. **適用範囲を選ぶ** `launch`で渡すと、ブラウザ全体がプロキシを使います。`new_context`で渡すと、そのコンテキストだけが使うので、1つのスクリプトで複数のコンテキストを別々のアドレス経由で動かせます。
3. **proxyオブジェクトを渡す** `{"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}`です。認証情報はそれぞれ専用のフィールドに入れ、serverのURLの中には決して書きません。
4. **SOCKS5なら認証情報を外す** PlaywrightはSOCKS5プロキシにログインできません。注文をSOCKS5に切り替え、コードのタブにあるホワイトリストの呼び出しでお客様のマシンのIPを登録し、新しいポートを使った`socks5://HOST:PORT`だけを残してください。ホワイトリストが設定されている間、プロキシは一覧にあるアドレスだけを受け入れ、その注文ではユーザー名とパスワードが使えなくなります。空のリストを送るとホワイトリストがオフになり、パスワードでのログインがふたたび使えるようになります。
5. **送信元アドレスを確認する** 本番の実行の前に、そのブラウザかコンテキストのページで[What Is My IP](/ja/what-is-my-ip/)を一度開きます。

## Playwrightの検証済みコード

Python版とNode版のPlaywright 1.64で動かしました。HTTPのサンプルはユーザー名とパスワードを送るので、ホワイトリストを設定していない注文が必要です。SOCKS5のサンプルはホワイトリストを前提とし、先にプロキシをSOCKS5に切り替える必要があります。切り替えると新しいポートが表示されます。大文字の部分をお客様の注文の値に置き換えてください。

### Python

ブラウザ全体のプロキシ、Python。

```
# pip install playwright && playwright install chromium
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://HOST:PORT",
        "username": "USERNAME",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    page.goto("https://example.com/")
    print(page.title())
    browser.close()
```

### Node.js

ブラウザ全体のプロキシ、Node。

```
// npm i playwright && npx playwright install chromium
const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: 'http://HOST:PORT',
      username: 'USERNAME',
      password: 'PASSWORD',
    },
  });
  const page = await browser.newPage();
  await page.goto('https://example.com/');
  console.log(await page.title());
  await browser.close();
})();
```

### コンテキストごと

1つのブラウザコンテキストのプロキシ。

```
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    # The proxy belongs to this context only; another context can use
    # a different address, or none.
    context = browser.new_context(proxy={
        "server": "http://HOST:PORT",
        "username": "USERNAME",
        "password": "PASSWORD",
    })
    page = context.new_page()
    page.goto("https://example.com/")
    print(page.title())
    browser.close()
```

### SOCKS5

ホワイトリスト登録済みIPでのSOCKS5。

```
# Switch the proxy to SOCKS5 and put your machine's IP on its whitelist:
# Chromium cannot send a SOCKS5 username and password.
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={"server": "socks5://HOST:PORT"})
    page = browser.new_page()
    page.goto("https://example.com/")
    print(page.title())
    browser.close()
```

### ホワイトリストの呼び出し

お客様のIPをプロキシのホワイトリストに追加します。

```
# Put the public IPv4 address your code runs from on the proxy's
# whitelist. Replaces the list; an empty list turns whitelisting off
# and the proxy falls back to username and password.
curl -X PUT "https://api.proxyjam.com/public/v1/orders/ORDER_ID/whitelist" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"whitelisted_ips": ["YOUR_IP"]}'
```


## Playwrightの各ブラウザが受け付けるもの

|  | HTTPとパスワード | SOCKS5とパスワード | SOCKS5、ホワイトリスト登録済み |
|---|---|---|---|
| Chromium | 動作する | 起動時に拒否 | 動作する |
| Firefox | 動作する | 起動時に拒否 | 動作する |
| WebKit | 動作する | 起動時に拒否 | 動作する |

2026-10-22に、macOS上のPython版Playwright 1.64で検証しました。各エンジンを、パスワードを求めるローカルのプロキシと、ホワイトリスト登録済みのクライアントを受け入れるプロキシに対して起動しています。「起動時に拒否」は、Playwrightが起動時にエラーで停止したことを意味します。


## Playwrightのしくみとアドレスの対応

- **1コンテキストに1アドレス:** ブラウザコンテキストごとに、それぞれの注文の静的IPを持たせられます
- **HTTPのサインイン:** usernameとpasswordのフィールド。Chromium、Firefox、WebKitが受け付けます
- **SOCKS5のサインイン:** ホワイトリスト登録済みのIPv4アドレスによるものだけ。APIかMCPで設定します
- **安定性:** お支払いいただいた期間中ずっと、実行をまたいでIPは変わりません

## Playwrightのプロキシでうまくいかない点

### serverの文字列に認証情報を書く

Playwrightはユーザー名とパスワードをそれぞれ専用のフィールドから読み取ります。代わりにserverのURLに書くと、まったく送られません。当社のテストでは、最初のナビゲーションがタイムアウトするまで止まったままで、認証情報が原因だと示すメッセージは出ませんでした。

### SOCKS5のパスワード

どのエンジンもSOCKS5の認証を拒否し、そのエラーはページが開く前の起動時に出ます。別のライブラリを使っても解決しません。スクリプトを実行するIPをホワイトリストに登録し、認証情報を外してください。

### new_pageでアドレスが変わると思い込む

ページはそのコンテキストのプロキシを共有し、コンテキストは専用のプロキシを指定されない限りブラウザのプロキシを共有します。2つのアドレスを並行して使うには、それぞれにプロキシを指定した2つのコンテキストを作成します。

### 送信元の確認を省く

ポートの打ち間違いや、HTTPのままのプロキシなら目に見えて失敗します。しかし、proxyオブジェクトなしで作成したコンテキストは、何も知らせずに直接出ていきます。設定したコンテキストごとに一度、IPを返すページを読み込んでください。


## Playwrightのプロキシに関する質問

### Playwrightで認証付きプロキシを設定するには？

server、username、passwordを持つオブジェクトを、launchかnew_contextに渡します。HTTPプロキシでは、プロキシが求めたときに、Chromium、Firefox、WebKitのすべてがこの認証情報を送ります。

### PlaywrightでパスワードのあるSOCKS5プロキシを使えますか？

使えません。3つのエンジンのすべてで、Playwrightはブラウザがプロキシ認証付きのSOCKS5に対応していないというエラーを出して、起動時に停止します。スクリプトを実行するIPをホワイトリストに登録し、socks5のserverだけを渡してください。当社のホワイトリストはHTTPだけでなくSOCKS5にも適用されます。

### ページごとに別のプロキシを使うには？

ブラウザコンテキストごとに専用のプロキシを指定し、そのコンテキストでページを開きます。1つのコンテキスト内のページは常にそのプロキシを共有するので、ページごとにプロキシを分けるには、ページごとに1つのコンテキストが必要です。

### PythonとNodeで設定は同じですか？

同じ3つのフィールドを持つ同じオブジェクトです。Pythonでは辞書として、Nodeではオブジェクトリテラルとして書きます。このページのサンプルはどちらもPlaywright 1.64で動かしました。

### プロキシをスクレイピングに使えますか？

自社ページの地域別テスト、品質チェック、広告検証、価格調査や市場調査、SEOモニタリング、ブランド保護は、当社の適正利用ポリシーのもとで事前審査なしに行えます。公開されているというだけではデータ収集の根拠にはならず、個人データには明示された適法な根拠が必要です。また、アドレスでCAPTCHA、ボット検出、レート制限、利用停止を回避することはできず、それを試みることもポリシーで禁止しています。


コンテキストと静的アドレスは1対1で対応します。市場ごと、あるいはジョブごとに1つのコンテキストを用意すれば、スクリプトを実行するたびに、それぞれが変わらないIPから対象に届きます。動かすコンテキストの数だけ[ISPプロキシ](/ja/isp-proxies/)でアドレスを購入し、プランは[料金](/ja/pricing/)で比較してください。ブラウザを使わずに取得するには、[Python requests](/ja/integrations/python-requests/)のガイドをご覧ください。



## 出典

- [Playwright documentation, Network: HTTP proxy](https://playwright.dev/python/docs/network#http-proxy)：起動時とコンテキストごとのproxyオプション
- [Playwright API, BrowserType.launch](https://playwright.dev/python/docs/api/class-browsertype#browser-type-launch)：server、bypass、username、passwordのフィールド
- [RFC 1929, Username/Password Authentication for SOCKS V5](https://www.rfc-editor.org/rfc/rfc1929)：ブラウザが実装していないSOCKS5のログイン




Playwrightは1つのAPIでChromium、Firefox、WebKitを操作し、プロキシはブラウザやコンテキストを作成するときの設定の一部です。そのため1つのスクリプトで複数のアドレスを簡単に使えますが、ここに唯一の厳しい制限もあります。パスワード付きのSOCKS5です。

## PythonでのPlaywrightのプロキシ

Pythonのサンプルは、ブラウザ全体にプロキシを設定してChromiumを起動します。コンテキストごとのサンプルは、代わりに1つのコンテキストに限定します。エンジンを切り替えるには、chromiumをfirefoxかwebkitに変えるだけで、proxyオブジェクトはそのままです。

## Playwrightのプロキシ認証

プロキシがHTTPで通信する場合、3つのエンジンはプロキシの407に対して、proxyオブジェクトのユーザー名とパスワードで応答します。SOCKS5プロキシには、どのエンジンもそうした応答をしません。そのため、SOCKS5のサンプルには認証情報がなく、ホワイトリストを前提にしています。

## ページごとのPlaywrightのプロキシとbypass

プロキシを1つのページだけに付けることはできません。単位はコンテキストです。アドレスごとに1つのコンテキストを作成し、そのアドレスを共有すべきページをその中で開きます。Playwrightではコンテキストの作成は軽いので、1つのストアを3か国から確認するスクリプトは、3つのコンテキストを持ち、それぞれを別々の注文から作ります。

proxyオブジェクトはbypassフィールドも受け取ります。直接接続すべきホストをカンマ区切りで並べたリストです。自社の社内サービスやローカルのテストサーバーに使えば、外部に向けた通信だけが、お支払いいただいているアドレスから出ていくようになります。

