Python用ddddocr突破图形验证码
ddddocr
- 关于ddddocr,我也不懂,只是在这写一点大佬提到的小细节。
- 对于简单验证码,如字母验证码,建议使用旧版的ddddocr。也就是如下操作
ocr = ddddocr.DdddOcr(old=True, show_ad=False) - 这条函数是文字识别函数,可以用于识别图片上的文字
res = ocr.classification(img)
给函数一张图片,函数就会返回该图片的文字。
直接可用于突破字母验证码,并且也可以用来辅助干别的
字母验证码
- 突破字母验证码的步骤是
- 以二进制方式读取突破
- 将图片交给ddddocr
- 将 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)
计算验证码
- 这个计算验证码有点麻烦,麻烦在哪?麻烦在我找不到图片来测试,淦。
- 所以现在写的代码全是几乎全是抄的,不保证实用性,实际遇到了的时候再根据思路来改一下吧,或者重新学习一下。
突破计算验证码的步骤如下
- 跟字母验证码一样,先识别出图片的内容
- 对内容进行修饰,如把“=”去掉
- 计算内容,得出答案
具体代码如下
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()
滑块验证码
一如既往的,突破步骤如下
- 通过检查网页元素,找到 验证码滑块图片 和 验证码背景图片
- 打开上述两张图片,并且作为函数的参数来调用特定函数
- 得到三个结果,分别是
滑块的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轴坐标
# 得到坐标了,就可以用自动化库来操作了
这个测试过,改改拿来用就好,应该不会有问题。
结尾
- 上面的就是我已经学了的突破验证码的手段了。
- 至于其他的什么选字验证码,推理拼图,图标点选啊的,别问,问就是不会,会了我就接着放这了。
淦,本就是为了突破选字验证码而来进行的学习,结果最后就选字验证码还是得当氪金玩家,不能自己动手丰衣足食,唉,难受。

浙公网安备 33010602011771号