前提
- 2021/02/21 現在の情報です
- DDoS protection にも様々な形態があります
結論
Puppeteer は使いません*1。Playwright を使います。
さらに、内部エンジンとして firefox
を用います。
具体例
Cloudflare の DDoS protection が設定されている URL を https://ddos-protection.example.com/
と仮定します。
このとき、以下のコードで実行すれば、DDoS protection をすり抜けてページにアクセスできます*2。なお、Playwright
は Npm
や Yarn
でインストール済みとします。
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が重要なポイントその1です await page.waitForNavigation('load'); // page.waitForSelectorが重要なポイントその2です // 遷移先ページに存在する要素を指定します // これがないと Protection 突破後、完全にページが切り替わる前に次の処理が走ってしまいます await page.waitForSelector('div.foooooo') // 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 ....
という画像になっているはずです。