2016-09-08 3 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 # 응답 -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);

관련 문제