【问题标题】:Javascript to test if Google reCaptcha exists and is solved用于测试 Google reCaptcha 是否存在并已解决的 Javascript
【发布时间】:2017-09-11 18:50:27
【问题描述】:

我一直在努力弄清楚如何编写一些 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。

任何指点将不胜感激,谢谢!

【问题讨论】:

    标签: javascript iframe recaptcha userscripts


    【解决方案1】:

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

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

    如果使用显式方法,并且没有可以依赖的干净模板作为容器,那么您可以查看所有 iframe 并查找验证码 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
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我应该提到这一点,但我使用的是允许访问 iframe 内容的电子。假设我可以进入 iframe,我应该寻找什么?
      • @TMack 使用检查器找到这个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2020-10-17
      • 2015-09-22
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多