Scarnox · Blog

インビジブル PopularCaptcha の解決: 違いと送るべき内容

インビジブルな PopularCaptcha は、キャプチャがまったくないように見えます。「私は人間です」のボックスはありません。サイトは自身の JavaScript から PopularCaptcha を呼び出します。通常は訪問者が送信ボタンを押したときです。サイトが訪問者を判断しきれない場合にだけ、チャレンジを表示します。自動化スクリプトにとってウィジェットは見つけにくいものですが、解決に必要なリクエストは1回だけです。

Scarnox は、インビジブル版を含め PopularCaptcha を今日解決します。フラグ is_invisible を1つ設定し、表示型のウィジェットに送るのと同じリクエストを送ります。他のキャプチャ種別は近日公開予定です。

インビジブルかどうかの見分け方

判断するのはページの見た目ではなく、sitekey に設定された構成です。迷ったら sitekey の見つけ方 を参照し、ページの JavaScript でウィジェットのオプションを確認してください。

送る内容

同じエンドポイントと同じタスク種別を使い、is_invisible を true に設定して追加します。

{
  "captcha_type": "PopularCaptchaTaskProxyless",
  "site_key": "10000000-ffff-ffff-ffff-000000000001",
  "site_url": "https://example.com/login",
  "is_invisible": true
}

他の例と同じように、キーは Authorization: Bearer ヘッダーで送ります。この呼び出しは、トークンの準備ができるまでブロックされ、ポーリングは不要です。タイムアウトは約185秒にしてください。

トークンの返し方

インビジブル型の連携は、ほぼ常にフォームフィールドではなくコールバックを使います。サイトはウィジェットに関数名を渡します。data-callback 属性か、render() に渡すオプションのどちらかです。その関数にトークンを渡して呼び出すと、訪問者がチャレンジを通過したかのように、サイト自身のコードが続行します。

await page.evaluate((t) => {
  document.querySelectorAll('[name="h-captcha-response"]').forEach((el) => { el.value = t; });
  const cb = document.querySelector("[data-sitekey]")?.dataset.callback;
  if (cb && typeof window[cb] === "function") window[cb](t);
}, token);

隠しフィールドにも設定しておくのは害がなく、送信時にそのフィールドを読むサイトにも対応できます。

タイミングは通常より重要

インビジブルなウィジェットでは、チャレンジをいつ実行するかをサイトが決めます。それは通常、訪問者が送信した瞬間です。ですから、解決はそれより前ではなく、その瞬間に行ってください。最も簡単なパターンは、スクリプトでボタンを押す直前に解決を実行し、コールバックを呼び出してから送信することです。

トークンの有効期限は約2分です。ページ読み込み時に取得したトークンを1分後に使うと、拒否される可能性が高くなります。

よくある間違い

インビジブルの sitekey を通常の表示型タスクとして送ると、サイトが拒否するトークンが返ることがあります。API がトークンを返したのにサイトが拒否する場合は、次の順番で確認してください。

  1. is_invisible が true に設定されているか。
  2. サイトがコールバックを呼び出しているか。また、フォームの送信より前に呼び出しているか。
  3. site_url が、インビジブルなウィジェットが動作しているページになっているか。
  4. それでもサイトがトークンを拒否する場合、問題はトークンを解決した IP に結びついている可能性があります。プロキシありとプロキシなしの解決の比較 と照らし合わせてください。

インビジブルなフローを安全にテストする

インビジブルなウィジェットは手作業でテストしにくいものです。チャレンジが実行されるのは送信時だけで、ほとんどの場合は何も表示されずに通過するからです。次の順番でテストしてください。

  1. is_invisible を true にした状態で、解決がトークンを返すことを確認する。無料トライアルのガイドにあるスモークテストを使います。
  2. そのトークンを使い、ブラウザのコンソールからサイトのコールバックを自分で呼び出し、フォームが続行するかどうかを確認する。
  3. スクリプトからフォームを送信し、次に表示されるページを確認する。
  4. 可能であれば別のネットワークから同じ実行を繰り返し、トークンが解決に使った IP に結びついていないことを確認する。

テストは、自分が所有するフォーム、または自分がテストしてよいサイトのステージング版で行ってください。自分が管理していないライブアカウントに対して、インビジブルなフローを実行しないでください。

インビジブルな送信1回の流れ

動作する連携は次の順序に従います。

  1. 訪問者、またはスクリプトがフォームに入力する。
  2. スクリプトがページから sitekey とページの URL を読み取る。
  3. スクリプトが is_invisible を true にして解決 API を呼び出し、トークンを待つ。
  4. スクリプトがトークンをレスポンスフィールドに書き込み、サイトのコールバックを呼び出す。
  5. サイトのコードが、トークンを添えてフォームを送信する。

ステップ3がステップ5よりずっと前に起きると、フォームが送信される前にトークンの期限が切れるかもしれません。その間隔はできるだけ短く保ってください。

サイトがインビジブルなトークンを拒否したとき

拒否はトークン自体の問題とは限りません。解決リクエストを変更する前に、次を確認してください。

これらを確認してから、初めてプロキシの問題を検討してください。拒否の多くは IP ではなく、コールバックかセッションが原因です。

次のステップ

無料トライアルクレジットから始められます。クレジットカードは不要です。アカウントを作成して、自分が管理するページでインビジブルな sitekey をテストしてください。