Puppeteer を使用した Web スクレイピングのガイドで強調されているように、このブラウザ自動化ライブラリは、動的コンテンツ サイトからデータを抽出するための素晴らしいツールです。ただし、他のツールと同様に、欠点もあります。そこで Puppeteer Extra の出番です。
このガイドでは、 puppeteer
ラップしてプラグイン サポートで拡張するライブラリであるpuppeteer-extra
を紹介します。Puppeteer スクレイピング プロジェクトを次のレベルに引き上げる準備をしましょう! 🚀
Puppeteer Extra は、 puppeteer
の軽量ラッパーで、クリーンなインターフェースを通じてプラグインの統合を可能にします。Puppeteer のチームによって開発されたものではありませんが、このコミュニティ主導のプロジェクトは毎週数十万回ダウンロードされ、GitHub で 6,000 を超えるスターを獲得しています 📈。
以下の GitHub スターチャートを確認してください。puppeteer puppeteer-extra
リポジトリの人気は長年にわたって着実に上昇していることがわかります。
Puppeteer Extra で公式にサポートされているプラグインは次のとおりです。
User-Agent
ヘッダーを匿名化します。さらに、次のコミュニティ プラグインと統合されます。
Puppeteer は、間違いなくスクレイピングとテストのためのトップクラスのヘッドレス ブラウザ ライブラリの 1 つです。しかし、正直に言うと、特にブラウザ フィンガープリンティングや CAPTCHA などのボット対策技術に直面した場合、限界があります。reCAPTCHA自動化への対処方法については、ガイドをお読みください。
ボット対策を備えた Web サイトは、Puppeteer スクリプトを簡単に検出してブロックできます。Puppeteer のデフォルトの動作を拡張およびカスタマイズする方法があればいいのですが...
…そうです、それがまさに Puppeteer Extra の目的です!
Puppeteer Extra は Puppeteer のパワーアップのようなもので、プラグインのサポートを追加して、これらの大きな欠点を解決します。すべてをオーバーライドまたは拡張するのではなく、Puppeteer をラップして、必要なプラグインのみを登録できるようにします。🦸
puppeteer-extra
: Web スクレイピングのセットアップとプラグイン次のようにして、プロジェクトの npm 依存関係にPuppeteer Extraを追加できます。
npm install puppeteer-extra
⚠️注意: puppeteer-extra
動作するにはpuppeteer
が必要なので、プロジェクトに両方のパッケージがインストールされていることを確認してください。
次に、 puppeteer
ライブラリではなく、 puppeteer-extra
からpuppeteer
オブジェクトをインポートする必要があります。
const puppeteer = require("puppeteer-extra") // for ESM users: // const { puppeteer } from "puppeteer-extra"
Puppeteer API のすべては同じままですが、ちょっとした魔法が追加されました ✨。puppeteer オブジェクトpuppeteer
、Puppeteer Extra プラグインをプラグインするためのuse()
メソッドを公開するようになりました。
これらのプラグインの機能について詳しく調べ、Web スクレイピングのレベルをどう向上させるかを見てみましょう。
Puppeteer Extra Plugin Stealth (単に Puppeteer Stealth とも呼ばれる)には、ボット検出を減らすように設計された一連の構成が含まれています。これは、Puppeteer をボットとして公開する可能性のある検出可能なプロパティと設定を上書きします。
詳細については、 Puppeteer Stealth によるブロックを回避する方法に関するガイドをご覧ください。
⚙️インストール:
npm install puppeteer-extra-plugin-stealth
💡使用方法:
const StealthPlugin = require("puppeteer-extra-plugin-stealth") // for ESM users: // import StealthPlugin from "puppeteer-extra-plugin-stealth" puppeteer.use(StealthPlugin())
Puppeteer ブラウザが特定のリソースを読み込まないようにするプラグイン。サポートされているリソース タイプには、 document
、 stylesheet
、 image
、 media
、 font
、 script
、 texttrack
、 xhr
、 fetch
、 eventsource
、 websocket
、 manifest
、 other
あります。
リソースのブロックは、グローバルとローカルの両方で構成できます。
⚙️インストール:
npm install puppeteer-extra-plugin-block-resources
💡使用方法:
const BlockResourcesPlugin = require("puppeteer-extra-plugin-block-resources") // for ESM users: // import BlockResourcesPlugin from "puppeteer-extra-plugin-block-resources"
次に、すべてのページでグローバルにブロックするようにリソースを設定できます。
puppeteer.use(BlockResourcesPlugin({ blockedTypes: new Set(["image", "stylesheet"]), }))
同様に、ブロックするリソースをローカルで選択することもできます。
puppeteer.use(BlockResourcesPlugin() const browser = await puppeteer.launch() const page = await browser.newPage() blockResourcesPlugin.blockedTypes.add("stylesheet") await page.goto("https://www.example.com/", { waitUntil: "domcontentloaded" })
Puppeteer によって制御されるブラウザによって設定されたUser-Agent
を匿名化するプラグイン。🎭
ヘッドレス モードで Chrome ユーザー エージェントから'Headless'
文字列を削除する機能を提供し、カスタム関数によるユーザー エージェントの動的な置換をサポートします。Puppeteer ユーザー エージェント ガイドで実際の動作を確認してください。
Web スクレイピングに最適なユーザー エージェントを見つけましょう。
⚙️インストール:
npm install puppeteer-extra-plugin-anonymize-ua
💡使用方法:
const AnonymizeUAPlugin = require("puppeteer-extra-plugin-anonymize-ua") // for ESM users: // import AnonymizeUAPlugin from "puppeteer-extra-plugin-anonymize-ua"
次に、匿名ユーザー エージェントを設定します。
puppeteer.use(AnonymizeUAPlugin({ stripHeadless: true, }))
また、カスタム関数を使用して動的なユーザー エージェントを設定することもできます。
puppeteer.use(AnonymizeUAPlugin({ customFn: (ua) => ua.replace("Chrome", "Chromium")}) }))
Playwright の場合と同様に、Puppeteer スクリプトがどれだけ巧妙でカスタマイズされていても、高度なアンチボット システムがそれを検出してシャットダウンすることができます。しかし、どうしてそんなことが可能なのでしょうか? 🤔
puppeteer-extra-stealth-plugin
ドキュメントでは、次のように詳しく説明されています。
注意: これはかなり興味深い猫とネズミのゲームにおける友好的な競争であると私は考えています。他のチーム (👋) がヘッドレス Chromium を検出したい場合、それを実行する方法はまだあります (少なくとも私はいくつか気づきました。今後のアップデートで対処します)。
ヘッドレス Chromium を検出するすべての方法を防ぐのはおそらく不可能ですが、コストがかかりすぎるほど、または誤検知が多すぎて実現不可能になるほど困難にすることは可能であるはずです。
したがって、Puppeteer Extra は Matrix の Neo のようにほとんどの基本的なボット検出を回避できますが、 Cloudflare を確実にバイパスすることはできません。もちろん、 プロキシを Puppeteer に統合することもできますが、それでも十分ではない可能性があります。
問題は Puppeteer 自体ではなく (実際、Puppeteer は最高です! 🤘)、それが制御しているブラウザです。本当の解決策は? 次のような強力なブラウザです:
信じられないかもしれませんが、これは遠い夢ではありません。これは現実であり、まさに Bright Data のScraping Browserが提供できるものなのです。
Puppeteer は、テクノロジーの世界で最も広く使用されているブラウザ自動化ツールの 1 つですが、スーパーヒーローにも限界があります。コミュニティは、カスタム プラグインを通じて Puppeteer に非常に優れた新機能を追加するパッケージであるpuppeteer-extra
を導入しました。
しかし、ここで問題なのは、これらのプラグインはスクレイピング操作をはるかに強力にすることができますが、魔法のようにあなたをゴーストに変えることはできないということです👻。高度なボット検出機能を備えたサイトは、あなたをブロックできる可能性があります。
Bright Data の Scraping Browser を使用すると、すべてのアンチボットを回避できます。これは、 Puppeteer とシームレスに統合される検出不可能なクラウド ブラウザです。自動化されたスクリプトを通じてでも、Web をあらゆる場所のあらゆる人にとっての公共スペースにするという私たちの使命にご参加ください。
次回まで、自由にインターネットを探索し続けてください!🌐