关于验证码:如何优雅的破解HCaptcha验证码

91次阅读

共计 3424 个字符,预计需要花费 9 分钟才能阅读完成。

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,便能够实现验证码的破解了。

属性 类型 必须 阐明
type string HCaptchaClassification 10 点数
queries list[string] Base64 编码的图片,不要蕴含 “data:image/*;base64,”
以列表模式拼合 1 到 9 张图片:[base64, base64,base64,……]
question String 问题 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 编程学习圈】就能收费获取,回复关键词【学习材料】即可,抓紧时间吧!

正文完
 0