Puppeteer で認証付きプロキシを設定する方法(Node.js ガイド)
更新日:
Puppeteer は Chrome DevTools Protocol(CDP)経由で Chrome および Chromium を制御し、HTTP 407 認証に対応するネイティブ API await page.authenticate({ username, password }) を備えています。起動オプション --proxy-server=http://ip:port と page.authenticate() を組み合わせることで、外部拡張機能を使わずに Node.js スクレイパーを VinaProxy の固定静的プロキシ経由でルーティングできます。
--proxy-server=http://ip:port + page.authenticate({ username, password })- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
Puppeteer における 2 ステップのプロキシ設定手順
--proxy-server 起動引数の中に直接 user:pass@ を含めてはいけません。起動時にはホストとポートのみを指定し、認証情報は各 Page インスタンス側で付与します:
| ステップ | Puppeteer 実装コード | 技術的な目的と理由 |
|---|---|---|
| 1. Chromium の起動 | puppeteer.launch({ args: ['--proxy-server=http://ip:port'] }) | Chromium のネットワーク通信を VinaProxy プロキシサーバーに接続 |
| 2. ページの認証 | await page.authenticate({ username, password }) | CDP 経由で HTTP 407 認証チャレンジに応答する認証情報を提供 |
| 3. 対象ページへ遷移 | await page.goto(url, { waitUntil: 'domcontentloaded' }) | 確立された認証済みトンネルを経由して対象 URL を読み込み |
proxy-chain を活用したタブごとのプロキシローテーション
page.authenticate()の有効範囲は単一のPageタブ内に限定されるため、browser.newPage()で生成した新しいタブごとに必ず呼び出す必要があります- 単一の Chromium プロセス内の各シークレットコンテキストで異なるプロキシを割り当てる場合は、
proxy-chainパッケージ(anonymizeProxy())でhttp://user:pass@ip:portをラップし、browser.createBrowserContext({ proxyServer })に渡します puppeteer-extraおよび検出回避用プラグインpuppeteer-extra-plugin-stealthと完全な互換性があります
手順
- 1
--proxy-server 引数を puppeteer.launch() に渡す
const browser = await puppeteer.launch({ args: ['--proxy-server=http://ip:port'] });でブラウザを起動します。 - 2
新規ページで await page.authenticate() を呼び出す
const page = await browser.newPage();でタブを開き、await page.authenticate({ username: 'USER', password: 'PASS' });を実行します。 - 3
接続元 IP アドレスをテストする
await page.goto('https://vinaproxy.com/api/my-ip');を実行し、取得した JSON から IP を確認します。 - 4
ブラウザプロセスを正常終了する
処理完了後、
await browser.close();を呼び出してリソースを解放します。
よくある質問
なぜ Puppeteer で ERR_NO_SUPPORTED_PROXIES エラーが発生するのですか?
起動オプションに --proxy-server=http://user:pass@ip:port のように認証情報を直接含めると発生します。--proxy-server=http://ip:port と記述し、認証情報は await page.authenticate({ username, password }) 側で渡してください。
browser.newPage() で開いた 2 つ目のタブで HTTP 407 エラーになる原因は?
page.authenticate() の認証はタブ単位で管理されます。新しく開いたタブでナビゲーションを行う前に、必ず await secondPage.authenticate({ username, password }) を実行してください。
ヘッドレス Chrome スクレイピングにおいて転送量の制限はありますか?
いいえ。VinaProxy の専用 IPv4 および静的 ISP プランはすべて月間データ転送量無制限です。
専用静的 IP で Node.js Puppeteer の自動化環境を強化
世界 7 カ国の拠点から即時発行、帯域制限なしの専用 IPv4 & 静的 ISP プロキシ。
Puppeteer 用プロキシを購入