触发知乎验证码的破解方案

先上代码

import requests
import base64
import tesserocr
from PIL import Image
import json
import random
from faker import Faker


class Tess(object):
    def __init__(self):
        self.fz = Faker('zh.CN')
        self.headers = {
            'user-agent': self.fz.user_agent(),
            'content-type': 'application/json'
        }
    def get_yzm(self):
        url = 'https://www.zhihu.com/api/v4/anticrawl/captcha_appeal'
        session = requests.session()
        response = session.get(url, headers=self.headers)
        print(response.status_code)
        print(response.text)
        pic = json.loads(response.text)['img_base64']
        pic_content = base64.urlsafe_b64decode(pic)
        name = str(random.randint(1, 9999))  
        with open('{}.png'.format(name), 'wb')as f:
            f.write(pic_content) 
        img = Image.open('{}.png'.format(name)) 
        result = tesserocr.image_to_text(img)
        data = {'captcha': result}  
        res = session.post(url, headers=self.headers, data=json.dumps(data))  
        print(res.text)
if __name__ == '__main__':
    TS = Tess()           
    TS.get_yzm()

当触发知乎的验证码机制时,首先创建一个session,然后通过这个session下载验证码图片,知乎的验证码图片是一个base64 code,所以需要用到base64解析图片。然后使用tesserocr识别图片,最后将识别出的内容post确认。
由于没有训练过这个类型的验证码,识别的准确率会非常低。如果想要高效的识别,建议自己训练一个模型或者接入第三方打码平台。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值