Python用ddddocr突破图形验证码

ddddocr

  • 关于ddddocr,我也不懂,只是在这写一点大佬提到的小细节。
  1. 对于简单验证码,如字母验证码,建议使用旧版的ddddocr。也就是如下操作
    ocr = ddddocr.DdddOcr(old=True, show_ad=False)
  2. 这条函数是文字识别函数,可以用于识别图片上的文字
    res = ocr.classification(img)
    给函数一张图片,函数就会返回该图片的文字。
    直接可用于突破字母验证码,并且也可以用来辅助干别的

字母验证码

  • 突破字母验证码的步骤是
  1. 以二进制方式读取突破
  2. 将图片交给ddddocr
  3. 将 ddddocr 返回的验证码答案输入给网站

然后用代码具体实现,就是如下这样

import ddddocr

# 新建一个对象
ocr = ddddocr.DdddOcr(old=True, show_ad=False)

# 以二进制方式打开图片文件
with open("字母验证码.jpg", "rb") as f:
    img = f.read()

# 字母验证码就是这样做,就会得到该验证码的答案了
res = ocr.classification(img)

# 最后这个验证码该拿去干嘛就干嘛,现在就是打印看一下就得了
print(res)

计算验证码

  • 这个计算验证码有点麻烦,麻烦在哪?麻烦在我找不到图片来测试,淦。
  • 所以现在写的代码全是几乎全是抄的,不保证实用性,实际遇到了的时候再根据思路来改一下吧,或者重新学习一下。

突破计算验证码的步骤如下

  1. 跟字母验证码一样,先识别出图片的内容
  2. 对内容进行修饰,如把“=”去掉
  3. 计算内容,得出答案

具体代码如下

import ddddocr


def get_code():
    # 验证码识别
    # 新建一个对象
    ocr = ddddocr.DdddOcr(old=True, show_ad=False)
    # 以二进制方式打开图片文件
    with open("验证码.jpg", "rb") as f:
        img = f.read()
    # 字母验证码就是这样做,就会得到该验证码的答案了
    code = ocr.classification(img)
    return code


def embellish(code):
    # 显而易见的,把“=”去掉,毕竟没有"="才是一条算数表达式
    if '=' in code:
        code = code.replace('=', '')

    # 有可能是识别错误,吧“=”识别成“-”,所以就只要“-”前面这一串字符串就行了
    if '-' == code[-1]:
        code = code[:-1]

    return code


def code_format():
    # 获取验证码内容
    code = get_code()
    # 修饰验证码内容
    num = embellish(code)
    # 使用eval函数来得到答案
    daan = eval(num)
    # 打印答案
    print(daan)


if __name__ == '__main__':
    code_format()

滑块验证码

一如既往的,突破步骤如下

  1. 通过检查网页元素,找到 验证码滑块图片 和 验证码背景图片
  2. 打开上述两张图片,并且作为函数的参数来调用特定函数
  3. 得到三个结果,分别是
    滑块的y轴坐标
    缺口左下角的x,y轴坐标
    缺口右上角的x,y轴坐标

代码如下

import ddddocr

ocr = ddddocr.DdddOcr(show_ad=False)
# 打开滑块图片
with open("验证码滑块.png", "rb") as f:
    target_bytes = f.read()

# 打开背景图片
with open("验证码背景.jpg", "rb") as f:
    background_bytes = f.read()

# 给这个函数分别传入滑块和背景参数,就会得到一个坐标
res = ocr.slide_match(target_bytes, background_bytes)

if __name__ == '__main__':
    print(res)
    # 打印出来结果如下
    # {'target_y': 9, 'target': [250, 9, 307, 54]}
    # 'target_y': 9  滑块的y轴坐标是9
    # 'target': [250, 9, 307, 54],分别是缺口的左下角和右上角的x,y轴坐标
    # 得到坐标了,就可以用自动化库来操作了

这个测试过,改改拿来用就好,应该不会有问题。

结尾

  • 上面的就是我已经学了的突破验证码的手段了。
  • 至于其他的什么选字验证码,推理拼图,图标点选啊的,别问,问就是不会,会了我就接着放这了。

淦,本就是为了突破选字验证码而来进行的学习,结果最后就选字验证码还是得当氪金玩家,不能自己动手丰衣足食,唉,难受。

posted @ 2023-02-07 00:37  淦丘比  阅读(1198)  评论(0)    收藏  举报