TurnstileとhCaptchaの回避: 保護技術と解決方法
CloudflareのTurnstileとhCaptchaは、従来のreCAPTCHAに代わるボットからのウェブサービス保護の標準となりました。これらのシステムは、ブラウザとネットワーク環境の数十のパラメータを分析するため、プロキシの使用は自動化にとって大きな挑戦となります。本記事では、これらの技術が技術的にどのように機能するか、プロキシを通じて実際に効果的な回避方法について解説します。
Cloudflare Turnstileの動作
Cloudflare Turnstileは、「見えないCAPTCHAの代替」として位置付けられた次世代の保護システムです。従来のreCAPTCHAとは異なり、Turnstileはユーザーに信号機や横断歩道を選択させる必要がありません。代わりに、システムはブラウザの行動的および技術的特性をバックグラウンドで分析します。
技術的には、Turnstileは3つのステップで動作します。最初のステップは、iframeを介してページに埋め込まれるJavaScriptウィジェットの読み込みです。次に、テレメトリの収集: システムは、WebGLフィンガープリント、Canvasフィンガープリント、フォントのリスト、画面解像度、タイムゾーン、システム言語など、ブラウザに関するデータを収集します。最後のステップは、Cloudflareのサーバーでの検証で、収集されたデータが既知のボットやプロキシのパターンと照合されます。
Turnstileの重要な特徴は、IPアドレスの評判システムの使用です。Cloudflareは、彼らのCDNやDDoS防止を使用している数百万のサイトから収集された膨大なデータベースを持っています。もしIPアドレスが疑わしい活動で見つかれば、Turnstileを通過する可能性は急激に低下します。これにより、プロキシユーザーにとって最初の問題が生じます—クリーンな居住用IPでさえ、以前の所有者のために低い評判を持つ可能性があります。
重要: Turnstileには、managed(自動)、non-interactive(非対話型)、invisible(完全に隠された)という3つの動作モードがあります。このモードは、検証の厳しさを決定し、回避方法に影響を与えます。
hCaptchaの技術と検出方法
hCaptchaは、プライバシーと機械学習を通じた収益化に重点を置いたGoogle reCAPTCHAの競合として登場しました。このシステムは、ウェブサイトの所有者にユーザーデータをAIモデルのトレーニングに使用するための支払いを提供します。技術的な観点から、hCaptchaはTurnstileよりも自動化の検出においてより攻撃的です。
hCaptchaの主な動作メカニズムには、複数の保護レベルが含まれます。最初のレベルは、ネットワークパラメータの検証です: システムはTTLパケット、ネットワークの遅延、IPアドレスの地理的位置の一貫性、ブラウザの宣言されたタイムゾーンを分析します。次のレベルは、JavaScript呼び出しです: hCaptchaはWeb APIの存在と正確な動作を確認します。最後のレベルは、マウスの動き、スクロール速度、クリックパターンの行動分析です。
hCaptchaの特徴は、チャレンジベースの検証を使用することです。システムがボットを疑うと、特定のオブジェクトを含む画像の選択、パズルの解決、歪んだ画像上のテキストの認識などの視覚的なタスクを表示します。タスクの難易度は、各失敗した試行ごとに動的に上昇します。プロキシユーザーにとって、これは正しいフィンガープリンティングを持っていても無限のキャプチャの連鎖を引き起こすことを意味します。
| パラメータ | Turnstile | hCaptcha |
|---|---|---|
| 非表示モード | はい、デフォルトで | オプション |
| IPの評判 | 重要 | 重要 |
| フィンガープリンティング | 中程度 | 攻撃的 |
| 行動分析 | 基本 | 高度 |
| キャプチャの頻度 | 低い | 中程度から高い |
ブラウザフィンガープリンティングとプロキシ
ブラウザフィンガープリンティングは、ブラウザとデバイスのユニークな特性のセットによってユーザーを識別する技術です。IPアドレスを変更するためにプロキシを使用しても、フィンガープリンティングは変わらず、自動化の使用を明らかにする可能性があります。現代の保護システムは、フィンガープリンティングを作成するために50から200以上のパラメータを収集します。
フィンガープリンティングの主なコンポーネントには、Canvasフィンガープリンティング(GPUとドライバに依存するユニークなグラフィックレンダリング)、WebGLフィンガープリンティング(グラフィックアクセラレータのパラメータ)、Audio Contextフィンガープリンティング(音声処理の特性)、インストールされたフォントのリスト、画面のパラメータ(解像度、色深度、ピクセル比)、User-Agentとブラウザのヘッダー、言語設定、タイムゾーン、プラグインと拡張機能の有無が含まれます。
プロキシユーザーにとっての問題は、不一致です。例えば、IPアドレスがドイツの位置を示しているのに、ブラウザのタイムゾーンがモスクワに設定されている場合—これは赤信号です。WebRTCリークがプロキシと異なる実際のIPアドレスを明らかにすると、システムは即座に置き換えを特定します。User-AgentがWindowsを示しているが、CanvasフィンガープリンティングがLinuxに一致する場合—検出は保証されます。
// 基本的なフィンガープリンティングの収集例
const fingerprint = {
canvas: getCanvasFingerprint(),
webgl: getWebGLFingerprint(),
fonts: getFonts(),
screen: {
width: screen.width,
height: screen.height,
colorDepth: screen.colorDepth,
pixelRatio: window.devicePixelRatio
},
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
platform: navigator.platform,
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
webrtc: await getWebRTCIPs()
};
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillText('ブラウザフィンガープリンティング', 2, 2);
return canvas.toDataURL();
}
プロキシサーバーの検出方法
保護システムは、プロキシを検出するために多くの技術を使用します。最初の方法は、既知のプロキシとVPNのデータベースをチェックすることです。IPHub、IP2Proxy、MaxMind GeoIP2のようなサービスは、プロキシ、VPN、ホスティングプロバイダーとして分類された数百万のIPアドレスを含んでいます。CloudflareとhCaptchaはこれらのデータベースと統合されており、疑わしいIPに対して自動的に検証レベルを引き上げます。
次の方法は、ASN(自律システム番号)の分析です。データセンターのプロキシは通常、ホスティングプロバイダー(AWS、DigitalOcean、OVH)に属しており、ASNによって簡単に特定できます。居住用プロキシは、一般的なインターネットプロバイダー(Comcast、Verizon、Deutsche Telekom)のASNを使用しているため、疑わしさが少なくなります。しかし、居住用ネットワークであっても、プロバイダーがプロキシ販売で知られている場合は部分的に侵害される可能性があります。
第三の方法は、ネットワークレベルでの行動分析です。システムは異常を追跡します: パケットのTTLが低すぎるまたは高すぎる、異常な遅延、非標準ポートの使用、地理的位置とルーティングパスの不一致。例えば、IPアドレスがアメリカに地理的に位置付けられているのに、トレーサルートがヨーロッパのサーバーを経由している場合—これはプロキシの兆候です。
一般的な誤り: 異なるフィンガープリンティングで複数のセッションに同じIPアドレスを使用すること。システムはそのようなパターンを追跡し、質の高い居住用プロキシであってもIPを完全に禁止します。
居住用プロキシの基本的な解決策
居住用プロキシは、TurnstileとhCaptchaを回避するための基盤です。データセンターのプロキシとは異なり、居住用プロキシは実際のデバイスのIPアドレスを使用します: 自宅のルーター、モバイル電話、IoTデバイス。これにより、ネットワークインフラの観点から、通常のユーザーとほとんど区別がつかなくなります。
キャプチャ回避のための居住用プロキシの主な利点: ISP(インターネットサービスプロバイダー)に属し、ホスティングプロバイダーには属さない; 大多数の場合、IPアドレスのクリーンな評判; 正確な地理的位置とルーティング; ブラックリストに載る可能性が低い。しかし、すべての居住用プロキシが同じように効果的であるわけではありません。いくつかの要因が重要です。
最初の要因は、IPアドレスのローテーションです。静的居住用プロキシ(スティッキーセッション)は、数分から数時間の間に1つのIPを使用することができます。これは、セッションの維持が必要なシナリオに最適です: 認証、フォームの記入、多段階操作。ローテーションプロキシは、各リクエストごとにIPを変更するか、タイマーによって変更します。これはパーシングに便利ですが、コンテキストの頻繁な変更によりキャプチャに問題を引き起こす可能性があります。
第二の要因は、地理的分布です。キャプチャを回避するためには、IPの地理的位置がターゲットサイトとブラウザの設定と一致することが重要です。ドイツのサイトで作業している場合は、ドイツの居住用プロキシを使用し、ブラウザで対応するタイムゾーン(Europe/Berlin)、言語(de-DE)、ロケールを設定してください。
第三の要因は、プロキシプロバイダーの品質です。安価な居住用プロキシは、疑わしい方法(無料のVPNアプリ、感染したデバイス)を通じて収集されることが多く、IPプールの評判が低下します。プロフェッショナルなプロバイダーは、合法的なSDKパートナーシップとともに、ネットワークの品質を厳密に監視しています。スケールアップする前に、ターゲットサイトでのプロバイダーの成功率を確認してください。
自動化ツール: Selenium, Puppeteer, Playwright
自動化ツールの選択は、キャプチャを回避する能力に重大な影響を与えます。Selenium、Puppeteer、Playwrightは、各自に特有の検出の特徴を持つ3つの主要なソリューションです。保護システムは、これらのツールの使用を数十の兆候で特定できます。
Seleniumは最も古く、最も簡単に検出されるツールです。Seleniumによって制御されるブラウザには明確なマーカーがあります: 変数window.navigator.webdriverがtrueに設定されており、特定のブラウザウィンドウのサイズ、特定のnavigatorオブジェクトのプロパティが欠如しています。プロキシを使用しても、Seleniumは追加の難読化なしにTurnstileやhCaptchaの検証に失敗することがよくあります。
PuppeteerとPlaywrightは、Chrome DevTools Protocolに基づくより現代的なツールです。これらも検出されますが、明確な兆候は少なくなっています。主な検出方法は、chrome.runtimeの検証、permissions APIの分析、プラグインの不在や特定のビューポートサイズを通じたヘッドレスモードの検出、タイミング攻撃を通じたDevToolsの存在の確認です。
// プロキシとアンチデテクトを使用したPuppeteerの基本設定
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
headless: false, // headless: trueは簡単に検出されます
args: [
'--proxy-server=http://your-proxy:port',
'--disable-blink-features=AutomationControlled',
'--disable-dev-shm-usage',
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process',
`--window-size=1920,1080`,
'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
]
});
const page = await browser.newPage();
// プロキシの認証
await page.authenticate({
username: 'proxy_user',
password: 'proxy_pass'
});
// webdriverプロパティの上書き
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => false
});
// ヘッドレス用のプラグインのエミュレーション
Object.defineProperty(navigator, 'plugins', {
get: () => [1, 2, 3, 4, 5]
});
});
キャプチャを真剣に回避するためには、専門のアンチデテクトブラウザを使用することをお勧めします: Multilogin、GoLogin、AdsPower、Dolphin Anty。これらのソリューションは、ユニークなフィンガープリンティングを持つ隔離されたブラウザプロファイルを作成し、クッキーやセッションストレージを管理し、プロキシの地理位置に合わせてタイムゾーンを自動的に同期し、リアルなCanvasおよびWebGLフィンガープリンティングをエミュレートします。
キャプチャ解決サービス: 統合と効果
技術的手法が不十分な場合、キャプチャ解決サービスが役立ちます。これらは2つのタイプに分かれます: 人間(クラウドソーシング)と自動(機械学習)。TurnstileとhCaptchaに対する効果は異なります。
人間のサービス(2Captcha、AntiCaptcha、CapSolver、CapMonster Cloud)は、分散労働の原則に基づいています: あなたのキャプチャは実際の人間に送信され、手動で解決されます。利点: 高い成功率(hCaptchaで95-99%、Turnstileで85-95%)、複雑な視覚的タスクのサポート、相対的な安定性。欠点: 解決速度は10-60秒、1000キャプチャあたりのコストは$1-3、オペレーターの可用性に依存します。
自動サービスは、AIモデルを使用して認識します。これらはより速く(1-5秒)安価ですが、現代のキャプチャに対する成功率は低く、通常はhCaptchaで60-80%、Turnstileで50-70%です。簡単なチャレンジベースのタスクには効果的ですが、見えない検証ではしばしば失敗します。
// 2Captchaを使用してhCaptchaを解決するための統合
const axios = require('axios');
async function solveHCaptcha(sitekey, pageUrl, proxyConfig) {
const API_KEY = 'your_2captcha_api_key';
// タスクの送信
const createTask = await axios.post('https://2captcha.com/in.php', null, {
params: {
key: API_KEY,
method: 'hcaptcha',
sitekey: sitekey,
pageurl: pageUrl,
proxy: `${proxyConfig.type}:${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
json: 1
}
});
const taskId = createTask.data.request;
// 解決を待つ
let solution = null;
for (let i = 0; i < 60; i++) {
await new Promise(resolve => setTimeout(resolve, 3000));
const result = await axios.get('https://2captcha.com/res.php', {
params: {
key: API_KEY,
action: 'get',
id: taskId,
json: 1
}
});
if (result.data.status === 1) {
solution = result.data.request;
break;
}
}
return solution; // フォームに挿入するためのトークン
}
// Puppeteerでの使用
const captchaToken = await solveHCaptcha(
'site-key-from-page',
'https://example.com',
{ type: 'http', host: 'proxy.example.com', port: 8080, user: 'user', pass: 'pass' }
);
await page.evaluate((token) => {
document.querySelector('[name="h-captcha-response"]').value = token;
document.querySelector('[name="g-recaptcha-response"]').value = token;
}, captchaToken);
キャプチャ解決サービスに正しいプロキシパラメータを渡すことが重要です。もしキャプチャが1つのIPから解決され、その後トークンが別のIPで使用されると—検証は失敗します。現代のキャプチャはトークンをIPアドレス、User-Agent、その他のセッションパラメータに結びつけます。
高度な技術: デバイスのエミュレーションとTLSフィンガープリンティング
最も保護されたシステムを回避するためには、プロキシとブラウザの基本設定を超えた高度な技術が必要です。2つの重要な領域は、モバイルデバイスのエミュレーションとTLSフィンガープリンティングの管理です。
モバイルプロキシとモバイルブラウザのエミュレーションを組み合わせることで、キャプチャに対する高い効果が得られます。理由: モバイルトラフィックはより高い信頼スコアを持ち、モバイルIPアドレス(特に4G/5G)はしばしば動的で自然に変更され、モバイルデバイスは異なるフィンガープリンティングパラメータのセットを持ち、多くのサイトはモバイルユーザーのために検証を簡素化します。
モバイルデバイスを正しくエミュレートするためには、モバイルUser-Agentを使用すること(デバイスモデルに正確に一致)、正しいビューポートとdevicePixelRatioを設定すること、マウスイベントの代わりにタッチイベントをエミュレートすること、navigator.platformとnavigator.maxTouchPointsのモバイル値を使用すること、特定のデバイスモデルに合わせてWebGLとCanvasフィンガープリンティングを設定することが必要です。
// PlaywrightでiPhone 13 Proをエミュレート
const { chromium, devices } = require('playwright');
const iPhone13Pro = devices['iPhone 13 Pro'];
const browser = await chromium.launch({
proxy: {
server: 'http://mobile-proxy:port',
username: 'user',
password: 'pass'
}
});
const context = await browser.newContext({
...iPhone13Pro,
locale: 'en-US',
timezoneId: 'America/New_York',
geolocation: { latitude: 40.7128, longitude: -74.0060 },
permissions: ['geolocation']
});
const page = await context.newPage();
// フィンガープリンティングの追加設定
await page.addInitScript(() => {
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 6 // iPhone 13 Proは6コア
});
Object.defineProperty(navigator, 'deviceMemory', {
get: () => 6 // 6GB RAM
});
});
TLSフィンガープリンティングは、TLS/SSL接続のパラメータによってクライアントを識別する方法です。各ブラウザとオペレーティングシステムは、HTTPS接続を確立する際に送信されるユニークな組み合わせのcipher suites、extensions、elliptic curvesを持っています。保護システムはTLSフィンガープリンティングを分析し、宣言されたUser-Agentと比較します。
標準的な自動化ツールの問題は、基本的なChromiumのTLSフィンガープリンティングを使用しているため、完全なChromeとは異なることです。この不一致は検出されます。解決策: curl-impersonateやPythonのtls-clientのようなライブラリを使用して特定のブラウザのTLSフィンガープリンティングをエミュレートすること; TLSをカスタマイズしたHTTPクライアントを使用すること(例えば、Node.js用のcycletls); ヘッドレスモードの代わりに完全なブラウザを使用すること。
組み合わせアプローチ:
- クリーンなIPのための居住用またはモバイルプロキシ
- 正しく設定されたPlaywrightまたはアンチデテクトブラウザによる正確なフィンガープリンティング
- すべてのパラメータの同期: IPの地理的位置 = タイムゾーン = 言語 = ロケール
- 人間の行動のエミュレーション: 遅延、マウスの動き、スクロール
- 複雑なケースのためのフォールバックとしてのキャプチャ解決サービス
コードの実用例
Turnstileを回避するための完全な例を、Playwright、居住用プロキシ、およびアンチデテクト技術を使用して考えてみましょう。このコードは、問題解決への包括的なアプローチを示しています。
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth')();
// プロキシの設定
const proxyConfig = {
server: 'http://residential-proxy.proxycove.com:8080',
username: 'your_username',
password: 'your_password'
};
// ドイツの実際のユーザーを模倣するための設定
const userConfig = {
viewport: { width: 1920, height: 1080 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
locale: 'de-DE',
timezoneId: 'Europe/Berlin',
geolocation: { latitude: 52.5200, longitude: 13.4050 }, // ベルリン
permissions: ['geolocation']
};
async function bypassTurnstile(url) {
const browser = await chromium.launch({
headless: false, // 複雑なキャプチャには重要
proxy: proxyConfig,
args: [
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--disable-dev-shm-usage'
]
});
const context = await browser.newContext({
...userConfig,
// 追加のヘッダー
extraHTTPHeaders: {
'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7',
'Accept-Encoding': 'gzip, deflate, br',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'DNT': '1',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
});
const page = await context.newPage();
// アンチデテクトスクリプトの挿入
await page.addInitScript(() => {
// webdriverの隠蔽
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
// chrome runtimeのエミュレーション
window.chrome = {
runtime: {}
};
// permissionsの上書き
const originalQuery = window.navigator.permissions.query;
window.navigator.permissions.query = (parameters) => (
parameters.name === 'notifications' ?
Promise.resolve({ state: Notification.permission }) :
originalQuery(parameters)
);
// Windowsのためのより現実的な値
Object.defineProperty(navigator, 'platform', {
get: () => 'Win32'
});
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 8
});
Object.defineProperty(navigator, 'deviceMemory', {
get: () => 8
});
});
// 人間の行動のエミュレーション
async function humanLikeDelay(min = 1000, max = 3000) {
const delay = Math.random() * (max - min) + min;
await page.waitForTimeout(delay);
}
async function humanLikeMouseMove() {
const viewportSize = page.viewportSize();
const x = Math.random() * viewportSize.width;
const y = Math.random() * viewportSize.height;
await page.mouse.move(x, y, { steps: 10 });
}
try {
// ページに移動
await page.goto(url, { waitUntil: 'networkidle' });
await humanLikeDelay(2000, 4000);
await humanLikeMouseMove();
// Turnstileの読み込みを待つ
await page.waitForSelector('iframe[src*="turnstile"]', { timeout: 10000 });
console.log('Turnstileが検出されました、自動解決を待っています...');
// Turnstileのmanagedモードは自動的に解決されることが多い
// トークンの出現を待つ
await page.waitForFunction(() => {
const response = document.querySelector('[name="cf-turnstile-response"]');
return response && response.value.length > 0;
}, { timeout: 30000 });
console.log('Turnstileを成功裏に通過しました!');
// サイトでのさらなるアクション
await humanLikeDelay();
// 例: フォームの記入
await page.fill('#email', 'user@example.com');
await humanLikeDelay(500, 1500);
await page.fill('#password', 'SecurePassword123');
await humanLikeDelay(500, 1500);
await humanLikeMouseMove();
await page.click('button[type="submit"]');
await page.waitForNavigation({ waitUntil: 'networkidle' });
console.log('認証が完了しました');
} catch (error) {
console.error('Turnstileの回避中にエラーが発生しました:', error.message);
// デバッグ用のスクリーンショット
await page.screenshot({ path: 'turnstile_error.png', fullPage: true });
} finally {
await browser.close();
}
}
// 実行
bypassTurnstile('https://example.com/login');
hCaptchaに視覚的なタスクがある場合は、解決サービスの統合が必要です。以下は2Captchaを使用した例です:
const axios = require('axios');
class HCaptchaSolver {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://2captcha.com';
}
async solve(sitekey, pageUrl, proxy = null) {
// タスクの作成
const params = {
key: this.apiKey,
method: 'hcaptcha',
sitekey: sitekey,
pageurl: pageUrl,
json: 1
};
if (proxy) {
params.proxy = `${proxy.type}:${proxy.host}:${proxy.port}:${proxy.username}:${proxy.password}`;
params.proxytype = proxy.type.toUpperCase();
}
const createResponse = await axios.post(`${this.baseUrl}/in.php`, null, { params });
if (createResponse.data.status !== 1) {
throw new Error(`タスク作成エラー: ${createResponse.data.request}`);
}
const taskId = createResponse.data.request;
console.log(`タスクが作成されました: ${taskId}`);
// 結果のポーリング
for (let attempt = 0; attempt < 60; attempt++) {
await new Promise(resolve => setTimeout(resolve, 5000));
const resultResponse = await axios.get(`${this.baseUrl}/res.php`, {
params: {
key: this.apiKey,
action: 'get',
id: taskId,
json: 1
}
});
if (resultResponse.data.status === 1) {
console.log('hCaptchaが解決されました!');
return resultResponse.data.request;
}
if (resultResponse.data.request !== 'CAPCHA_NOT_READY') {
throw new Error(`解決エラー: ${resultResponse.data.request}`);
}
console.log(`試行 ${attempt + 1}/60: キャプチャはまだ解決されていません...`);
}
throw new Error('タイムアウト: キャプチャは5分以内に解決されませんでした');
}
}
// Playwrightでの使用
async function bypassHCaptcha(page, proxyConfig) {
// ページからsitekeyを取得
const sitekey = await page.getAttribute('[data-sitekey]', 'data-sitekey');
const pageUrl = page.url();
const solver = new HCaptchaSolver('your_2captcha_api_key');
const token = await solver.solve(sitekey, pageUrl, {
type: 'http',
host: 'residential-proxy.proxycove.com',
port: 8080,
username: 'your_username',
password: 'your_password'
});
// ページにトークンを挿入
await page.evaluate((captchaToken) => {
document.querySelector('[name="h-captcha-response"]').value = captchaToken;
// 一部のサイトではg-recaptcha-responseも必要です
const gRecaptcha = document.querySelector('[name="g-recaptcha-response"]');
if (gRecaptcha) {
gRecaptcha.value = captchaToken;
}
// コールバックのためのイベントをトリガー
const event = new Event('change', { bubbles: true });
document.querySelector('[name="h-captcha-response"]').dispatchEvent(event);
}, token);
console.log('hCaptchaトークンが挿入されました');
}
結論
TurnstileとhCaptchaをプロキシを通じて回避することは、保護メカニズムを理解し、技術を適切に組み合わせる必要がある複雑なタスクです。重要な結論: 質の高い居住用またはモバイルプロキシをデータセンターのものの代わりに使用し、すべての環境パラメータ(IP地理位置、タイムゾーン、言語、ロケール)を同期し、自動化を隠すためのアンチデテクト技術を適用し、現実的な人間の行動をエミュレートし、キャプチャ解決サービスを追加の保護レベルとして使用してください。
方法の効果は、特定のサイトと保護設定によって異なります。基本的な設定から始め、成功率を監視しながら徐々に複雑にしていくことをお勧めします。IPプールのブロックを避けるために、小規模でテストを行ってからスケールアップしてください。フィンガープリンティングパラメータとUser-Agentを最新のブラウザバージョンに合わせて定期的に更新してください。
キャプチャを専門的に扱うためには、プロキシ、アンチデテクトブラウザ、解決サービスを統合した専門の自動化プラットフォームの使用を検討してください。これにより、統合の複雑さが軽減され、結果の安定性が向上します。まずは質の高いプロキシのテストをターゲットサイトで行うことから始めてください—これは現代の保護システムを成功裏に回避するための基盤です。