PerimeterXとAkamaiの保護を回避する: 実践的なアンチデテクト手法
PerimeterXとAkamai Bot Managerは、主要なeコマースプラットフォーム、金融サービス、企業サイトが使用する最も高度なボット保護ソリューションの2つです。これらのシステムは、ブラウザのパラメータ、ユーザーの行動、ネットワーク特性の数百のパラメータを分析し、IPアドレスの単純な変更では回避できない多層的な保護を構築します。
このガイドでは、両システムのアーキテクチャを詳細に分析し、検出方法を学び、実際のケーススタディと技術的実験に基づいた包括的な回避戦略を構築します。
PerimeterXとAkamaiのアーキテクチャ: 検出の仕組み
PerimeterX(現在はHUMAN Security)とAkamai Bot Managerは、リクエスト処理の異なる段階で組み込まれる多層的な保護システムとして機能します。これらのアーキテクチャを理解することは、回避戦略を開発するために極めて重要です。
PerimeterXのアーキテクチャ
PerimeterXは3つの段階で動作します。最初の段階では、JavaScriptセンサーがHTMLページに埋め込まれ、クライアントのブラウザで実行され、実行環境に関するデータを収集します: WebGLフィンガープリント、Canvasフィンガープリント、オーディオコンテキスト、利用可能なフォント、プラグイン、画面解像度、その他多数のパラメータ。このセンサーは難読化されており、定期的に更新されるため、分析が困難です。
第二の段階では、PerimeterXのサーバーコンポーネントがHTTPヘッダー、TLSフィンガープリント、IP評判、ネットワーク特性を分析し、リクエストがメインアプリケーションに到達する前に行います。このシステムは、リアルタイムで更新される既知のボットや疑わしいIPアドレスのデータベースを使用します。
第三の段階は行動分析です。PerimeterXはマウスの動き、スクロール速度、クリックパターン、アクション間の時間を追跡し、行動プロファイルを構築します。機械学習モデルは、このプロファイルを実際のユーザーや既知のボットのパターンと比較します。
Akamai Bot Managerのアーキテクチャ
Akamai Bot ManagerはCDNレベルで統合されており、分析速度の利点があります。このシステムは、リクエストをAkamaiのエッジサーバーで処理する独自のBMP(Bot Manager Premier)技術を使用します。
Akamaiの主な違いは、彼らのCDNで保護されている数百万のサイトからのテレメトリを使用していることです。これにより、新しいタイプのボットを迅速に特定し、検出ルールをグローバルに更新することができます。Akamaiはまた、PerimeterXのセンサーに似たWeb SDK技術を使用していますが、クライアントの整合性を暗号的に確認することに重点を置いています。
重要: 両システムは、検証結果に関する暗号化されたデータを含むクッキーを使用します。これらのクッキーは、サーバーキーを知らずに偽造することはできないため、セッション間でクッキーを単純にコピーすることは機能しません。
検出方法: 保護システムが分析するもの
現代のアンチボットシステムは、リクエストを数百のパラメータに基づいて分析し、いくつかのカテゴリにまとめています。各カテゴリを理解することで、自動化のマーカーを体系的に排除することができます。
HTTPヘッダーとTLSの分析
HTTPヘッダーの順序は、検出の最も簡単な方法の1つです。ブラウザは、バージョンや製造元によって異なる厳密な順序でヘッダーを送信します。PythonのrequestsやNode.jsのaxiosのようなライブラリは独自の順序を使用し、自動化を瞬時に明らかにします。
TLSフィンガープリント(JA3フィンガープリント)は、TLSハンドシェイクのパラメータから生成されます: TLSのバージョン、サポートされている暗号のリスト、拡張機能とその順序。ブラウザとオペレーティングシステムの組み合わせごとにユニークなフィンガープリントが作成されます。たとえば、Windows 11のChrome 120は、macOSのChrome 120や同じシステムのFirefoxとは異なるフィンガープリントを持っています。
// User-AgentとTLSフィンガープリントの不一致の例
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
TLS Fingerprint: JA3ハッシュはPython requestsに一致
// 結果: 即時ブロック
JavaScript実行環境
ヘッドレスブラウザは、JavaScript環境に数十の痕跡を残します。navigator.webdriverのプロパティ、window.chromeオブジェクトの存在、navigator.pluginsの不一致、WebGLおよびCanvasレンダリングの異常がチェックされます。
PerimeterXとAkamaiは、高度な検証技術を使用しています: JavaScript関数の実行時間を測定します(ヘッドレスブラウザでは異なります)、DOM内の自動化のアーティファクトの存在を確認します、関数の呼び出しスタックを分析します。システムはデータの一貫性も確認します — たとえば、User-Agentがモバイルデバイスを指しているが、navigator.maxTouchPointsが0である場合、これは検出のトリガーです。
ネットワーク特性とIP評判
保護システムは、IPアドレスを多くのパラメータで確認します: 有名なプロキシプロバイダーへの所属、ブラックリストへの登録、当該IPからの活動履歴、他のリクエストパラメータ(ブラウザの言語、タイムゾーン)との地理的位置の一貫性。
IPの使用パターンに特に注意が払われます。1つのアドレスから異なるUser-Agentやブラウザーフィンガープリントでリクエストが送信される場合、これは自動化の強い信号です。同様に、1つのセッション内でIPが頻繁に変わる場合(プロキシの攻撃的なローテーション)、これはブロックを引き起こします。
| 検出パラメータ | PerimeterX | Akamai |
|---|---|---|
| TLSフィンガープリンティング | 高優先度 | クリティカル優先度 |
| Canvasフィンガープリンティング | 中優先度 | 高優先度 |
| 行動分析 | クリティカル優先度 | 高優先度 |
| IP評判 | 高優先度 | 高優先度 |
| HTTP/2フィンガープリンティング | 中優先度 | クリティカル優先度 |
ブラウザーフィンガープリンティングとTLSフィンガープリント
ブラウザーフィンガープリンティングは、ブラウザの特性に基づいてユニークな識別子を生成する技術です。クッキーがなくても、保護システムはユーザーを追跡し、異常を特定できます。
CanvasとWebGLフィンガープリンティング
Canvasフィンガープリンティングは、テキストとグラフィックを含む見えない画像をレンダリングすることで機能します。グラフィックドライバー、フォント、アンチエイリアス設定の違いにより、各システムはわずかに異なる画像を生成します。この画像のハッシュがフィンガープリンティングの一部となります。
WebGLフィンガープリンティングは、3Dレンダリングを使用してさらにユニークなフィンガープリントを生成します。システムは、GPUに関する情報、サポートされている拡張機能、最大テクスチャサイズ、その他のパラメータを要求します。これらのデータの組み合わせが、デバイスを特定するのに十分なエントロピーを持つフィンガープリントを生成します。
// WebGLフィンガープリンティングの取得例
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// 結果は: "Google Inc. (NVIDIA)" + "ANGLE (NVIDIA GeForce RTX 3080)"
// 各デバイスに対するユニークな組み合わせ
オーディオコンテキストとフォント
Audio Context APIは、音声処理に基づいてユニークなフィンガープリントを生成します。オペレーティングシステムのオーディオスタックの違いは、音声信号処理における微細な違いを引き起こし、これを測定して識別に使用できます。
インストールされているフォントのリストも各システムに固有です。保護システムは、異なるフォントでのテキストサイズを測定する技術を使用します — フォントがインストールされていない場合、ブラウザはフォールバックを使用し、サイズが変わります。数百のフォントをチェックすることで、ユニークなシグネチャが生成されます。
TLSおよびHTTP/2フィンガープリンティング
JA3フィンガープリントは、TLS Client Helloのパラメータから生成されます: SSL/TLSのバージョン、暗号スイートのリスト、拡張機能のリスト、サポートされている楕円曲線のリスト、楕円曲線のポイント形式。これらのパラメータは連結されてハッシュ化され、ユニークな文字列を生成します。
HTTP/2フィンガープリンティングは、SETTINGSフレームのパラメータ、ストリームの順序と優先度、ウィンドウ更新値を分析します。各ブラウザはユニークなHTTP/2設定を使用するため、正しいTLSフィンガープリントであってもクライアントを特定できます。
実践的なアドバイス: フィンガープリンティングを回避するには、すべてのパラメータの一貫性を確保する必要があります。ChromeのUser-AgentをFirefoxのTLSフィンガープリントと組み合わせると、瞬時に検出されます。curl-impersonateのようなツールやtls-clientライブラリを使用すると、完全に一貫したフィンガープリントを作成できます。
行動分析と機械学習
行動分析は、現代のアンチボットシステムの中で最も回避が難しい側面です。完璧な技術的フィンガープリントを持っていても、非人間的な行動は自動化を明らかにします。
マウスの動きとインタラクションの分析
PerimeterXとAkamaiは、マウスの動きの軌跡、加速と減速、微細な動きを追跡し、人間の手に特有の動きを分析します。ボットは通常、マウスカーソルを直線的に動かすか、まったくマウスイベントを生成しません。システムは反応時間も分析します — ページが読み込まれた直後にクリックすることは、疑わしい行動と見なされます。
スクロールパターンもユニークです。人間はページを不均等にスクロールします: 最初は速く、読みやすくするために遅くなり、時には後ろに戻ります。ボットは通常、一定の速度でスクロールするか、window.scrollTo()を使用して瞬時にスクロールします。
時間的パターンと行動の速度
アクション間の時間は、重要なパラメータです。人間は10フィールドのフォームを0.5秒で埋めることはできませんし、1分で50リンクをクリックすることもできません。保護システムは、各アクションタイプの速度プロファイルを構築し、ユーザーの行動と比較します。
遅延の一貫性にも特に注意が払われます。各クリックの間に正確に2秒が経過する場合、これはコード内のsleep(2000)の明らかな兆候です。人間の遅延には自然な変動があり、特定の統計分布に従います。
機械学習モデル
両システムは、実際のユーザーと既知のボットの数百万のセッションでトレーニングされたMLモデルを使用しています。モデルは、アクションのシーケンス、サイトの閲覧深度、ナビゲーションパターン、要素とのインタラクションなど、数百の特徴を同時に分析します。
PerimeterXは、異なるタイプのサイトに対して異なる重みを持つモデルのアンサンブルを使用します。eコマース用のモデルは購入パターンに焦点を当て、メディアサイト用のモデルはコンテンツの読み方に焦点を当てます。これにより、各サイトの特性に適応する必要があるため、回避がより困難になります。
// 変動性のある人間らしい遅延の例
function humanDelay(baseMs) {
// 一様分布の代わりに対数正規分布
const variance = baseMs * 0.3;
const delay = baseMs + (Math.random() - 0.5) * variance;
// ブラウザによるイベント処理に特有の微小遅延を追加
const microDelay = Math.random() * 50;
return Math.max(100, delay + microDelay);
}
// 使用法: await new Promise(r => setTimeout(r, humanDelay(2000)));
プロキシの選択とローテーション戦略
PerimeterXとAkamaiを使用する際には、プロキシの種類とローテーション戦略の選択が極めて重要です。プロキシの不適切な設定は、ブラウザーフィンガープリンティングのマスキングのすべての努力を無にします。
レジデンシャル vs モバイル vs データセンター プロキシ
データセンタープロキシは最も低コストですが、検出のリスクも最も高いです。PerimeterXとAkamaiは、データセンターのIPアドレスのデータベースをサポートしており、そのようなリクエストに対して自動的に検証レベルを引き上げます。データセンタープロキシの使用は、低優先度のタスクや非常に高品質なブラウザーフィンガープリンティングと組み合わせてのみ可能です。
レジデンシャルプロキシは、実際のインターネットプロバイダーのIPアドレスを使用しており、検出の可能性を大幅に低下させます。ただし、レジデンシャルプロキシの品質は大きく異なります。スパムや他の疑わしい活動に以前使用されていないクリーンなIPプールを持つプロバイダーを選ぶことが重要です。
モバイルプロキシは、モバイルオペレーターのIPアドレスを使用しているため、最高の信頼性を提供します。これらのアドレスは通常、多くのユーザー間で共有されているため(キャリアグレードNAT)、ブロックが困難です。モバイルプロキシは、特にAkamaiに対して効果的であり、モバイルトラフィックのブロックに対してより慎重です。
ローテーション戦略
攻撃的なローテーション(各リクエストごとにIPを変更すること)は、一般的な誤りです。これは疑わしいパターンを生み出します: 1人のユーザーが数秒ごとに物理的にIPアドレスを変更することはできません。1つのIPを完全なユーザーセッション(10-30分の活動)に使用するセッショナルローテーションの方が効果的です。
長期的な操作には、30-60分の持続時間を持つスティッキーセッションを推奨します。これは、セッション中に1つのIPに留まる実際のユーザーの行動を模倣します。ただし、1つのIPを長時間使用しないことが重要です — 数時間のセッションも疑わしく見えます。
地理的一貫性
IPアドレスの地理的位置と他のパラメータ(ブラウザの言語、タイムゾーン、ロケール設定)との間に一致を確保することが重要です。IPアドレスがドイツにある場合、navigator.languageが"en-US"を返し、タイムゾーンが"America/New_York"である場合、これは即座に検出のトリガーとなります。
複数の地理的地域で作業する場合は、各地域に対して別々のブラウザープロファイルを使用してください。1つのセッション内で地域間を切り替えること(フランスのIPから日本のIPに変更すること)は、実際のユーザーには不可能であり、即座に検出されます。
| プロキシタイプ | PerimeterXに対する効果 | Akamaiに対する効果 | 推奨事項 |
|---|---|---|---|
| データセンター | 低い(30-40%) | 非常に低い(20-30%) | テスト用のみ |
| レジデンシャル | 高い(75-85%) | 中程度(65-75%) | ほとんどのタスクに対する主要な選択 |
| モバイル | 非常に高い(85-95%) | 高い(80-90%) | 重要なタスクと高い保護が必要なサイト用 |
アンチデテクトブラウザとツールの設定
自動化ツールの正しい設定は、PerimeterXとAkamaiを回避するための成功の鍵です。最高のプロキシであっても、ブラウザーフィンガープリンティングに明白な自動化マーカーが含まれている場合、役に立ちません。
PlaywrightとPuppeteer: 高度な設定
PlaywrightまたはPuppeteerの基本インストールは、明らかなヘッドレスブラウザを生成します。自動化をマスキングするために、ステルスプラグインと追加の設定を使用する必要があります。puppeteer-extra-plugin-stealthライブラリは、主要なマーカーを隠しますが、追加の設定が必要です。
// アンチデテクトのためのPlaywrightの高度な設定
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
chromium.use(stealth);
const browser = await chromium.launch({
headless: false, // ヘッドレスモードは簡単に検出されます
args: [
'--disable-blink-features=AutomationControlled',
'--disable-features=IsolateOrigins,site-per-process',
'--disable-site-isolation-trials',
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu',
'--window-size=1920,1080',
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
]
});
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
locale: 'en-US',
timezoneId: 'America/New_York',
permissions: ['geolocation', 'notifications'],
geolocation: { latitude: 40.7128, longitude: -74.0060 }
});
Seleniumとundetected-chromedriver
標準のSelenium WebDriverは、navigator.webdriverプロパティを介して簡単に検出されます。undetected-chromedriverライブラリは、ChromeDriverを自動的にパッチし、主要な自動化マーカーを削除し、新しい検出方法を回避するために定期的に更新されます。
import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920,1080')
# 一貫性のために特定のバージョンのChromeを使用
driver = uc.Chrome(options=options, version_main=120)
# CDPを介した追加のマスキング
driver.execute_cdp_cmd('Network.setUserAgentOverride', {
"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
アンチデテクトブラウザ: AdsPower, Multilogin, GoLogin
商業的なアンチデテクトブラウザは、フィンガープリンティングの管理のための完成されたソリューションを提供します。AdsPowerとMultiloginは、ユニークなCanvas、WebGL、オーディオフィンガープリンティングを持つプロファイルを作成し、APIを介して管理することができます。これらのツールは、複数のアカウントを扱う際に特に便利です。
主な利点は、セッション間で一貫したフィンガープリンティングを保存できることです。各プロファイルには、Canvas、WebGL、フォントの固定パラメータがあり、長期的な作業には重要です。ただし、現実的な設定を使用することが重要です — ランダムなフィンガープリンティングの生成は、技術的に不可能な組み合わせを作成し、簡単に検出される可能性があります。
正しいフィンガープリンティングを持つHTTPクライアント
JavaScriptレンダリングを必要としないタスクには、正しいTLSおよびHTTP/2フィンガープリンティングを持つHTTPクライアントがより効果的です。curl-impersonate(Python用のcurl_cffi)やtls-clientライブラリは、実際のブラウザのTLSフィンガープリンティングを模倣することができます。
from curl_cffi import requests
# 正しいTLSおよびHTTP/2フィンガープリンティングを持つChrome 120を模倣
response = requests.get(
'https://example.com',
impersonate="chrome120",
proxies={
"http": "http://user:pass@proxy:port",
"https": "http://user:pass@proxy:port"
},
headers={
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
)
# TLSフィンガープリンティングは自動的にChrome 120に一致します
検出トリガーなしの自動化技術
完璧な技術的フィンガープリンティングを持っていても、自動化のパターンがボットを明らかにする可能性があります。サイトとのインタラクションのレベルで人間の行動を模倣する必要があります。
マウスの動きのエミュレーション
AからBへのマウスの直線的な動きは、自動化の明白な兆候です。人間の手は、微細な修正を伴う滑らかな曲線を生成します。pyautoguiのようなライブラリを使用すると、ベジェ曲線を使用してリアルな軌跡を生成できます。
// 人間らしいマウスの軌跡を生成する
async function humanMouseMove(page, targetX, targetY) {
const current = await page.evaluate(() => ({
x: window.mouseX || 0,
y: window.mouseY || 0
}));
const steps = 25 + Math.floor(Math.random() * 15);
const points = generateBezierCurve(current.x, current.y, targetX, targetY, steps);
for (let point of points) {
await page.mouse.move(point.x, point.y);
await new Promise(r => setTimeout(r, 10 + Math.random() * 20));
}
// クリック前の微小修正
await page.mouse.move(targetX + (Math.random() - 0.5) * 2,
targetY + (Math.random() - 0.5) * 2);
}
function generateBezierCurve(x1, y1, x2, y2, steps) {
const cp1x = x1 + (x2 - x1) * (0.3 + Math.random() * 0.2);
const cp1y = y1 + (y2 - y1) * (0.3 + Math.random() * 0.2);
const points = [];
for (let i = 0; i <= steps; i++) {
const t = i / steps;
const x = Math.pow(1-t, 2) * x1 + 2 * (1-t) * t * cp1x + Math.pow(t, 2) * x2;
const y = Math.pow(1-t, 2) * y1 + 2 * (1-t) * t * cp1y + Math.pow(t, 2) * y2;
points.push({x: Math.round(x), y: Math.round(y)});
}
return points;
}
リアルなスクロールとコンテンツの読み取り
人間はコンテンツを読むためにページをスクロールし、興味のあるセクションで止まります。ボットは通常、ページの最後まで、または必要な要素までできるだけ早くスクロールします。読み取りの模倣には、コンテンツの分析とリアルな間隔の作成が必要です。
async function humanScroll(page, targetElement) {
const elementPosition = await page.evaluate(el => {
const rect = el.getBoundingClientRect();
return rect.top + window.pageYOffset;
}, targetElement);
const currentScroll = await page.evaluate(() => window.pageYOffset);
const distance = elementPosition - currentScroll;
const scrollSteps = Math.floor(Math.abs(distance) / 100);
for (let i = 0; i < scrollSteps; i++) {
const scrollAmount = (distance / scrollSteps) * (0.8 + Math.random() * 0.4);
await page.evaluate((amount) => {
window.scrollBy({top: amount, behavior: 'smooth'});
}, scrollAmount);
// "読み取り"のためのランダムな間隔
if (Math.random() > 0.7) {
await new Promise(r => setTimeout(r, 1000 + Math.random() * 2000));
} else {
await new Promise(r => setTimeout(r, 200 + Math.random() * 400));
}
}
}
自然なナビゲーションパターンの管理
ユーザーはターゲットページに直接移動することはありません — 自然にサイトとインタラクションします。ホームページから始めて、いくつかのセクションを訪れ、検索やナビゲーションメニューを使用します。これにより、保護システムの信頼を高めるインタラクションの履歴が作成されます。
エラーや修正を模倣することも重要です — 人間は間違ったリンクをクリックして戻ったり、検索フィールドに入力する際に誤字を修正したりします。目標への直接的な道は疑わしく見えます。
クッキーとストレージの管理
PerimeterXとAkamaiは、セッションを追跡するためにクッキーとlocalStorageを使用します。リクエスト間でクッキーを完全にクリアすることは疑わしく見えます — 実際のブラウザは一部のクッキー(分析、設定)を保存します。1つの「ユーザー」のセッション間でクッキーを保存しますが、異なるプロファイルには異なるクッキーセットを使用します。
重要: 保護システムはクッキーの年齢を分析します。保護クッキー(_px、_abck)が最近現れたが、ユーザーが常連客のような行動を示す場合 — これは不一致です。長期的な操作のために、訪問履歴を作成してプロファイルを「ウォームアップ」します。
実践的なケースと一般的な問題の解決
PerimeterXとAkamaiを回避する具体的なシナリオと、プロセス中に発生する一般的な問題の解決策を考察します。
ケース1: PerimeterXを使用したeコマースのパース
課題: PerimeterXで保護された大手オンラインストアから製品データを抽出すること。サイトは、異なるIPからのリクエストでも3-5回のリクエスト後にブロックします。
解決策: レジデンシャルプロキシとスティッキーセッション(30分)の組み合わせを使用し、Playwrightで行動を完全にエミュレートします。重要なポイント: ホームページから始め、ナビゲーションのために検索やカテゴリーを使用し、リクエスト間に3-7秒のランダムな遅延を追加し、スクロールやマウスの動きを模倣します。重要なのは、同一セッション内でクッキー_pxをリクエスト間で保存することです。
// ウォームアップセッションの例
async function scrapeWithWarmup(page, targetUrls) {
// プロファイルのウォームアップ
await page.goto('https://example.com');
await humanScroll(page, await page.$('footer'));
await new Promise(r => setTimeout(r, 3000 + Math.random() * 2000));
// メニューを通じたナビゲーション
await humanMouseMove(page, menuX, menuY);
await page.click('nav a.category');
await new Promise(r => setTimeout(r, 2000 + Math.random() * 1000));
// ウォームアップ後にターゲットページに移動
for (let url of targetUrls) {
await page.goto(url);
await humanScroll(page, await page.$('.product-info'));
// データの抽出
const data = await page.evaluate(() => extractProductData());
await new Promise(r => setTimeout(r, 5000 + Math.random() * 3000));
}
}
ケース2: APIリクエストのためのAkamaiの回避
課題: Akamai Bot Managerで保護されたAPIにアクセスすること。APIは、ページ上で生成される特定のヘッダーとトークンを要求します。
解決策: Akamaiはしばしばsensor_dataを使用します — ブラウザの検証結果を含む暗号化された文字列。この文字列はJavaScriptによって生成され、リクエストに含める必要があります。ブラウザの自動化を使用して有効なsensor_dataを取得し、その後、正しいTLSフィンガープリンティングを持つHTTPクライアントで適用します。
// ブラウザを介してsensor_dataを取得する
async function getSensorData(page) {
await page.goto('https://example.com');
// Akamaiセンサーの実行を待つ
await page.waitForTimeout(5000);
// クッキーまたはlocalStorageからsensor_dataを抽出
const sensorData = await page.evaluate(() => {
const cookie = document.cookie.split(';')
.find(c => c.trim().startsWith('_abck='));
return cookie ? cookie.split('=')[1] : null;
});
return sensorData;
}
// HTTPクライアントでの使用
const sensorData = await getSensorData(page);
const response = await fetch('https://example.com/api/data', {
headers: {
'Cookie': `_abck=${sensorData}`,
'User-Agent': 'Mozilla/5.0...',
// その他のヘッダーはブラウザに一致させる必要があります
}
});
ケース3: CAPTCHAとチャレンジページの解決
問題: PerimeterXやAkamaiを正しく設定していても、時々チャレンジページやCAPTCHAが表示され、追加の検証が求められます。
解決策: PerimeterXのチャレンジページは通常、追加の...