记录一次获取验证码

主要是分享记录一下大概思路:

        首先是把图片变成灰度图片,理解为黑白,砍掉颜色那些影响因素,因为我这个验证码很多复杂颜色,然后里面很多小点点,就开始去除噪声

        最主要是不知道为撒获取下来的文本一直都是比我眼睛看到的多一位,然后输出控制台看的也是一样的,但是就是多一位(因为获取的时候还是会有乱七八糟的问题,多小数点,少数字,所以就开了循环)

        然后今天突然想到加个正则,就只取数字,然后取得是列表(业余不是很理解)。反正就是OK了。主要就一个思路,实现方法我看网上挺多,循环个人感觉最简单,因为在灰度的时候就可以一眼识别了

 if response.status_code == 200:
        # 将响应内容转换成图像对象
        image = Image.open(BytesIO(response.content))
        image.save('getCoc.jpg')
        # 将图像转换为灰度图像
        gray = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY)

        # 对灰度图像进行阈值处理
        _, binary_image = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

        # 去除噪声
        denoised_image = cv2.GaussianBlur(binary_image, (1, 3), 0)

        # 指定语言为数字
        custom_config = r'--oem 3 --psm 6 outputbase digits'
        text = pytesseract.image_to_string(Image.fromarray(denoised_image), config=custom_config)
        # 使用正则表达式匹配数字
        numbers = re.findall(r'\d+', text)
        # 检查列表是否为空
        if numbers:
            # 如果列表不为空,则提取第一个元素并打印
            first_number = numbers[0]
            if len(first_number) == 3 and first_number.isdigit():
                print("验证码:", text)
                break

    else:
        print(f"Failed to fetch captcha. Status code: {response.status_code}")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值