我一直在努力弄清楚如何编写一些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。
任何指示都将不胜感激,谢谢!
答案 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
}