言語を変更
日本語 English Русский Deutsch Español Français Italiano Українська Tiếng Việt Türkçe Bahasa Indonesia हिन्दी 中文
メニュー
料金
プロキシ
プロキシの種類
地域から探す77の地域
ソリューション
リソース

Playwrightでプロキシを使う方法

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

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を一度開きます。

# 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()
// 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();
})();
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()
# 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()
# 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の検証済みコード

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

APIドキュメント全体

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

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

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

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

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

SOCKS5のパスワード

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

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

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

送信元の確認を省く

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

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

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

Playwrightの次のステップ

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

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

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

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

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

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

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

PythonとNodeで設定は同じですか?

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

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

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

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

出典