過去 5 年間に何百ものスクレイピング プロジェクトに取り組んできた経験豊富なプロキシおよび Web スクレイピングの専門家として、私は PerimeterX のような高度なボット軽減ソリューションを扱った豊富な経験を持っています。
この包括的な 3000 語以上のガイドでは、PerimeterX を回避してターゲット サイトを首尾よくスクレイピングするための実証済みの方法とツールを共有します。
PerimeterX とは一体何ですか?
回避手法に入る前に、PerimeterX とは何か、そしてそれがどのように機能するかを理解することが重要です。
境界X は、今日の市場で主要なボット軽減および Web アプリケーション ファイアウォール (WAF) サービスの 10 つです。インターネットのトップ Web プロパティの XNUMX% 以上が、Web スクレイピング、アカウント乗っ取り攻撃、支払い詐欺、その他の種類の自動化悪用から保護するために PerimeterX を使用しています。
同社は、次のようなテクノロジーを活用した高度なボット検出エンジンを提供しています。
- デバイスのフィンガープリンティング – 300を超えるデバイスパラメータを収集して、固有の訪問者プロファイルを構築します
- 行動分析 – ボットを検出するためにマウスの動きなどの人間の行動パターンをモデル化します
- IPレピュテーションデータベース – データセンターおよび住宅用プロキシからの IP を追跡およびブロックします
- ページのインタラクションチェック – DOM 要素、JavaScript エラー、レンダリングを分析してヘッドレス ブラウザを検出します
- キャプチャ – 高度な視覚的および目に見えないチャレンジを使用して、ボットに人間性を証明させます
PerimeterX は、自社のソリューションが 99% 以上の精度で自動化を検出できると主張していますが、これは非常に高い精度です。彼らは、正規ユーザーの誤検知を最小限に抑えながら、検出率を最大化することに重点を置いています。
これは、Web スクレイパーにとって難しい課題となります。しかし、過去の多くのプロジェクトで PerimeterX 保護に取り組んできたので、スクレイパーを検出されないようにする実証済みの方法を特定しました。
このガイドでは、人間のユーザーを模倣し、PerimeterX が内部でどのように動作するかを理解するためのインサイダー テクニックを共有します。
PerimeterX ボット軽減テクニック
最初のステップは、PerimeterX がボットを識別するために依存しているさまざまな検出メカニズムを理解することです。
デバイスフィンガープリンティング
PerimeterX は、次のような 300 以上のパラメータを収集することで、高度なデバイス フィンガープリンティングを採用しています。
- ハードウェア ID – CPU タイプ、GPU レンダリング、画面解像度
- ソフトウェア構成 – OS、ブラウザの種類とバージョン、ドライバーのバージョン、言語
- インストールされているフォント、プラグイン、拡張機能
- Canvas と WebGL のフィンガープリンティング
これらの属性をコンパイルして、訪問者ごとに一意のデバイス署名を作成します。 Node.js スクレイパーの署名は、実際のデスクトップまたはモバイル ブラウザーとは明らかに異なります。
行動分析
PerimeterX は、技術的なフィンガープリントに加えて、次のような訪問者の行動を分析します。
- マウスの動きのパターン – 本物の人間は自然な微小な動きとスクロールを示します
- クリック追跡 – 人間はボットのように要素を完璧にクリックするわけではありません
- タイピングのリズム - キーストロークの速度を分析して、実際のユーザーがデータを入力しているかどうかを判断します。
- スワイプ パターン – モバイル デバイス上で、自然なスワイプ動作をチェックします。
ボットはこうした人間の行動パターンを模倣しないため、検出が容易になります。
IPレピュテーションデータベース
PerimeterX は、データセンター、住宅用プロキシ、クラウド プロバイダー、およびスクレイピングに一般的に関連するその他のインフラストラクチャからの IP をタグ付けする大規模な IP レピュテーション データベースを維持しています。
静的 IP からスクレイピングする場合は、PerimeterX がすでに高リスクとしてフラグを立てている可能性があります。
ページのインタラクションチェック
PerimeterX はまた、各ページでさまざまなインタラクション チェックを実行して、ヘッドレス ブラウザーと非 JavaScript 環境の検出を試みます。例えば:
- CSS/画像が読み込まれていることを確認する
- 予期される DOM 要素のテスト
- マウスカーソルの動きを追跡する
- JavaScript エラーを探しています
ヘッドレス ブラウザは、実際のブラウザと同じ方法で JavaScript を実行したり、CSS/画像をレンダリングしたりしません。
CAPTCHA チャレンジ
PerimeterX がボット訪問者を疑うと、ユーザーに人間であることを証明するためのインタラクティブなチャレンジをトリガーします。例えば:
- ページ上の特定のボタンまたはオブジェクトをクリックする
- 画像またはテキスト認識を必要とするビジュアル CAPTCHA
- バックグラウンドで動作チェックを実行する非表示の CAPTCHA
これらの課題は実際のユーザーにとっては簡単ですが、従来のボットにとっては不可能です。
PerimeterX のフィンガープリンティングとボットの軽減がどのように機能するかを理解したところで、検出を回避する実証済みの方法を検討してみましょう。
デバイスのフィンガープリンティングを回避する
PerimeterX の広範なデバイス プロファイリングによる検出を回避するには、スクレイパーが実際のブラウザを完全に模倣していることを確認する必要があります。
Selenium または Puppeteer 経由でリアル ブラウザを使用する
最も信頼性の高い方法は、リクエストを直接行うのではなく、Selenium や Puppeteer などのフレームワークを使用して実際のブラウザを制御することです。
Selenium Chrome や Firefox などの実際のブラウザを起動します。 Selenium が基盤となるブラウザーのネイティブ フィンガープリントを継承しながら、ブラウジング アクションを自動化するスクリプトを作成できます。
人形 は、ヘッドレス Chrome ブラウザを制御するための高レベル API を提供するノード ライブラリです。技術的にはヘッドレスとしてフィンガープリント可能ですが、Puppeteer をランダム化されたユーザー エージェント文字列やその他のトリックと組み合わせることで、高度なステルス性が実現します。
どちらのアプローチでも、スクレイパーは実際のデスクトップ ブラウザーのフィンガープリントを想定し、デバイス プロファイリングを回避できます。
ツールを使用したブラウザ環境のマスキング
実際のブラウザを実行する代わりに、ブラウザ環境をエミュレートする Browsergap などのツールを使用することもできます。
たとえば、iPhone を模倣するには:
const browsergap = new Browsergap({
browser: ‘iphone‘
});
await browsergap.init();
Browsergap は、実際の iPhone ブラウザと一致するように、ユーザー エージェント、WebGL キャンバス、地理位置情報などの低レベルの詳細をすべて偽装します。
このアプローチでは、スクレイピング環境をマスクしながらも、Selenium や Puppeteer よりも必要なオーバーヘッドが少なくなります。
ユーザーエージェントを頻繁にローテーションする
実際のブラウザを実行している場合でも、ユーザー エージェント文字列を頻繁にローテーションすることで、追加の保護層を追加できます。
const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘];
// Randomly select a user agent
const userAgent = userAgents[Math.floor(Math.random() * userAgents.length)];
await page.setUserAgent(userAgent);
これにより、スクレイパーが毎回異なるユーザーに見えるようになり、ブラウザ環境のプロファイリングが防止されます。
人間に似た行動パターン
技術的な指紋に加えて、人間の行動パターンもモデル化する必要があります。
本物のようなマウスの動き
Puppeteer または Selenium を使用して、自然なマウスの動きをシミュレートします。
// Set mouse speed
await page.setMouse({ moveTime: 100 });
// Human-like random movements
await page.mouse.move(xOffset, yOffset);
await page.mouse.down();
await page.mouse.move(xOffset2, yOffset2);
await page.mouse.up();
これにより、ロボットのような繰り返しの動きではなく、自然なマウス トレースが生成されます。
要素のスクロール、ホバー、クリック
実際のブラウザ アクションを使用してページ要素を操作します。
// Scroll like a user
await page.evaluate(_ => {
window.scrollBy(0, 300);
});
// Hover over elements
await page.hover(‘button‘);
// Variable click timing
await sleep((Math.random() * 200) + 50); // random delay
await page.click(‘button‘);
これにより、人間の閲覧行動がより適切にモデル化されます。
本物のような入力パターン
データを入力するときは、人間の入力リズムを模倣するためにランダムな遅延を使用します。
function typeText(page, text) {
let i = 0;
const typeInterval = setInterval(() => {
if(i < text.length) {
// Random human-like delay
const delay = (Math.random() * 100) + 30;
await page.waitForTimeout(delay);
await page.keyboard.type(text[i++]);
} else {
clearInterval(typeInterval);
}
}, 30);
}
このトリックは、スクレイピング中にサイトにログインする際の検出を回避するのに特に役立ちます。
スクロールとナビゲーション
下にスクロールする、リンクをクリックする、ページを移動するなどのアクションの間にランダムな時間遅延を使用して、人間の閲覧パターンをよりよく模倣します。
本物のようなインタラクションシーケンス
スクレイパーが実行する人間のような一連のイベントを計画します。たとえば、次のようになります。
- ページをゆっくりスクロールします
- いくつかの要素の上にマウスを移動します
- 上にスクロールして戻る
- 次のページへのリンクをクリックします
- 繰り返す
リンクのクリック、ホバー、スクロール、入力に至るまでのこのような実際のアクションの流れを持つことにより、スクレイパーは非常にユーザーらしく見えるようになります。
IPブロックの回避
PerimeterX が不審な IP に基づいてスクレイパーを認識しないようにするには、次のベスト プラクティスに従います。
大規模な住宅用プロキシ ネットワークを使用する
私は、数千万の住宅用 IP をローテーションで提供する Luminati や Smartproxy などのプロバイダーを使用しています。これにより、同じ IP の過剰使用が防止されます。
住宅用プロキシを選択する際に私が考慮する重要な要素は次のとおりです。
プロキシ プールのサイズ – IP の数が多いほど、繰り返しを行わずに一定のローテーションを可能にすることができます。私は 10 万以上の IP を持つネットワークを好みます。
場所の多様性 – 異なる地理的領域にまたがるプロキシは、より人間らしく見えます。
ASN の多様性 – IP を多数の ISP ネットワークに分散することは、少数の ISP ネットワークにクラスタリングするよりも優れています。
評判スクリーニング – プロキシプロバイダーは、PerimeterX によってすでにタグ付けされている不良 IP をブラックリストに登録する必要があります。
回転数 – 住宅用 IP は、リクエストごとであっても、できるだけ頻繁に変更する必要があります。
住宅用 IP の大規模で多様なプールから調達することで、大規模なスクレイパーを効果的に隠します。
データセンターのIPを避ける
データセンター プロキシやクラウド ホスティング IP は、PerimeterX によって自動化インフラストラクチャとして簡単に認識されるため、スクレイピングには決して使用しません。住宅用プロキシのみに限定することが重要です。
ホスティングプロバイダーに注意してください
多くの VPS および Web ホスティング プロバイダーは、PerimeterX によって IP 範囲のプロファイリングを行っています。私は、プロキシを使用する場合でも、スクレイピングの起点としてそれらを使用することを避けます。
プロキシ ローテーション パターン
プロキシをローテーションするときは、認識可能なパターンでローテーションしないことが重要です。ランダム化アルゴリズムを使用して、非決定的で現実的な方法でプロキシ IP を選択します。
ブラウザの課題
PerimeterX で使用されるキャプチャやその他のインタラクティブなチャレンジは、スクレーパーにとってハードルとなります。私がそれらを克服する実証済みの方法を次に示します。
CAPTCHA 解決のアウトソーシング
Anti-Captcha や 2Captcha などのサービスを使用すると、人間のソルバーを活用して何千もの CAPTCHA を瞬時に解決できます。私は彼らの API を使用して課題を伝え、解決します。
// Detect CAPTCHA
if(page.url().includes(‘captcha‘)) {
// Pass to 2Captcha API
const solution = await solver.solveRecaptcha(page.url());
// Enter CAPTCHA solution
await page.type(‘#captcha‘, solution);
// Continue scraping
// ...
}
これにより、スクレーパー自体が画像やテキストを認識する必要がなく、自動解決が可能になります。
ヘッドレスブラウザの課題
特定のボタンをクリックするなどの高度なインタラクティブな課題の場合は、Puppeteer を利用してプログラムでアクションを完了します。
// Identify challenge button
const button = await page.$(‘#challengeButton‘);
// Click the button
await button.click();
Puppeteer は実際のブラウザを制御するため、Axios などのツールを使用した純粋なパラメトリック スクレイピングではなく、インタラクティブなタスクを完了できます。
本物のような行動
また、より人間らしく見えるように、チャレンジを完了するときの自然なマウスの動き、スクロール、遅延も実装します。
// Move mouse towards button
await page.mouse.move(x, y);
// Scroll to button
await page.evaluate(_ => {
window.scrollBy(0, 100);
});
// Brief delay
await page.waitFor(500);
// Click button
await page.click(‘#challengeButton‘);
これは、人間の相互作用の錯覚を強化するのに役立ちます。
他のすべてが失敗したとき…
まれに、課題が高度すぎる場合には、CAPTCHA やその他のボットの軽減を舞台裏で処理する商用スクレイピング サービスを利用することがあります。これにより、PerimeterX の回避を気にせずに、データ抽出に集中できます。
最終的な考え
クライアントの PerimeterX 保護をバイパスする豊富な経験を通じて、私はプロキシ、ブラウザ、動作パターン、その他のツールを使用してスクレイパーを検出されないようにする実証済みの技術を開発してきました。
重要なのは、デバイスの指紋、行動パターン、環境特性、課題の相互作用など、PerimeterX が分析するあらゆる側面にわたって、実際のユーザーをできるだけ忠実に模倣することです。
この 3000 語以上のガイドで概説されている方法を組み合わせることで、PerimeterX よりも優位に立つことができ、ボットの軽減策を利用して何千もの Web サイトからデータを抽出できます。私のようなプロキシと Web スクレイピングの専門家は、これを毎日成功させています。
これらのヒントがお役に立てば幸いです – スクレイピングを楽しんでください!