2016-09-08 8 views
1

Recaptchaがチェックボックスの代わりにパズルを表示するときにコンテナdivのサイズを変更しようとしています。これは、通常、チェックボックスがクリックされた後に発生します。これどうやってするの?Google Recaptcha V2パズルが表示されているかどうかを確認するにはどうすればよいですか?

Recaptcha V2にチェックボックスの代わりにパズルを表示させる特定の条件があることは知っています。しかし、Apiは、この変更が起こったことを示すプロパティまたはイベントを返しません。 JavaScriptやAPIを介して方法がありますか?Recaptcha V2がパズルを表示しているかどうかを確認できますか?

:これは私はAPIのURLにフォールバック=真を指定していない場合になること。

+0

それは、iframe内のreCAPTCHAを開いていますか?これらのクラスのものがページに存在するかどうかをチェックできますか? – krillgar

+0

あなたのページにHTMLを追加します。あなたのページをポーリングし、このクラス名 'g-recaptcha-bubble-arrow'を探す必要があります - それは突然変異を探すのに役立ちます:http://stackoverflow.com/questions/3219758/detect-changes-in-the -dom#answer-3219767 – colecmc

+1

iframeで開かれます。私はいくつかの要素とそのIDが生成されているのを見てきましたが、DOM操作でこれらのCSSセレクタを対象にすることはできません。 –

答えて

0

setIntervalでこれを行う方法は次のとおりです。ユーザーがボックスをチェックすることがない場合、ブラウザを強制終了させる可能性があります。フォームの記入を開始するまで、またはreCaptchaエレメントにマウスオーバー/フォーカスするまで待つまで、これを実行するのをやめたいかもしれません。また、コード内で同じタイトルを使用できる他のiframeがある場合は、より具体的なセレクタ(div内にrecaptchaをラップする)を使用することもできます。コメントで述べたように、mutationObserverを使用する方がはるかに良いアイデアです。 これはあなたが必要とすることを望みます。

function isPuzzleDisplayed (selector) { 
 
    /** 
 
    * @param {string} selector 
 
    * @returns boolean - if the specified element exists 
 
    */ 
 
    return document.querySelectorAll(selector).length >= 1; 
 
} 
 

 
var timer = setInterval(function() { 
 
    /** 
 
    * Check if element exists every 0 seconds. 
 
    * If it does, kill timer, else keep running forever! 
 
    * WARNING! This is not performant. 
 
    */ 
 
    if (isPuzzleDisplayed('iframe[title*="recaptcha challenge"]')) { 
 
     console.log('But this is how you do it!'); 
 
     /* run your code here */ 
 
     clearInterval(timer); 
 
     timer = 0; 
 
    } else { 
 
     console.log('It is true the Api however does not return a property or event that would indicate that this change has happened. >', timer); 
 
    } 
 
}, 0);

関連する問題