Cloudflare の DDoS protection を Puppeteer でスルーする方法

結論

Puppeteer は使いません*1Playwright を使います。

さらに、内部エンジンとして firefox を用います。

具体例

Cloudflare の DDoS protection が設定されている URL を https://ddos-protection.example.com/ と仮定します。

このとき、以下のコードで実行すれば、DDoS protection をすり抜けてページにアクセスできます*2。なお、PlaywrightNpmYarn でインストール済みとします。

const playwright = require('playwright');

(async () => {
  for (const browserType of ['firefox']) {
    const browser = await playwright[browserType].launch();
    const context = await browser.newContext();
    const page = await context.newPage();

    await page.goto('https://ddos-protection.example.com/')
    // page.waitForNavigationが重要です
    await page.waitForNavigation('networkidle2');

    // DDoS protection をすり抜けたことを確認
    await page.screenshot({ path: `ddos-protection-passed.png` });
    await browser.close();
  }
})();

ここで、 for (const browserType of ['firefox']) {firefox の部分を chromium などに変えて比較してみましょう。

chromium などの場合は、キャプチャされた画像は Checking your browser before accessing .... という画像になっているはずです。

補足

2021/02/21 現在の情報です。

*1:標題が大嘘になってしまいますが

*2:page.waitForNavigation の部分以外は公式ドキュメントのサンプルコードのままです

Powered by はてなブログ