# 回転式レジデンシャルIPのPlaywrightプロキシ設定（PythonとNode.js）

> 認証付きレジデンシャルプロキシをブラウザまたはコンテキスト単位で、スティッキーセッション、軽量化したページ向けのPlaywrightプロキシ設定（PythonとNode.js）

- URL: https://crawlrelay.com/ja/docs/playwright/
- 最終更新: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

ブラウザーごとに、あるいは1つの国または1つのステッキーセッションごとに1つの出口用プロキシを起動時に割り当てます。その後、不要なトラフィックはブロックして削減してください。

**クイックアンサー — Playwrightで認証済みプロキシを使うには？**

`proxy`オブジェクトに`server`、`username`、`password`を入れて`launch()`または`new_context()`に渡します：`server`は`http://gw.crawlrelay.com:7777`で、認証情報はサーバーURLではなく専用のフィールドに入れます。**CrawlRelay**レジデンシャルプロキシの場合、ユーザー名に国情報とセッションIDを入れて各コンテキストが独自の出口を持つようにします。トラフィック費用は50 GBから$0.50/GBで、KYC不要の暗号通貨払い対応です。

## Playwright設定の概要

| 属性 | 値 |
| --- | --- |
| プロキシオプション | `{"server": "http://gw.crawlrelay.com:7777", "username": ..., "password": ...}` |
| どこに | ブラウザー全体は`launch(proxy=...)`、またはコンテキストごとに`new_context(proxy=...)` |
| ポート | HTTPポートは7777；HTTPSサイトはCONNECT経由 |
| SOCKS5 | ChromiumはSOCKS5認証に対応していません：HTTPポートを使用してください |
| コンテキストごとに1つのIP | コンテキストのユーザー名に`-session-<id>-ttl-<minutes>`を入れる |
| 標準的なページのトラフィック量 | すべてのリソース込みで約2 MB；画像・フォント・メディアをブロックすると数百KBまで減少 |

## どうやってブラウザーコンテキストごとに国やセッションを設定する？

国ごとまたはステッキーセッションごとに1つのコンテキストを作成します。コンテキストはブラウザーより軽量で、各々が独自のクッキー、ストレージ、プロキシ認証情報を保持します。コンテキストのロケールを出口国に合わせて、サイトが一貫した訪問者と認識できるようにしてください。

*Python（同期API）：国ごとに1つのコンテキスト*

```python
from playwright.sync_api import sync_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
LOCALES = {"us": "en-US", "de": "de-DE", "jp": "ja-JP"}

with sync_playwright() as p:
    browser = p.chromium.launch()
    for country, locale in LOCALES.items():
        context = browser.new_context(
            proxy={"server": GATEWAY, "username": "USERNAME-country-%s" % country, "password": "PASSWORD"},
            locale=locale,
        )
        page = context.new_page()
        page.goto("https://api.ipify.org", wait_until="domcontentloaded")
        print(country, page.inner_text("body"))
        context.close()
    browser.close()
```

## Node.jsでPlaywrightのプロキシを設定しトラフィックを削減するには？

Node.jsでもオプションの形は同じです。レンダリングされたページの大部分は画像・フォント・メディアで、HTTP Archive Web Almanac 2025のモバイル中央値は2,164 KBです。テキストやリンクのみ必要な場合は、ルートハンドラーでそのリクエストを中止しましょう。

*Node.js：起動時にステッキーセッション、重いリソースはブロック*

```javascript
import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: {
    server: "http://gw.crawlrelay.com:7777",
    username: "USERNAME-country-us-session-pw1-ttl-30",
    password: "PASSWORD",
  },
});
const context = await browser.newContext();
// Images, fonts and media are most of a page's bytes
await context.route("**/*", (route) =>
  ["image", "font", "media"].includes(route.request().resourceType()) ? route.abort() : route.continue()
);
const page = await context.newPage();
const response = await page.goto("https://example.com/", { waitUntil: "domcontentloaded" });
console.log(response.status(), await page.title());
await browser.close();
```

## 多くのページをasyncioで並行実行するには？

固定プールのコンテキストをasync APIで使います。各コンテキストは生存期間中ずっと1つのステッキーセッションを維持し、サイトはリクエストごとに異なるIPではなく数人の安定した訪問者を見ることになります。一定数のページ処理またはエラー後に新しいセッションIDでコンテキストを再利用します。

*Python（非同期API）：ステッキーコンテキストのプール*

```python
import asyncio
import uuid

from playwright.async_api import async_playwright

GATEWAY = "http://gw.crawlrelay.com:7777"
WORKERS = 4


async def worker(browser, queue):
    session = uuid.uuid4().hex[:10]
    context = await browser.new_context(proxy={
        "server": GATEWAY,
        "username": "USERNAME-country-us-session-%s-ttl-30" % session,
        "password": "PASSWORD",
    })
    page = await context.new_page()
    while not queue.empty():
        url = await queue.get()
        try:
            response = await page.goto(url, wait_until="domcontentloaded", timeout=45000)
            print(session, url, response.status if response else None)
        except Exception as exc:  # timeouts and network errors: log and move on
            print(session, url, type(exc).__name__)
        finally:
            queue.task_done()
    await context.close()


async def main(urls):
    queue = asyncio.Queue()
    for url in urls:
        queue.put_nowait(url)
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        await asyncio.gather(*(worker(browser, queue) for _ in range(WORKERS)))
        await browser.close()


asyncio.run(main(["https://example.com/", "https://example.org/"]))
```

