Puppeteerにプロキシが必要な理由
Puppeteer用のプロキシを使用すると、ツールは常に実行中のマシンのIPアドレスを使用するのではなく、別のIPアドレス経由で接続できるようになります。これは、位置情報に基づくタスクや、テスト、監視、その他接続元が重要な作業において役立ちます。
Puppeteerは依然としてメインのタスクを処理します。接続元を管理するのはプロキシの役割です。

Carl Gamutan
更新日:2026年10月7日
公開日:2022年4月8日
Puppeteer は、ユーザーに高水準のヘッドレス Chrome API を提供する Node.js ライブラリです。ここでは、そのためのプロキシサーバーの作成方法をご紹介します!
Puppeteer用のプロキシを使用すると、ツールは常に実行中のマシンのIPアドレスを使用するのではなく、別のIPアドレス経由で接続できるようになります。これは、位置情報に基づくタスクや、テスト、監視、その他接続元が重要な作業において役立ちます。
Puppeteerは依然としてメインのタスクを処理します。接続元を管理するのはプロキシの役割です。
プロキシがないと、ウェブサイトには常に同じIPアドレスが認識されます。アクティビティが増えると、そのIPアドレスがレート制限にかかったり、ブロックされたりする可能性があります。
所在地も重要な要素となります。ドイツからアクセスしたページと、米国からアクセスしたページでは、表示されるコンテンツが異なる場合があります。
Puppeteer用のプロキシを使用すれば、必要に応じて異なるIPアドレスや所在地から接続することが可能になります。
適切なプロキシの種類は、作業内容によって異なります。
| プロキシの種類 | スクレイピング | アカウント管理 | テスト | モニタリング |
|---|---|---|---|---|
| レジデンシャル | 所在地やIPの送信元が重要な場合に適している | アカウントにレジデンシャルIPが必要な場合に有用 | 所在地に基づくテストに適している | 異なる場所からのコンテンツ確認に有用 |
| ISP | 安定したIPが必要な場合に適している | 1つのIPで長時間のセッションを行う際に有用 | 一貫したIPでのテストに適している | 同じIPからの継続的なチェックに有用 |
| データセンター | 速度や大量のリクエストに適している | レジデンシャルIPが不要な場合に適している | 一般的なテストに適している | 頻繁な自動チェックに適している |
住宅用プロキシは、IPの送信元や場所が重要な場合に役立ちます。ISPプロキシは、同じIPを長期間アクティブに保つ必要がある場合に適しています。データセンタープロキシは、速度とスケールが主な焦点となる場合に適しています。
最適な選択肢は、そのタスクにジオターゲティング、安定した接続、あるいはより大規模なIPプールへのアクセスが必要かどうかも左右します。
Puppeteerのプロキシ設定には、Geonodeのホスト、ポート、ユーザー名、パスワードが必要です。これらの認証情報を環境変数に保存し、コード内でプロキシを設定する際に読み込みます。
Geonode をご利用ですか? ユーザー名とパスワードは アクセス認証情報 から、ホスト、ポート、プロトコルは プロキシサーバー情報 から取得してください。
Puppeteer では、ブラウザを起動する際に ``--proxy-server`
` を通じてプロキシのホスト名とポート番号を指定します:
import puppeteer from "puppeteer";
import "dotenv/config";
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
次に、ページを作成し、プロキシの認証情報を指定します:
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
実際のユーザー名とパスワードは、ソースファイルに直接記述するのではなく、環境変数に格納しておいてください。この設定により、テストではプロキシ経由で HTTP 200 が正常に返されました。
Geonode
を実行すると、4つの値が返されます:
proxy.geonode.io:PORT:USERNAME:PASSWORD
Puppeteer を使用する場合は、これらの値を個別に保持してください。環境変数に格納します:
GEONODE_PROXY_HOST=proxy.geonode.io
GEONODE_PROXY_PORT=9000
GEONODE_PROXY_USER=USERNAME
GEONODE_PROXY_PASS=PASSWORD
--proxy-server
を通じてホストとポートを読み込み、ページに対して認証を行います:
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
有効な認証情報でテストしたところ、HTTP 200 が返されました。パスワードが間違っていた場合、プロキシは HTTP 407 を返し、次のような応答が返されました:
Authentication error. Please check your authentication settings.
リクエストで同じIPを維持する必要がない場合は、IPローテーションを使用してください。
今回のテストでは、HTTPポートローテーションを有効にしてPuppeteerを起動しました:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
新しいブラウザセッションを使用して5件のリクエストを送信しました:
Request 1: 108.31.182.167
Request 2: 45.186.93.125
Request 3: 109.254.131.42
Request 4: 109.153.11.141
Request 5: 37.113.173.139
ユニークなIP数:5
IPローテーション:有効
このテストでは、5件のリクエストすべてで異なるIPが返されました。これは実行中にローテーションが機能したことを確認するものではありますが、今後のリクエストごとに新しいIPが保証されるわけではありません。
関連するリクエストを同じIPで維持する必要がある場合は、代わりにスティッキーセッションを使用してください。スティッキーポートを使用し、セッションの詳細をユーザー名に追加します:
const browser = await puppeteer.launch({
headless: true,
args: ["--proxy-server=http://proxy.geonode.io:10000"],
});
const page = await browser.newPage();
await page.authenticate({
username:
`${process.env.GEONODE_PROXY_USER}-session-blogpuppeteer01-lifetime-10`,
password: process.env.GEONODE_PROXY_PASS,
});
同じセッションを使用して3件のリクエストを実行しました:
Request 1: 178.64.64.40
Request 2: 178.64.64.40
Request 3: 178.64.64.40
同一IP:はい
3件のリクエストすべてで同じIPが使用されました。
利用可能な設定については、Geonode
のガイドにあるプロキシのローテーションおよびスティッキーセッションを参照してください。
プロキシが機能していない場合は、まず接続情報を確認しましょう。ユーザー名とパスワードを確認した後、ホスト、ポート、プロトコルを確認してください。Puppeteerから返されるエラーメッセージは、通常、問題の原因を絞り込むのに役立ちます。
407 エラーは通常、認証に関する問題を示しています。
Puppeteer で間違ったパスワードを使用してテストしたところ、プロキシから次のような応答が返されました:
HTTP status: 407
Authentication error. Please check your authentication settings.
まず、ユーザー名とパスワードを確認してください。それらが正しい場合は、ページの作成後に page.authenticate() が呼び出されていることを確認してください。
接続エラーは通常、Puppeteerがプロキシに接続できなかったことを意味します。
まず、ホスト名とポート番号を確認してください。次に、プロトコルが使用中のプロキシサーバーと一致していることを確認してください。
接続失敗のテストでは、PuppeteerはERR_TUNNEL_CONNECTION_FAILED
を返さなかった。接続できないプロキシポートを使用した場合、
net::ERR_CONNECTION_RESET at http://ip-api.com/json
が返された。したがって、接続がどのように失敗するかによって、Chromiumのエラーメッセージは異なる場合がある。
タイムアウトとは、設定された時間内にページがレスポンスを受け取れなかったことを意味します。
まず、ターゲットURLが正常に動作するか、およびプロキシに接続できるかを確認してください。両方が正常に動作している場合は、page.goto()
に渡されたタイムアウト値を確認してください。
今回のテストでは、タイムアウトを5秒に設定したルーティング不可のプロキシを使用しました:
await page.goto(url, {
timeout: 5000,
});
。Puppeteerは次のように返しました:
TimeoutError: Navigation timeout of 5000 ms exceeded
。明示的なタイムアウトを設定することで、プロキシ接続がハングした際にスクリプトが速やかに失敗するようになります。
Puppeteer特有の問題として、--proxy-server
内にユーザー名とパスワードを直接記述していたことが判明しました。
この設定では失敗しました:
--proxy-server=http://USERNAME:PASSWORD@proxy.geonode.io:9000
Puppeteerからの応答:
net::ERR_NO_SUPPORTED_PROXIES
修正方法は、起動引数を通じてプロキシサーバーのみを渡すことです:
args: ["--proxy-server=http://proxy.geonode.io:9000"]
その後、別途認証を行います:
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
設定を変更した後、リクエストはHTTP 200で成功しました。
Puppeteerは、アプリケーション内のリクエストや接続を処理します。Geonodeは、プロキシ接続を処理します。
ジョブに応じて、一般家庭用、ISP、データセンターのプロキシを選択でき、必要に応じてローテーション、スティッキーセッション、ジオターゲティングを利用できます。これにより、プロキシの設定をアプリケーションの他のコードから分離できます。
プランはプロキシの種類によって異なり、GB単位で課金されるオプションもあります。
よくある質問
テストしたPuppeteerの設定では、認証が必要なSOCKS5は機能しませんでした。
GeonodeのSOCKS5(ポートローテーション)をpage.authenticate()で試しましたが、Puppeteerからは次のようなエラーが返されました:
net::ERR_SOCKS_CONNECTION_FAILED
また、--proxy-serverに認証情報を埋め込んで試しましたが、次のようなエラーが返されました:
net::ERR_NO_SUPPORTED_PROXIES
テストした認証が必要なSOCKS5の設定はいずれも機能しなかったため、この構成では、--proxy-serverおよびpage.authenticate()を使用した検証済みのHTTP設定の方が安全な選択肢となります。
はい、Puppeteerでは、ローテーションプロキシの設定を通じてブラウザを起動する場合、ローテーションプロキシを使用することができます。
当社のテストでは、5つの新しいブラウザセッションで5つの異なるIPアドレスが返されました。これはテスト中にIPアドレスのローテーションが行われたことを裏付けていますが、すべてのリクエストやブラウザセッションで異なるIPアドレスが保証されるわけではありません。
はい。Geonodeでは無料トライアルを提供しているため、有料プランに移行する前にPuppeteerを使ってプロキシを試用することができます。現在の無料トライアルとプランを確認する。
puppeteer.launch()
内の ``--proxy-server`
` を使用して、プロキシのホスト名とポートを設定してください。
その後、各ページを作成した後に ``page.authenticate()`
` を呼び出し、ユーザー名とパスワードを指定してください:
const browser = await puppeteer.launch({
args: ["--proxy-server=http://proxy.geonode.io:9000"],
});
const page = await browser.newPage();
await page.authenticate({
username: process.env.GEONODE_PROXY_USER,
password: process.env.GEONODE_PROXY_PASS,
});
これは、当社のテストで動作した設定です。
いいえ。この Puppeteer の設定を使用する場合は、認証情報を別々に管理してください。
--proxy-server に USERNAME:PASSWORD@ を直接埋め込んだところ、テストでは「ERR_NO_SUPPORTED_PROXIES」というエラーが返されました。そこにホストとポートのみを指定し、認証情報には page.authenticate() を使用すると、正常に動作しました。