用于测试Google reCaptcha是否存在且已解决的Javascript

时间:2017-09-11 18:50:27

标签: javascript iframe recaptcha userscripts

我一直在努力弄清楚如何编写一些javascript来测试Google reCaptcha是否存在和/或是否已解决。问题是,我需要能够在任何网站上运行它,而不仅仅是我有权访问的网站。换句话说,一个简单的用户脚本来测试Google reCaptcha是否存在

它可以是创造性的,例如在元素存在中查看,查看对象是否存在,或者是否正在侦听事件。但我不知道从哪里开始。

到目前为止我唯一能成功运作的是这个,但它不可靠

var element = document.querySelector('[style="visibility: visible; position: absolute; width: 1812px; top: 10px; left: 0px; right: 0px; transition: visibility 0s linear 0s, opacity 0.3s linear; opacity: 1;"]')

这会抓取由reCaptcha创建的包含div。

任何指示都将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

这是不可能的,因为reCaptcha位于iframe中,您无法使用JavaScript从不同的来源访问iframe的内容。

答案 1 :(得分:0)

文档规范要求自动方法的容器Div为class =“g-recaptcha”,这可能是最常见的...但如果您需要完全模块化的解决方案,可能对您不起作用(适用于可能大多数人都在寻找这个答案,而且是最直接的解决方案)

if($("div.g-recaptcha").length > 0) {
    //captcha *container* exists
} else {
    //There's no container, there should be no captcha
}

如果使用显式方法,并且没有可以依赖容器的干净模板,那么您可以查看所有iframe并查找captcha src。这也适用于上面的自动实现,应该是一个通用的解决方案。

      var captchaExist = false;
      $( "iframe" ).each(function() {
          if($(this).attr('src').substring(0,33) === "https://www.google.com/recaptcha/")
              captchaExist = true;
      });

这些解决方案使用的是jQuery,但任何类选择器或循环iframe来检查src的方法都可行。

您无法看到iframe的内容,但可以访问代码本身的属性。

持有“解决方案”的密钥(验证码已解决)是另一个容器,隐藏的文本ID =“g-recaptcha-response”

if($("textarea#g-recaptcha-response").val().length > 0) {
    //captcha presumably solved. No guarantee until check on submission
}