## ERR_TUNNEL_CONNECTION_FAILEDやERR_PROXY_CONNECTION_FAILEDが出る理由は？

- **net::ERR_TUNNEL_CONNECTION_FAILED** はプロキシがCONNECTリクエストを拒否したことを意味します。多くの場合、`server`に認証情報を入れるべきところを`username`と`password`に入れてしまい、Chromiumが認証情報を送らなかったためです。[トンネルエラー](https://crawlrelay.com/ja/docs/errors/err-tunnel-connection-failed/)を参照]
- **net::ERR_PROXY_CONNECTION_FAILED** はブラウザーがゲートウェイに到達しなかったことを意味します：ホストやポートのタイプミス、またはそのポートをブロックするネットワークです。[プロキシ接続エラー](https://crawlrelay.com/ja/docs/errors/err-proxy-connection-failed/)を参照]
- `goto`における「Timeout 30000ms exceeded」は通常、トラッカーをロードし続けるページで`load`または`networkidle`を待機している状態です。まず`domcontentloaded`を待ち、必要なセレクターを待機してください。

## Playwrightのスクレイパーがしてはいけないことは？

PlaywrightはJavaScriptが必要な公開ページのレンダリングに使い、人のなりすましには使わないでください。CrawlRelayの[Acceptable Use Policy](https://crawlrelay.com/ja/acceptable-use/)では、当社のゲートウェイ経由でブラウザーを使ってアカウントを大量作成したり、アカウントの乗っ取り、CAPTCHAの自動解決、サイトのブロック回避などは禁止しています。ステルスプラグインやフィンガープリント偽装のドキュメントもありません。サイトがブラウザーを挑戦する場合は速度を落とし、robots.txtや利用規約を確認してアクセス許可を求めるかAPIを利用してください。

## Playwrightとプロキシ：よくある質問

### Playwrightの各コンテキストで別々のプロキシを使える？

はい。Pythonでは`proxy`を`browser.new_context()`に、Node.jsでは`browser.newContext()`に渡してください。各コンテキストは独自の出口、クッキー、ストレージを持ちます。Windowsの非常に古いPlaywrightリリースでは起動時にプロキシが必要でした。もしエラーが出るなら、プレースホルダープロキシで起動し、コンテキストごとに本物のプロキシを設定してください。

### Playwrightは認証付きSOCKS5プロキシをサポートしてる？

ChromiumはSOCKS5のユーザー名・パスワード認証をサポートしていません。 ゲートウェイのHTTPポート（7777）を使ってください。CONNECTトンネル経由でHTTPSサイトに対応し、Playwrightが操作する全ブラウザーエンジンでユーザー名とパスワードをサポートします。

### PlaywrightのページでどのIPと国が使われているかどうやって確認する？

対象ページの前に同じコンテキストで`https://api.ipify.org`を開き、本文テキストを読み取ってください。ステッキーセッションはレジデンシャルプロキシ端末がオンラインの間だけIPを維持するので、各コンテキスト開始時にIPをログし変化を確認することをおすすめします。

### Playwrightページはプロキシ経由でどれくらいトラフィックを使う？

HTML、スクリプト、スタイル、画像、フォント、APIコールなどすべて課金対象です。フルページの中央値は約2 MBです。画像・フォント・メディアをブロックすれば数百キロバイトまで減ります。`response`ハンドラーで50ページ分のレスポンスサイズを合計して実測してください。

### スクレイピングにはヘッドレスとヘッディブラウザー、どちらを使う？

サーバーでは通常ヘッドレスで、リソース消費が少ないです。ページ表示のデバッグにはヘッディブラウザーを使ってください。どちらを使ってもルールは同じ：公開ページを節度ある速度でレンダリングし、サイトのrobots.txtや利用規約を尊重しましょう。

**公開ページはレジデンシャルプロキシのIPでレンダリングする** 10 GB用の$5.94、50 GBからの$0.50/GB。 [料金を見る](https://crawlrelay.com/ja/pricing/) · [Puppeteerガイド](https://crawlrelay.com/ja/docs/puppeteer/)

---

CrawlRelay: CrawlRelayは開発者第一のレジデンシャルプロキシおよび4G/5Gモバイルプロキシの回転型サービスです：有効期限なしの使った分だけ支払うトラフィックを$0.50/GBから暗号通貨で購入、IDアップロード不要。KYC不要 — IDもセルフィーも書類も不要。暗号通貨で支払い可能。
