使⽤pythonselenium 解决⾕歌验证码(reCAPTCHA )
来⾃
[ ]
简介
reCAPTCHA 项⽬是由卡内基梅隆⼤学所发展的系统,主要⽬的是利⽤CAPTCHA 技术来帮助典籍数字化的进⾏,这个项⽬将由书本扫描下来⽆法准确的被光学⽂字识别技术识别的⽂字显⽰在CAPTCHA 问题中,让⼈类在回答CAPTCHA 问题时⽤⼈脑加以识别[2]。reC 为了验证⼈类所输⼊的⽂字是正确的,⽽不是随意输⼊,有两个字会被显⽰出来;⼀个是光学⽂字识别软件⽆法辨别的字,另⼀个是⼀个已经知道正确答案的字。如果⽤户正确的回答出已知正确答案的字,那么就假设所输⼊的另⼀个光学识别软件⽆法识别的字是认真reCAPTCHA 问题的所需的⽂字图⽚,⾸先会由reCAPTCHA 项⽬⽹站利⽤Javascript API 获取[7],在最终⽤户回答问题后,服务器再连回reCAPTCHA 项⽬的主机验证⽤户的输⼊是否正确。reCAPTCHA 项⽬提供了许多编程语⾔的库,让集成reCAPTCHA 服务到现有程2012年起,reCAPTCHA 除了原来的⽂字扫描图⽚外,也采⽤Google 街景拍摄的门牌号码照⽚。[9]
2014年年底,改以“我不是机器⼈”(I'm not a robot )于⽅框中打勾,进⽽完成判别。[10]并开始采⽤听单词的验证码模式。
2018年,Google 发布reCAPTCHA v3,采⽤分数制验证系统,对⽤户在⽹站上的动作进⾏评分,若分数过低则会被判定为机器⼈。[11]
2020年,Google 发布reCAPTCHA Enterprise ,与reCAPTCHA v3相同,采⽤分数制验证系统,但能够提供更精细的分数以及⾼风险分数原因代码,以供进⼀步分析之⽤。[12][13]
来⾃ []
⽇常使⽤
作为⼀个新时代农民, 相信你或多或少见过,
就长这样
如果点击后, 发现当前系统存在风险, 会出来图⽚验证, 这个图⽚验证可能是⼏张图⽚, 点击完提交, 也有可能是点击完符合条件的图⽚后, 会在原位置, 出来⼀张新的图⽚, ⼀直点到没有符合条件的图⽚后, 点击提交,
url编码处理像这样的
也可以点击⽿机按钮,
切换到听写模式
验证码的版本
V2: 就是需要点选的,
显式的验证
V3: 是⽆感的验证, 是⼀个分数制验证系统, 根据⽤户⾏为,
计算⼀个分数
破解平台
不但⽀持reCAPTCHA, 还⽀持 TikTok 等等验证, 功能齐全, 但⽐较贵
只⽀持reCAPTCHA 验证, ⽬前V3版本验证质量⼀般, 价格美丽, ⽽且注册就送1500点数, ⼀次15点数, 可以调⽤100次, 充值的话是1元1000点
下⾯以yescaptcha 为例, 说⼀下如何使⽤(两个平台验证流程⼏乎相同)
代码
代码
会返回⼀个任务id, ⽤于获取验证结果
获取任务结果
url: 参数:
代码使⽤⽅式及验证结果
⽤requests ⽅式
验证结果
⾮回调:
在页⾯上可以看到验证, 验证完后, 然后可以点击登录, 就像我们正在验证的demo ⽹站
直接在页⾯上验证
打开控制台, 搜索 g-recaptcha-response 的⽂本框元素
这样就不验证也可以直接点击提交
跳转到验证成功页⾯
完整代码
# -*- coding: utf-8 -*-
import requests
import time
class ReCAPTCHA(object):
# Token
TOKEN = 'xxxxxxxxxx'
REFERER = 'le/recaptcha/api2/demo'
BASE_URL = 'scaptcha.365world'
参数名
是否必须说明token
是请在个⼈中⼼获取 (Token)siteKey
是ReCaptcha SiteKey (固定参数)siteReferer
是ReCaptcha Referer (⼀般也为固定参数)captchaType
(验证码版本)
否ReCaptchaV2(默认) / ReCaptchaV3不知道是哪⼀种看后⾯的说明ReCaptchaV3 V3必填siteAction
否ReCaptchaV3 必填 Action 动作 默认verify minScore 否ReCaptchaV3 选填 最⼩分数(0.1-0.9)
参数名
是否必须说明taskId
是创建任务获取到的ID
# Site Key
SITE_KEY = '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-'
CREATE_TASK_URL = f"{BASE_URL}/v3/recaptcha/create?token={TOKEN}&siteKey={SITE_KEY}&siteReferer={REFERER}" GET_TOKEN_URL = "{BASE_URL}/v3/recaptcha/status?token={TOKEN}&taskId={task_id}"
TASK_ID = None
@classmethod
def create_task(cls):
try:
response = (cls.CREATE_TASK_URL)
if response.status_code == 200:
data = response.json()
cls.TASK_ID = ('data', {}).get('taskId')
print(f"Task created, ID:{cls.TASK_ID}")
except requests.RequestException as e:
print(f'Create task failed:{e}')
@classmethod
def get_token(cls, task_id=None, retry_times=120):
if not task_id:
task_id = task_id or cls.TASK_ID
if not task_id:
print("Not found task id")
return False
print(f"Start pull task:{task_id} result")
url = cls.GET_TOKEN_URL.format(BASE_URL=cls.BASE_URL, TOKEN=cls.TOKEN, task_id=task_id)
count = 0
while count < retry_times:
try:
response = (url)
if response.status_code == 200:
data = response.json()
status = ('data', {}).get('status')
print('task status', status)
if status == 'Success':
('data', {}).get('response')
except requests.RequestException as e:
print('task failed', e)
finally:
count += 1
time.sleep(1)
def verify(response_token):
url = "le/recaptcha/api2/demo"
data = {
"g-recaptcha-response": response_token
}
response = requests.post(url, data=data)
if response.status_code == 200:
print("Verify Success")
if __name__ == "__main__":
token = _token()
print(token)
verify(token)
运⾏结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论