2016-09-08 110 views
1

我試圖調整容器div時Recaptcha顯示拼圖,而不是複選框。這通常發生在點擊複選框後。我怎樣才能做到這一點?如何檢查Google Recaptcha V2拼圖是否顯示?

我知道有一些條件會迫使Recaptcha V2顯示一個拼圖而不是複選框。但是,Api不會返回可能表明發生此更改的屬性或事件。有沒有在JavaScript或通過API的方式,我可以確定是否Recaptcha V2顯示拼圖?

注意:這將是在我還沒有指定後備=在API網址真實的情況。

+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元素爲止。您可能還需要一個更具體的選擇器(通過將您的recaptcha包裝在div中),因爲您有其他可以在代碼中使用相同標題的iframe。如評論中所述,使用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);

相關問題