可以使用人工打码平台进行破解:
本文不是讲如何破解谷歌的reCAPTCHA(实际上我们也办不到),而是介绍在程序中借助第三方(人工)打码平台顺利通过reCAPTCHA验证。
由于使用人工打码会产生费用,并且费用是和调用次数成正比的,所以本方法仅适用于reCAPTCHA出现频率比较低的场景,例如:
1)网站登录使用了reCAPTCHA。比如,有时Linkedin登录就会出现reCAPTCHA(如下图所示),验证当前客户端是否是“真人”。
2)网站对访问频率过快的客户端返回reCAPTCHA,通过验证后即可继续访问。比如Zocdoc.com这个网站。
下面进入正题。如何在程序中借助第三方(人工)打码平台通过reCAPTCHA验证?
因为reCAPTCHA表单是JS动态创建的,我们遇到的第一个难题就是如何获取到reCAPTCHA表单中的验证码图片的路径及各隐藏表单域的值。
1)一个办法就是使用类似webkit的浏览器模拟工具(例如,phantomjs)加载页面,这样就能直接获取到JS生成的HTML源码。但是实现起来比较复杂,还需要借助第三方的软件。
2)查看源码会发现如果页面禁用了JS,reCAPTCHA将使用iframe模式加载(如下示),此时验证码图片路径和各表单项都是直接可见的。
所以我们直接请求“https://www.google.com/recaptcha/api/noscript?k=******”即可获取到验证码的图片路径和其它隐藏表单域的值。
这个问题解决了。接下来我们要获取到验证码图片对应的明文。如何调用第三方打码平台进行图片验证码识别呢?
我们需要先下载验证码图片,再把图片的二进制数据上传给打码平台,然后等待平台人工打码返回明文。打码平台一般都提供了供各种常见语言调用的API,所以该过程也比较简单。
现在我们已经获取到验证码图片对应的明文,只要我们将其和其它隐藏表单域参数一起提交就能完成验证过程了。
闲话不多说,还是直接上代码比较实在(Python实现, 这是我们真实项目中用到的):
- # coding: utf-8
- # recaptcha.py
- import sys
- import os
- os.chdir(os.path.dirname(os.path.realpath(sys.argv[0])))
- import re
- import StringIO
- import deathbycaptcha
- from urlparse import urljoin
- from webscraping import common, xpath
- DEATHBYCAPTCHA_USERNAME = '******'
- DEATHBYCAPTCHA_PASSWORD = '******'
- def read_captcha(image):
- """image - fileobj, the captcha to be recognized
- """
- client = deathbycaptcha.SocketClient(DEATHBYCAPTCHA_USERNAME, DEATHBYCAPTCHA_PASSWORD)
- try:
- balance = client.get_balance()
- # Put your CAPTCHA file name or file-like object, and optional
- # solving timeout (in seconds) here:
- common.logger.info('Submit captcha to http://deathbycaptcha.com/.')
- captcha = client.decode(image)
- if captcha:
- # The CAPTCHA was solved; captcha["captcha"] item holds its
- # numeric ID, and captcha["text"] item its text.
- common.logger.info("CAPTCHA %s solved: %s" % (captcha["captcha"], captcha["text"]))
- return captcha["text"].strip()
- except deathbycaptcha.AccessDeniedException:
- # Access to DBC API denied, check your credentials and/or balance
- common.logger.info('Access to DBC API denied, check your credentials and/or balance')
- def solve_recaptcha(html, D):
- """To solve the Google recaptcha
- """
- m = re.compile(r']+src="(https?://www\.google\.com/recaptcha/api/noscript\?k=[^"]+)"', re.IGNORECASE).search(html)
- if m:
- common.logger.info('Need to solve the recaptcha.')
- # need to solve the captcha first
- iframe_url = m.groups()[0]
- # load google recaptcha page
- iframe_html = D.get(iframe_url, read_cache=False)
- # extract recaptcha_challenge_field value for future use
- recaptcha_challenge_field = xpath.get(iframe_html, '//input[@id="recaptcha_challenge_field"]/@value')
- if recaptcha_challenge_field:
- # extract captcha image link
- captcha_image_url = xpath.get(iframe_html, '//img/@src')
- if captcha_image_url:
- captcha_image_url = urljoin(iframe_url, captcha_image_url)
- # download captcha
- captcha_bytes = D.get(captcha_image_url, read_cache=False)
- if captcha_bytes:
- #open('captcha.jpg', 'wb').write(captcha_bytes)
- fileobj = StringIO.StringIO(captcha_bytes)
- # read the captcha via deathbycaptcha
- recaptcha_response_field = read_captcha(fileobj)
- if recaptcha_response_field:
- common.logger.info('Have got the captcha content = "%s".' % str(recaptcha_response_field))
- url = 'https://www.linkedin.com/uas/captcha-submit'
- post_data = {}
- captcha_form = xpath.get(html, '//form[@name="captcha"]')
- for input_name, input_value in re.compile(r']+type="hidden"\s+name="([^<>\"]+)"\s+value="([^<>\"]+)"').findall(captcha_form):
- post_data[input_name] = input_value
- post_data['recaptcha_challenge_field'] = recaptcha_challenge_field
- post_data['recaptcha_response_field'] = recaptcha_response_field
- return D.get(url, data=post_data, read_cache=False)
相关推荐
在控制器中,你需要在处理表单提交的函数里添加 reCAPTCHA 的验证。在 Laravel 中,可以使用 `ReCaptcha::verify()` 方法进行验证: ```php use Laravel\GoogleReCaptcha\Facades\ReCaptcha; public function ...
前端需要引入Google提供的api.js脚本,这个脚本包含了处理reCaptcha所需的所有功能。在HTML代码中,通过`<script>`标签将其引入,并设置相应的站点密钥。这个密钥是Google reCaptcha服务分配给你的,用于识别你的...
在本文中,我们将深入探讨如何在 Laravel 开发中集成 Google 的 reCAPTCHA 服务,以增强网站的安全性,防止恶意机器人和自动填充表单的行为。标题 "Laravel开发-recaptcha-laravel" 指出我们将关注一个特定的 ...
很多国外网站采用了Google的reCaptcha验证,但在国内上网是无法显示该验证的,即使用梯子也无法解决,可以采用谷歌浏览器插件来解决此问题 使用谷歌浏览器,打开 设置--->扩展程序,勾选开发者模式,把Header ...
很多国外网站采用了Google的reCaptcha验证,但在国内上网是无法显示该验证的,即使用梯子也无法解决,可以采用谷歌浏览器插件来解决此问题 使用谷歌浏览器,打开 设置--->扩展程序,勾选开发者模式,把Header ...
在这个案例中,“angular-recaptcha”模块就是这样一个组件,专门处理reCaptcha集成。 4. **集成reCaptcha**: 使用这个模块,开发者可以方便地在AngularJS表单中添加reCaptcha验证。通常,这涉及到在HTML模板中插入...
在Laravel框架中,reCAPTCHA是一个非常重要的组件,它能有效地防止自动化程序(如机器人)对网站进行恶意操作,比如垃圾邮件提交、非法登录尝试等。reCAPTCHA是由谷歌提供的一个免费服务,通过人机识别挑战来确保...
`前端开源库-recaptcha`是一个用于JavaScript的开源库,允许开发者在他们的网页中轻松地添加和处理reCAPTCHA。reCAPTCHA是一种验证码系统,它通过让用户完成一项简单的任务来证明他们是人类,而不是机器人。这种任务...
使用谷歌浏览器,打开 设置--->扩展程序,勾选开发者模式,把Header Editor....很多国外网站采用了Google的reCaptcha验证,但在国内上网是无法显示该验证的,即使用梯子也无法解决,可以采用谷歌浏览器插件来解决此问题
3. **图像处理**: 在解决ReCaptcha之前,原始图像可能需要预处理,包括调整大小、灰度化、二值化等,以便更好地供机器学习模型处理。 4. **数据集**: 训练一个有效的模型需要大量的标注数据。开发者可能从公开的...
开源项目“romanyx-recaptcha”是一个用Go语言编写的Google reCAPTCHA接口封装库,旨在帮助开发者更方便地在Go应用中集成Google的reCAPTCHA服务。reCAPTCHA是一种防止机器人和自动化程序进行恶意操作的安全验证工具...
在IT领域,尤其是在网络安全和网页开发中,验证码(CAPTCHA)是一种重要的技术,用于区分人类用户和自动化程序,防止恶意机器人进行操作。本项目“recaptcha-demo”是针对Google的reCAPTCHA服务的一个Java实现,它...
通过以上步骤,你已经成功地在 Laravel 中集成了 reCAPTCHA v2 和隐形 reCAPTCHA,为你的 web 应用程序添加了有效的机器人防护。在实际开发中,根据项目需求,你可能还需要考虑错误处理、多语言支持以及适应不同的...
如何在其它类型的博客中使用reCAPTCHA呢? reCAPTCHA 可以用于各种主流编程语言,如PHP、ASP.Net、Perl以及常见程序,如Wordpress、phpBB、Joomla、MediaWiki。你只需点击相应的链接就可以获取到想要的 reCAPTCHA ...