python调用pytesseract识别某网站的验证码(实战项目)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tester_xjp/article/details/84074583

一、首先安装 tesseract-ocr-setup-4.00.00dev.exe

下载地址 链接:https://pan.baidu.com/s/1PFIrfNeUjmrXlUABS8SquA 
提取码:dctm 

1.直接安装

2.安装完之后,将目录(C:\Program Files (x86)\Tesseract-OCR) 配置到path中 

3.新建一个系统变量,名称为“ TESSDATA_PREFIX”  内容跟步骤二一样的内容

二、配置完系统变量之后,我们先查看下是否安装好了

1.运行cmd

2.输入命令 tesseract.exe 1.png output -l eng  (图片为1.png)

3.那么就会在当前路径 输出一个outinput的txt文件了,文件里面的内容 就是识别出来的内容  

三、安装 PIL(Pillow-3.4.2-cp36-cp36m-win_amd64)

1.如果pip安装不行的话 这里下载地址分享给你们给你们

链接:https://pan.baidu.com/s/1_DOGYfVkx5u2pg73hP_hFA 
提取码:d25h 

四、安装 pytesseract

1.这个毫无疑问 直接 pip3 install pytesseract

五、最后 就是如何使用了

1.记住如果提示环境变量有问题  那就是因为你们创建那个叫做TESSDATA_PREFIX的系统变量,或者她对应的路径错误

2.使用代码展示

import pytesseract
from PIL import Image
code = pytesseract.image_to_string(Image.open(r"%s.png" %tel), lang='eng').replace(" ", "")

3.只要这三行代码,你就能得到 纯数字验证码了(当然这个如果你需要识别中文或者其他的文字,需要下载啥补丁包)。

六、最后分享某网址的注册脚本源代码(域名显示xxx)

import requests
import pytesseract
from PIL import Image
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


class Spider38363(object):
    def __init__(self):
        self.host = "https://www.xxxxx.com"
        self.requests = requests.session()
        self.msg = ""
        self.telprefix = str(input("请输入您需要注册的号码前七位:"))
        self.prefixstart = int(input("请输入您需要注册的号码后四位开始:"))
        self.telprefixend = int(input("请输入您需要注册的号码后四位结束:"))
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) \
                          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

    def registered_user(self, captcha, tel):
        flag = {}
        registbody = {'username': tel, 'mobile_phone': tel, 'password': '123ASD',
                      're_password': '123ASD', 'weixin': '123456',
                      'withdraw_realname': '%E4%BD%A0%E5%A5%BD%E8%80%81%E5%93%A5', 'captcha': captcha,
                      'reg_terminal': '1', 'e164': '86_18607410000', 'unique_id': ''}
        try:
            flag = self.requests.post(url=self.host + "/cn/cgi/api/register", data=registbody, verify=False,
                                      timeout=10,headers=self.header).json()
            self.msg = flag.get("msg")
        except Exception as ex:
            print("服务器异常 注册接口无法得到正确的请求:%s" % ex)
            pass
        if flag.get("status") == 1:
            return 1
        else:
            return 0

    def save_verifycode_image(self):
        with open("verifycode.png", "wb") as f:
            try:
                html = self.requests.get(url=self.host + "/cn/cgi/api//captcha?a=0.973962746915739", verify=False,
                                         timeout=10,headers=self.header).content
                f.write(html)
            except Exception as ex:
                print("服务器异常 保存图片接口无法得到正确的请求:%s" % ex)
                pass


if __name__ == "__main__":
    xiejiangpeng = Spider38363()
    success_number = 0
    failure_number = 0
    for i in range(xiejiangpeng.prefixstart, xiejiangpeng.telprefixend):
        tel = xiejiangpeng.telprefix + str(i)
        xiejiangpeng.save_verifycode_image()
        code = "1234"
        try:
            code = pytesseract.image_to_string(Image.open(r"verifycode.png"), lang='eng').replace(" ", "")
        except Exception as ex:
            print("ocr识别图片出错 %s " % ex)
        num = xiejiangpeng.registered_user(captcha=code, tel=tel)
        if num == 1:
            print("号码%s 注册成功" % tel)
            success_number = success_number + 1
        else:
            print("号码%s 注册失败 失败信息为%s" % (tel, xiejiangpeng.msg))
            failure_number = failure_number + 1
    print("程序运行完成,成功数%d   失败数%d" % (success_number, failure_number))
 

猜你喜欢

转载自blog.csdn.net/Tester_xjp/article/details/84074583
今日推荐