reCAPTCHA のタスクを作成するには、websiteURL(キャプチャが表示されるページの URL)と websiteKey(サイトキー)が必要です。v3 ではさらに pageAction が必要です。Selenium などでブラウザを操作して送信する場合は、コールバック関数も必要になります。これらはすべてブラウザの開発者ツール(F12)で確認できます。
最も簡単な方法:自動検出スクリプト
Section titled “最も簡単な方法:自動検出スクリプト”キャプチャが表示されているページを開き、F12 でコンソール(Console)を開いて、次のスクリプトを貼り付けて実行します。
// Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients().// Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function.function findRecaptchaClients() { if (typeof ___grecaptcha_cfg === 'undefined') return []; return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => { const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' }; const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object'); objects.forEach(([toplevelKey, toplevel]) => { const found = Object.entries(toplevel).find( ([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value, ); if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI; if (found) { const [sublevelKey, sublevel] = found; data.sitekey = sublevel.sitekey; const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback'; const callback = sublevel[callbackKey]; if (!callback) { data.callback = null; data.function = null; } else { data.function = callback; const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join(''); data.callback = `___grecaptcha_cfg.clients${keys}`; } } }); return data; });}
findRecaptchaClients();結果の sitekey が websiteKey、pageurl が websiteURL です。version は v2 か v3 かを示し、function と callback がコールバック関数です。
[ { "id": "0", "version": "V2", "sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "function": "onSuccess", "callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']", "pageurl": "https://www.google.com/recaptcha/api2/demo" }]空の配列が返る場合は、ページで reCAPTCHA がまだ読み込まれていません。キャプチャが表示されてから再度実行してください。
websiteKey と websiteURL
Section titled “websiteKey と websiteURL”Network パネルで anchor を検索し、次のようなリクエストを探します。
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normalk=の後ろの値がwebsiteKeyです。websiteURLには、キャプチャが表示されているページの完全な URL を指定します(このリクエストのRefererが通常それに当たります)。
ページのソースで data-sitekey を検索しても見つかります。
pageAction(v3)
Section titled “pageAction(v3)”pageAction は、ページが grecaptcha.execute(サイトキー, {action: '...'}) を呼ぶ際に渡す action のことで、ページ側と一致させる必要があります。
方法 1:ソースを検索する。 開発者ツールの Sources パネルで右クリックし、「Search in all files」を選びます。通常の v3 は .execute(、Enterprise 版 v3 は .enterprise.execute を検索し、続く action を確認します。
grecaptcha.ready(function () { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) { // ... });});この例では pageAction は login です。
方法 2:ブレークポイントを使う。 コードが難読化されていて検索で見つからない場合は、コンソールで debug(grecaptcha.execute)(Enterprise 版は debug(grecaptcha.enterprise.execute))を実行し、ページ上で検証が発生する操作(ログインのクリックなど)を行います。ブレークポイントで停止したら、右側の Scope で action の値を確認します。
サイトによっては、ステップごとに異なる action を使います(例:登録時に signup/submit_email の後に signup/success)。通過したいステップの値を使用してください。F8 キーで実行を再開すると、次の action を確認できます。
コールバック関数
Section titled “コールバック関数”Selenium などでブラウザ上のページに token を入力する場合、入力後にページのコールバック関数を呼び出して、検証が完了したことをページに伝えます。
- Elements パネルで
data-callbackを検索します。その値がコールバック関数名です(例:data-callback="onSuccess")。 - または
grecaptcha.renderを検索し、引数のcallbackを確認します。 - または、コンソールで
___grecaptcha_cfg.clientsを確認するか、上記の自動検出スクリプトを使います。
呼び出し方:
driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response)コールバック関数のないページもあります。その場合は、token を g-recaptcha-response のテキストボックスに入力して、そのままフォームを送信してください。全体の流れは token で reCAPTCHA を通過する を参照してください。