头图

如何优雅的破解HCaptcha验证码

HCaptcha介绍

HCaptcha是国外知名的验证码服务商,其主要功能就是为网站提供验证码服务,避免网站被恶意爬虫肆意爬取信息。相比于HCaptcha,大家可能更加熟悉Google reCaptcha(Google提供的验证码服务),但因为某些原因,国内是无法使用Google reCaptcha的,所以HCaptcha便成为多数国际型网站更优的一个选择。

本文会介绍一种优雅的方式来突破HCaptcha验证码,在介绍突破方式前,先简单介绍与体验一下HCaptch。

HCaptcha的交互形式如下,首先我们需要点击复选框,如下图:

点我们点击复选框时,验证码会先通过其风险分析引擎判断当前用户的风险,如果是低风险用户,便可以直接通过,反之,验证码会弹出对话框,让你回答对话框中的问题,如下图:

HCaptcha验证码会给你一个问题,比如上图的问题是【请点击每张包含火车的图片】,我们需要从下面的九张图中选择出含有火车的图片,如果九张图片中,没有火车,则点击【跳过】按钮,如果有,则将所有带有火车的图片都选择上,跳过按钮会变成【检查】按钮,如下图:

通过验证后,便会出现如下结果:

体验HCaptcha

为了避免历史数据的影响,建议使用Chrome的无痕模式来访问该网站,如下图所示:

点击图中的HCaptcha,便可以体验HCaptcha验证码的完整流程了。

至此,HCaptcha的大体情况我们已经熟悉了,那么我们要怎么突破该验证码呢?当然是使用机器学习相关的技术啦,下面我们介绍一款简单好用的平台。

解决方案

对于HCaptcha验证码,我们可以使用YesCaptcha服务来破解,该服务使用起来非常简单,通过邮箱注册一个账户。

YesCaptcha不止支持HCaptcha,还支持Google reCaptcha V2/V3版本的破解,这里我们先关注其对HCaptch的破解。

注册完YesCaptcha后,会获得一个clientKey,基于该clientKey便可以使用YesCaptcha提供的破解服务了。

对于HCaptcha相关破解,需要在YesCaptcha中创建破解验证码服务的API。

阅读文档后,发现只需要构建出下面表格中的参数并请求创建任务的API,便可以实现验证码的破解了。

属性类型必须说明
typestringHCaptchaClassification 10 点数
querieslist[string]Base64 编码的图片,不要包含 "data:image/*;base64,"
以列表形式拼合1到9张图片:[base64, base64,base64,……]
questionString问题 ID, 请查表,支持中英文,其他语言请自行转换

代码实现

通过文档可知,我们需要HCaptcha验证码九宫格中图片对应的Base64以及验证码中的问题,通过Chrome的Network可知,HCaptcha获得验证码图片,该接口会返回JSON格式的数据,其中就包含了验证码的问题以及九宫格中的图片,如下图所示:

通过Selenium自动化浏览器,获得上图所示的数据,随后配合requests库和base64库,将图片转为相应的base64编码,具体代码如下:

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}

def get_as_base64(url):
    return base64.b64encode(requests.get(url).content)

def get_captcha_image_base64(data):
    image_result = []
    for d in data:
        img_base64 = get_as_base64(d['datapoint_uri'])
        img_base64 = img_base64.decode('utf-8')
        image_result.append({
            'url': d['datapoint_uri'],
            'task_key': d['task_key'],
            'base64': img_base64
        })
    return image_result

有了验证码九宫格图片对于的base64后,结合获得的问题,便可以请求YesCaptcha创建破解任务的服务了,代码如下:

def create_task(question, queries):
    url = 'https://api.yescaptcha.com/createTask'

    data = {
        "clientKey": clientKey,
        "task": {
            "type": "HCaptchaClassification",
            "question": question,
            "queries": queries,
        }
    }

    r = requests.post(url, json=data, timeout=60)

    return r.json()

将上述代码整合起来,便可得到一个完整的流程:

