Puppeteer を検出されずに使用する方法は

Scraping and Proxy Management Expert
最近のウェブサイトでは、スクレイパーを識別できる反ボットソフトウェアが使用されています。スムーズなスクレイピングプロセスに対する最善の防御策は、ヘッドレスブラウザなどの適切なマスキング手法を使用することです。
ウェブスクレイピングを行う際、Puppeteerは実際のユーザーの活動を模倣して、Cloudflareなどの反ボットを回避できるヘッドレスChromeです。では、どのようにアプローチすればよいのでしょうか?
この記事では、Puppeteerを使用して検出されずにスクレイピングを行うための最善の手法を紹介します。しかし、その前に...
Puppeteer とは?
Puppeteerは、Chromiumヘッドレスブラウザにプログラムでアクセスするための高レベルAPIを提供するNode.jsソフトウェアです。
Yarnまたはnpmで簡単にインストールでき、主な利点の1つは、DevToolsプロトコルにアクセスして変更できることです。
反ボットはPuppeteerを識別できますか?
確かに、これらの反ボットは、SeleniumやPuppeteerなどのヘッドレスブラウザを識別できます。
これを示すために、スクレイピングの簡単な例として、NowSecureをクロールしてみましょう。このウェブサイトは、テストの検証のためにボットを使用して保護を突破したかどうかを通知します。
そのためには、まずNode.jsをインストールし、インストールが完了したら、次の簡単なコマンドコードを実行してPuppeteerをインストールします。
language
npm install puppeteer
language
const puppeteer = require('puppeteer');
(async () => {
// ブラウザの初期化
const browser = await puppeteer.launch();
// デフォルトのブラウザコンテキストで新しいページを作成する
const page = await browser.newPage();
// ページビューの設定
await page.setViewport({ width: 1280, height: 720 });
// ターゲットウェブサイトに移動する
await page.goto('https://nowsecure.nl/');
// セキュリティチェックを待つ
await page.waitForTimeout(30000);
// スクリーンショットを撮る
await page.screenshot({ path: 'image.png', fullPage: true });
// ブラウザとそのすべてのページを閉じる
await browser.close();
})();
このように、この例では、基本的なPuppeteer構成を使用して、新しいブラウザページを作成し、ターゲットウェブサイトにアクセスしました。セキュリティチェックの後、スクリーンショットを撮影します。
Puppeteerの検出を回避する3つの方法
シームレスなクロール操作を実現するには、Puppeteerボットの検出を回避することが重要です。スクレイピング時にブロックを回避し、Puppeteerの検出を回避する方法を以下に示します。
1. プロキシの使用
IP追跡は、最も一般的な反ボット手法の1つであり、ウェブサイトのリクエストをボット検出システムによって監視されます。さらに、反ボットは、IPが短時間に大量のクエリを送信した場合、Puppeteerスクレイパーを識別できます。
Puppeteerの検出を回避するために、プロキシを使用できます。プロキシは、ユーザーとインターネット間のゲートウェイとして機能します。これにより、プロキシはサーバーからのリクエストを受信し、レスポンスデータとともに私たちに転送します。
そのためには、Puppeteerを実行し、args
引数にプロキシを追加できます。
language
const puppeteer = require('puppeteer');
const proxy = ''; // プロキシをここに追加
(async () => {
// プロキシを使用してブラウザを初期化する
const browser = await puppeteer.launch({args: ['--proxy-server=${proxy}']});
// ... 以前と同じように続ける
})();
ウェブスクレイピングのブロックに悩んでいますか?
Scrapeless: 利用可能な最高のオールインワンのオンラインスクレイピングソリューション!
インテリジェントで高性能なプロキシローテーションを使用して、匿名性を維持し、IPベースのブロックを回避しましょう。
無料でお試しください!
2. ヘッダー
ヘッダーには、HTTPリクエストに関するコンテキストとメタデータの詳細が含まれています。これは、ツールがボットであるか、標準的なウェブブラウザであるかを示します。適切なヘッダーをHTTPリクエストに追加することで、検出を回避するのに役立ちます。
PuppeteerはデフォルトでheadlessChrome
で動作するため、User-Agentなどの新しいヘッダーを追加することで、その機能を拡張できます。この広く使用されているヘッダーは、アプリケーション、オペレーティングシステム、ベンダー、リクエストバージョンを含み、ウェブスクレイピングで使用されています。
language
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// ヘッダーを追加する
await page.setExtraHTTPHeaders({
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'upgrade-insecure-requests': '1',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9,en;q=0.8'
});
// ... 以前と同じように続ける
})();
3. リクエストの制限
先に述べたように、ユーザーが送信するクエリの数は、アンチボットによってユーザーの行動を監視するために使用できます。さらに、クエリの数を制限し、リクエスト間に一時停止を入れることで、ほとんどのユーザーが1秒間に数百ものリクエストを送信しないため、Puppeteerの検出を防ぐのに役立ちます。
.setRequestInterception()
関数を用いることで、Puppeteerでレンダリングされるリソースを制限することができます。
language
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// リクエストの制限
await page.setRequestInterception(true);
page.on('request', async (request) => {
if (request.resourceType() == 'image') {
await request.abort();
} else {
await request.continue();
}
});
// ... 以前と同様に続ける
})();
.setRequestInterception() = true
を設定することで、Puppeteerによる画像のリクエストを拒否します。このようにして、クエリを制限することができます。ロードおよび待機するリソースが少なくなるため、より高速なスクレーパーも実現します。
まとめ
Puppeteerでは、検出を回避するためのさまざまなテクニックがあります。この記事では、最も効果的で簡単な方法について説明します。
プロキシ、ヘッダー、リクエスト制限、Puppeteer-Stealthを使用する場合には制限がありますが、それらはタスクの達成に役立ちます。これらのテクニックは、高度なアンチボット防御を回避する場合には、しばしば不十分です。
Scrapelessは、CAPTCHAやプロキシをローテーションするヘッドレスブラウザなど、アンチボットの回避のあらゆる側面を、単一のAPIリクエストで管理します。さらに、使い始めるのは無料です。
Scrapeless では、適用される法律、規制、および Web サイトのプライバシー ポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツはデモンストレーションのみを目的としており、違法または侵害的な活動には関与していません。 私たちは、このブログまたはサードパーティのリンクからの情報の使用についていかなる保証もせず、一切の責任を負いません。 スクレイピング活動を行う前に、法律顧問に相談し、対象となる Web サイトの利用規約を確認するか、必要な許可を取得してください。