python+Ocr.dll自动识别搜狗提交网址验证码

搜狗SEO 思享 1052浏览
摘要:

本文主要介绍了python调用文字识别OCR轻松搞定验证码,文中通过示例代码介绍的非常详细,具有一定的参考价值,

... 展开

今天我在做SEO收录提升工具集的搜狗推送功能的时候,发现搜狗根本没有推送URL的接口,不过好在有一个地方可以推送URL

但是一次只能提交20个URL并且还需要验证码,这就有点困难了,本来打算用请求验证码识别平台返回验证码结果,但考虑到如果每天都要使用的话验证码识别费用也是一笔不小的开销,所以破解掉搜狗验证码势在必行

验证码

先把验证码下载下来

没想到验证码竟然不是一张图片,而是一个SVG

这里解释一下SVG,简单来说就是用代码绘制成的图片,无法直接下载保存为图片

我们这里就需要用python 把SVG转成jpg格式的图片保存下来

这里我们用到的库为svglib

from reportlab.graphics import renderPM
from svglib.svglib import svg2rlg
 
for i in range(100):
    res = requests.get('http://zhanzhang.sogou.com/api/user/generateVerifCode')
 
    f = io.StringIO(res.text)
    drawing = svg2rlg(f)
    renderPM.drawToFile(drawing, f"img/{i}.png", fmt="JPG")
Python

转换下载完成

调用ocr.dll进行验证码识别

ocr.dll据说是一个易语言编写的动态链接库,训练了大量图形验证码,识别成功率非常高

但是仅运行在32位Python中,因为ocr.dll它们是使用语言训练而成的,而易语言是32位的..

那么动态链接库,python中如何调用呢

  1. 导入ctypes 库
  2. 选择要调用的动态链接库,ctypes.windll.LoadLibrary可以调用动态链接库
  3. 初始化方法
  4. 请求验证码转成PNG格式的字节流并临时存储在内存中
  5. 调用ocr.dll动态链接库中的ocr方法
  6. 传入 PNG格式的字节流和字节流长度 这两个参数
  7. 返回结果

下面是代码demo

import ctypes
import os
import requests
import io
from reportlab.graphics import renderPM
from svglib.svglib import svg2rlg
os.environ['GLOG_minloglevel'] = '4'
ocr = ctypes.windll.LoadLibrary('../utils/ocr.dll')
ocr.init()
crack_func = ocr.ocr
 
 
res = requests.get('http://zhanzhang.sogou.com/api/user/generateVerifCode')
f = io.StringIO(res.text)
drawing = svg2rlg(f)
img = renderPM.drawToString(drawing,fmt="PNG")
img_len = len(img)
ret = str(ctypes.string_at(crack_func(img, img_len)), encoding='utf-8')
print(ret)
Python

测试识别结果

对比一下原图,可以看到验证码识别率是非常高的,最重要的是不需要花一分钱去打码

不光是搜狗站长的验证码,市面上常见的数字字母组合验证码都可以轻松破解

推荐阅读

Python实现聚合问答采集文章

最近在一个社区得到了一个用python聚合问答的工具,但是因为已经打包成程序了,所以无法研究,于是在网上找了一个网友分享的源代码,转载于此,供志愿者学习和后期扩展。这个工具可以通过头条搜索、百度下拉结果、搜狗下拉、百度知道搜索、新浪爱问、搜狗问问,将......

pycharm怎么用国内镜像安装第三方库

1、在pycharm中打开Terminal,如下图。 2、以安装pymysql库为例,输入以下命令回车即可使用镜像安装。 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql ......

搜狗联盟网盟产品将于2022年12月31日起正式停服

在那之后,搜狗联盟没有被使用。由于公司业务调整,搜狗联盟网盟产品将于2022年12月31日起正式停产,本网站将于2023年2月初关闭。对于此次停售给您带来的不便,我们深表遗憾和歉意,并且还将在未来2个月内为您提供结算服务。具体线下节奏和结算方案如下:...