任意のページでcaptchaのサイトキーを見つける方法(4つ)
captchaの解決はすべて、サイトキーから始まります。サイトキーは、サイトがcaptchaプロバイダーに登録した公開のIDです。ブラウザはそれを見ているので、あなたも読み取れます。PopularCaptchaの場合、サイトキーはa5f74b19-9e45-40e0-b45d-47ff91b7a6c2のようなUUIDです。他のプロバイダーは別の形式を使います。たとえばGoogle reCAPTCHAのキーは6Lで始まります。以下が、簡単なものから確実なものへの順で、サイトキーを見つける4つの場所です。
Scarnoxは現在PopularCaptchaを解決しています。サイトキーの探し方はどのcaptchaでも同じなので、別の種類を計画するときにもこの方法が使えます。reCAPTCHAやCloudflare Turnstileなどの他の種類は近日対応予定です。
1. data-sitekey属性
DevToolsを開き(F12)、Elementsに移動して、Ctrl+Fを押し、data-sitekeyを検索します。ほとんどのウィジェットは、次のような属性にキーを入れています。
<div class="h-captcha" data-sitekey="a5f74b19-9e45-40e0-b45d-47ff91b7a6c2"></div>
ここで見つかれば終わりです。値をコピーして、解決に進んでください。
2. ネットワークタブ
ウィジェットがJavaScriptで描画されている場合、その属性はHTMLに一度も現れないことがあります。Networkを開いてページを再読み込みし、ウィジェットの設定リクエストで絞り込みます。PopularCaptchaの場合、そのリクエストは通常checksiteconfigという名前です。サイトキーはそのクエリパラメーターの1つです。
.../checksiteconfig?v=...&host=example.com&sitekey=a5f74b19-...
テストしているサイトで名前が違う場合は、リクエストのURLに含まれるsitekeyという語で絞り込んでも見つけられます。
3. iframeのURL
チャレンジ自体は、captchaプロバイダーから配信されるiframeです。そのsrcにはサイトキーがパラメーターとして含まれています。ウィジェットを右クリックして検証を選び、iframeのアドレスから値を読み取ってください。ページがメインのドキュメントから属性を隠している場合に、最も確実な方法です。
4. インビジブルウィジェット
インビジブルウィジェットにはチェックボックスがありません。サイトは自分のコードからウィジェットのrender()またはexecute()関数を呼び出し、サイトキーを引数として渡します。ページのJavaScriptからそれを探してください。Sourcesパネルを開き、Ctrl+Shift+Fを押して、sitekeyを検索します。インビジブルのサイトキーは、解決する際にインビジブルのフラグが必要です。インビジブルcaptchaの解決を参照してください。
スクリプトからサイトキーを読む
属性が生のHTMLに含まれている場合、スクリプトはブラウザを使わずに読み取れます。
import re
import requests
html = requests.get("https://example.com/signup", timeout=30).text
m = re.search(r'data-sitekey="([^"]+)"', html)
print(m.group(1) if m else "no data-sitekey in the raw HTML")
これが何も出力しない場合、ウィジェットはJavaScriptで描画されています。上のネットワークタブの方法と同じく、実際のブラウザを使ってください。自動化してよいページだけを取得し、リクエストの頻度は低く保ってください。
どのURLと組み合わせるか
ウィジェットがあるページのURLをsite_urlとして送ります。重要なのはホストなので、会員登録のウィジェットにはhttps://example.com/signupを使います。PopularCaptchaの完全なリクエストは次のようになります。
{
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2",
"site_url": "https://example.com/signup"
}
これをhttps://api.scarnox.com/api/tasks/createに、Authorization: Bearerヘッダーでキーを付けて送ります。呼び出しはトークンの準備ができるまでブロックするので、結果を確認するための2回目のリクエストはありません。
よくある問題
- 1つのページに2つのサイトキー。 サイトによっては、ログインフォームと会員登録フォームのためにそれぞれウィジェットを置いています。自分を拒否しているフォームに合うキーを選び、どちらが送信ボタンの近くにあるかを確認してください。
- 訪問ごとにキーが変わる。 実行のたびに読み直してください。キーは通常安定していますが、古いデプロイのキャッシュされたキーは動かなくなることがあります。
- キーは見つかったがトークンが拒否される。 サイトキーはおそらく正しいです。次にウィジェットのサイズとプロキシの設定を確認してください。まずはインビジブルcaptchaのガイドとプロキシありとプロキシなしの比較を参照してください。
正しいサイトキーかを確認する
1つのページに複数のサイトキーが含まれることがあります。分析用のウィジェット、コメントフォーム、ニュースレターのボックスが、それぞれ独自のキーを追加することもあります。解決する前に、そのサイトキーが自動化しようとしているフォームのものであることを確認してください。役立つ確認は3つです。
- DevToolsでフォームの送信ボタンを見つけ、DOMを上にたどって、
data-sitekeyを持つ最も近い要素まで行きます。それがそのフォームを守るウィジェットです。 - キーをiframeのURLにあるものと比べます。一致すれば、そのウィジェットが実際に使っているキーです。
- 許可されている場合は、解決したトークンを使ってフォームを一度手動で送信し、サイトが受け付けるか確認します。
サイトを再デプロイすると、キーが変わることがあります。昨日は動いていたキーが、受け付けられるトークンを生成しなくなったら、ほかの原因を探す前に、ページを読み直してください。読み直しには費用がかからず、突然の失敗の最も多い原因を取り除けます。
クリックの後にだけウィジェットが読み込まれるページでは、もう一手間が必要です。ページを開き、ウィジェットを表示させるクリックを行い、その後でサイトキーを読み取ってください。クリックの前に読むと何も返ってきません。それは、ウィジェットが存在しないように見えますが、実際はタイミングの問題です。固定時間だけ待つのではなく、[data-sitekey]に一致する要素が現れるまで待ってください。
次のステップ
無料のトライアルクレジットで始める(カード登録は不要)、最初のサイトキーをテストしてみてください。