if __name__ == '__main__':
    with open('data.json', encoding='utf8') as f:
        data = f.read()
    data = json.loads(data)
    question = data.get('requester_question', {}).get('zh')
    tasklist = data.get('tasklist')
    images = get_captcha_image_base64(tasklist)
    queries = [d['base64'] for d in images]
    result = create_task(question=question, queries=queries)
    pprint.pprint(result)

以下图为例,通过上述代码进行破解。

运行上述代码后,获得结果如下:

{'errorCode': '',
 'errorId': 0,
 'solution': {'objects': [True,
                          True,
                          True,
                          True,
                          False,
                          False,
                          True,
                          True,
                          True]},
 'status': 'ready',
 'taskId': '13463c20-d031-11ec-b16d-c664134fc872'}

其中solution便是此次破解任务的结果,它的顺序与你请求时queries参数的顺序一致,基于solution的结果,利用Selenium便可完成相应的点击操作,如下图所示

点击【检查】按钮,完成HCaptcha验证码的破解

因为本文侧重于如何破解HCaptcha,所以没花篇幅讨论如何使用Selenium去自动化浏览器获得数据,但这个内容非常简单,网上相关内容也比较多,就不花费笔墨介绍了。

最近整理了一套编程学习资料分享给大家,全是干货内容,包含教程视频、电子书、源码笔记、学习路线图、实战项目、面试题等等,关注gzh【Python编程学习圈】就能免费获取,回复关键词【学习资料】即可,抓紧时间吧!

全球Python编程中文开发者的圈子,提供Python编程技术文章知识分享、技术专栏、原创视频教程、题库,内...

10 声望
1 粉丝
0 条评论
推荐阅读
终结 Python 原生字典?这个库要逆天改命了
字典是 Python 中基础的数据结构之一,字典的使用,可以说是非常的简单粗暴,但即便是这样一个与世无争的数据结构,仍然有很多人 "看不惯它" 。

Python编程学习圈阅读 306

封面图
行为验证码安全策略设置
而我在想,有没有哪一款验证码产品可以设置黑/白名单限制IP访问和设置风控异常呢?答案是:有,大海茫茫中让我找到了 KgCaptcha,接下来我就给大家讲讲怎么设置吧!

自信的酱肘子1阅读 174

验证码案例实践:神龙汽车
汽车App的功能已从早期的简单控车延伸至汽车生活的方方面面。诸如对车辆软硬件的操控:解锁车门、升降车窗、远程启动、查看车辆行驶轨迹或当前位置等最“原始”的功能,在搭载智能车联功能的汽车App中已基本覆盖,...

顶象技术阅读 310

封面图
河南农信社数字化转型实践方案
农信机构由于信贷项目要求多,单笔贷款业务批复的额度相对较小,在信用档案登记环节,造成业务量和工作量相对较多。同时,信用信息采集不够精确,不能全面且合理地评定农民信用等级,最终结果就是贷款主题的信用...

顶象技术阅读 228

封面图
图形验证码水印Logo修改
还在苦恼怎么让你的验证码显示Logo吗,KgCaptcha 这个验证码产品,你可以随心所欲地设置你想要的Logo图片、链接地址、位置等。下面我就给大家介绍一下如何设置吧?

自信的酱肘子阅读 221

行为验证码验证类型的讲解
前言最近在开发行为验证码,经常触及到关于验证类型的相关内容。但使用起来不太熟练,闲暇之余,总结一下我对行为验证码验证类型的理解。验证类型概述滑动拼图创新行为式验证,轻松一滑完成拼图,体验极佳,秒速...

宙哈哈阅读 185

封面图
推荐一款漂亮的 Java 图形验证码
Java图形验证码,支持自定义图片、中文、算术等类型,可用于Java Web、JavaSE等项目。真香效果展示项目集成 {代码...} ​设置界面​最后SDK开源地址:[链接],顺便做了一个演示:[链接]​

刀枪不入的香瓜阅读 160

全球Python编程中文开发者的圈子,提供Python编程技术文章知识分享、技术专栏、原创视频教程、题库,内...

10 声望
1 粉丝
宣传栏