如何使用 Selenium 和 Python 绕过 Google CAPTCHA?
当我尝试抓取某些东西时,Google 会给我一个 CAPTCHA。我可以使用 Selenium Python 绕过 Google CAPTCHA 吗?
例如,它是 Google reCAPTCHA。您可以通过此链接查看此 CAPTCHA:https : //www.google.com/recaptcha/api2/demo
我的项目根目录中有 .env 文件,在我的 nuxt 配置中,我使用变量来配置 ReCaptcha,如下所示:
import dotenv from 'dotenv'
dotenv.config()
export default {
modules: [
['@nuxtjs/recaptcha', {
siteKey: process.env.RECAPTCHA_SITE_KEY,
version: 3,
size: 'compact'
}],
]
}
Run Code Online (Sandbox Code Playgroud)
在 .env 中像这样:
RECAPTCHA_SITE_KEY=6L....
Run Code Online (Sandbox Code Playgroud)
但应用程序总是失败并出现控制台日志错误:
ReCaptcha 错误:未提供密钥
当我像这样直接硬编码 ReCaptcha 密钥时:siteKey: 6L....
应用程序开始工作,所以我猜问题在于读取 nuxt.config 中的 .env props
你知道如何解决它吗?
编辑:我尝试通过@kissu推荐和我在这里找到的示例更新我的nuxt.config: https: //www.npmjs.com/package/@nuxtjs/recaptcha
所以有新的 nuxt.config 也不起作用:
export default {
modules: [
'@nuxtjs/recaptcha',
],
publicRuntimeConfig: {
recaptcha: {
siteKey: process.env.RECAPTCHA_SITE_KEY,
version: 3,
size: 'compact'
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个注册表单,上面有新的google recaptcha小部件.当用户提交信息时,我们使用javascript检查验证并将问题返回到页面(例如:"请使用有效的电话号码").但是,由于页面没有重新加载,当用户输入正确的信息并再次提交时(无需再次进行重新记录)... recaptcha不再有效,他们无法在不重新加载页面的情况下提交.
有一个很好的解决方案吗?我可以以某种方式重新加载小部件吗?我试过grecaptcha.render,但它并没有真正做任何事情.
编辑:
当我尝试再次渲染窗口小部件时,它说"占位符元素必须为空"
我试着清空似乎有用的元素($('.g-recaptcha').empty();)然后渲染但它仍然抛出相同的错误.
我正在做一个Java(JSP + Servlet)Web应用程序(我知道这个问题与技术无关).我希望使用最新的Goolge reCAPTCHA服务.
我正在玩这里找到的Goolge reCAPTCHA示例:
https://developers.google.com/recaptcha/docs/display#config
<html>
<head>
<title>reCAPTCHA demo: Simple page</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="?" method="POST">
<div class="g-recaptcha" data-sitekey="my_site_key"></div>
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我能够看到显示的recaptcha图像如下:
当我检查"我不是机器人"时,我得到以下信息:
如您所见,有一个验证按钮,根据我的测试,用户响应会发送给Google进行验证.
如何获取用户响应,以便我可以在自己的后端代码中验证用户响应(如Google建议的https://developers.google.com/recaptcha/docs/verify).
g-recaptcha-response POST parameter when the user submits the form on your site
Run Code Online (Sandbox Code Playgroud)
在服务器端,我可以通过点击"提交"按钮,仅在首先使用Google成功验证用户时才从参数"g-recaptcha-response"获取用户输入.否则,"g-recaptcha-response"在服务器端是空白的.这意味着只有在客户端验证成功后才能进行服务器端验证.如果是这样,那么在服务器端进行另一次验证有什么意义,这是Google reCAPTHA提供的选项?
我错过了什么吗?
我正在建立一个PHP网站,我想在登录表单上放置验证码.我选择了Google的新Invisible reCaptcha,但是我在实现它时遇到了麻烦(HTML部分,PHP正在运行).
我现在为"正常"reCaptcha获得的代码如下(根据Google reCaptcha说明,这有效):
<form action=test.php method="POST">
<input type="text" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<!-- <Google reCaptcha> -->
<div class="g-recaptcha" data-sitekey="<sitekey>"></div>
<!-- </Google reCaptcha> -->
<input type="submit" name="login" class="loginmodal-submit" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)
我注册时在确认电子邮件中发送了一些说明(大约需要24小时才能得到确认).这说明如下:
隐形reCAPTCHA集成
如果您尚未将网站与reCAPTCHA v2集成,请按照我们的开发者指南了解实施细节.
请确保您的网站密钥已被列入Inelible reCAPTCHA白名单.
要启用Invisible reCAPTCHA,而不是将参数放在div中,您可以将它们直接添加到html按钮.
3A.数据回调="".这就像复选框验证码一样,但是对于隐形验证是必需的.
3B.data-badge:这允许您重新定位reCAPTCHA徽章(即徽标和"受reCAPTCHA保护"文本).有效选项为'bottomright'(默认值),'bottomleft'或'inline',将徽章直接放在按钮上方.如果您将徽章设为内联,则可以直接控制徽章的CSS.
验证用户的响应没有变化.
我遇到的问题是HTML实现(因此我需要第3步的帮助.1,2和4对我有用).其余的我使用正常的reCaptcha并根据说明,它应该是相同的事情.我不明白数据回调和数据徽章是什么以及它是如何工作的.如何使用我的表单设置实现隐形reCaptcha的代码示例将是很棒的!
如何在客户端和服务器端(php)中集成Google reCAPTCHA版本3.以下代码用于显示recaptcha,但它不能正常工作.如何进行这种集成.
<html>
<head>
<script src='https://www.google.com/recaptcha/api.js?render=XXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'></script>
</head>
<body>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('XXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', {
action: 'action_name'
});
});
</script>
<form action="verify.php" method="post">
<input type="text" name="name" placeholder="Your name" required>
<input type="email" name="email" placeholder="Your email address" required>
<textarea name="message" placeholder="Type your message here...." required></textarea>
<input type="submit" name="submit" value="SUBMIT">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Verify.php
<?php
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])) {
//your site secret key
$secret = 'XXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
//get verify response data
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$responseData = json_decode($verifyResponse);
if($responseData->success):
print_r("Working Fine"); exit;
else:
print_r("No valid Key"); exit; …
Run Code Online (Sandbox Code Playgroud) 到目前为止,我正在使用Google Recaptcha v2,但现在我想使用最新版本(v3)更新我的WebApp.
是否有人可以为基本表单添加一个完全正常工作的Google Recaptcha v3示例,因为我找不到任何有用的演示文稿?
我真的很感激.
非常感谢你.
PS:我在服务器端使用Java Servlets,但是如果你使用php或其他什么解释也没关系.
我想通过AJAX提交表单时重置Google reCaptcha小部件,并发送一些输入错误或表单.我在同一页面上使用多个小部件,因此我明确地呈现这些小部件.
我的HTML代码:
<div class="g-recaptcha" id="recaptcha-1"></div>
<div class="g-recaptcha" id="recaptcha-2"></div>
...
<div class="g-recaptcha" id="recaptcha-20"></div>
Run Code Online (Sandbox Code Playgroud)
加载小部件
<script src="https://www.google.com/recaptcha/api.js?onload=reCaptchaCallback&render=explicit&hl=en" async defer></script>
<script>
var reCaptchaCallback = function() {
var elements = document.getElementsByClassName('g-recaptcha');
for (var i = 0; i < elements.length; i++) {
var id = elements[i].getAttribute('id');
grecaptcha.render(id, {
'sitekey' : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
});
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
提交表格后:
var id = $('.g-recaptcha', form).attr('id');
grecaptcha.reset(id);
Run Code Online (Sandbox Code Playgroud)
表单是提交表单的实例.
当表格填写正确时,一切正常.但reCaptcha不会重置或重新加载.尝试这个grecaptcha.reset()
但没有结果.
任何的想法?
我集成了新的隐藏reCAPTCHA(v2)框架,该框架默认使用click
提交按钮的事件验证用户.但是在内置HTML5表单验证之前触发此事件.我正在寻找一种方法,使其按预期的顺序进行:首先是表单验证,然后是reCAPTCHA.
我使用JQuery/AJAX将我的联系表单加载到我的页面中.
联系表单包含reCaptcha脚本.
不幸的是,JQuery在将脚本标签插入我的页面之前删除了它们.需要这些脚本标记,因为它们输出验证码.现在我加载的表单没有验证码.