Python爬虫学习笔记二:模拟登录(以API形式调用tesseract识别简单验证码),并打包成执行文件(exe)

当主程序引用了tesseract程序,python打包出来的exe无法在其他电脑上运行的问题的解决方法 python打包 exe Tesseract 其他电脑无法运行 阅读详情
一、tesseract dll下载
https://github.com/charlesw/tesseract 这个网址中包含了编译好的exe及dll文件,而且x86,x64两种架构都有。
(特别说明:选择x86还是x64版本dll,只依赖于你的python架构,而不是操作系统的架构,即便是在64位操作系统,假如你的python是32位版本,这里也要选用x86版本dll)。
下载这两个DLL:libtesseract304.dll  和 liblept172.dll

二、语言包下载
网址:https://github.com/tesseract-ocr/tessdata,下载其中需要的语言包就行了。跟dll放到同一目录(记得把语言包放在tessdata文件夹里面)。

语言包文件格式:eng.traineddata

以上网址打不开的请自行百度关键字:GitHub不能访问

三、vc 2015++发行包下载

注意说明里这一段话:
Since tesseract and leptonica binaries are compiled with Visual Studio 2015 you'll need to ensure you have theVisual Studio 2015 Runtimeinstalled.
意思就是,这个tesseract 的dll是使用vs 2015编译的,所以必须安装其发行包,同样分X64,X86两个版本,还是依赖于你的开发环境,不依赖于操作系统。

四、安装pyocr for python包
用pip就可以安装: pip install pyocr,也可以到官网下载源码,手动安装:https://github.com/jflesch/pyocr

最新的pyocr是0.4.1,其源码还是基于tesseract 3.0.2 ,而前文下载的tesseract 已经是3.0.4版本了,所以需要改下pyocr源码。(需要说明的是pyocr包,比起pytesseract包要更复杂一些,同时支持shell、api 、Cuneiform三种形式。)

----------------------------------------------我是分割线----------------------------------------------

上面都是复制的,红色是我特别说明的。

下面开始贴代码:

我这里创建了两个py文件,MainWindow.py、Logon_Test.py

MainWindow.py代码:

# -*- coding: utf-8 -*-

import Logon_Test

if __name__ == '__main__':
    LoginURL = 'http://######/psdr/login.do?method=enterbs'  # 登陆提交地址
    CodeImgURL = 'http://######/psdr/form/digitalverify.jsp'  # 验证码获取地址
    url = 'http://######/psdr/projectInfo.do?method=queryTrace'  # 项目展示地址
    loginId = "用户名"
    password = "密码"
    a = Logon_Test.CDRS_Logon(LoginURL,CodeImgURL,loginId,password,True)
    img = a.get_VerificationCode_Image()
    Code = a.ImageToString(img)
    #对验证码的识别进行判断
    i = 1
    while Code == "" or not(Code.isdigit()):
        i += 1
        img = a.get_VerificationCode_Image()
        Code = a.ImageToString(img)
        if i > 5 :
            break

    a.set_PostData_And_send(Code)
    source_file = a.get_Web_source_file(url)
    print(source_file)

这个文件很简单,就是类初始化、类方法的调用。

我们主要看Logon_Test.py文件的实现:

# -*- coding: utf-8 -*-

try:
    import requests, base64, re, os, sys
    from PIL import Image, ImageDraw
    from io import BytesIO
    from pyocr import libtesseract
    from pyocr.builders import TextBuilder
except ImportError:
    print("ImportError!")
    raise  SystemExit

# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)

tessdir = os.getenv('TESSDATA_PREFIX', None)
if tessdir is None  :
    os.environ['TESSDATA_PREFIX'] = application_path
if application_path not in os.environ['PATH']:
    os.environ['PATH']= application_path + ';' +os.environ['PATH']

class CDRS_Logon:
    #模拟登陆的类
    def __init__(self, LoginURL, CodeImgURL, LoginId, Password, base64_utf_8 = False):
        self.LoginURL = LoginURL
        self.CodeImgURL = CodeImgURL
        if base64_utf_8 == True: # base64_utf_8参数判断是否需要进行转码(根据网站需要)
            base64_loginId_utf_8 = base64.b64encode(LoginId.encode('utf-8'))
            base64_password_utf_8 = base64.b64encode(Password.encode('utf-8'))
            ID = re.findall(r'b\'(.*)\'', str(base64_loginId_utf_8))  #用正则处理掉标识符b'
            PWD = re.findall(r'b\'(.*)\'', str(base64_password_utf_8))
            self.LoginId = ID[0]
            self.Password = PWD[0]
        else:
            self.LoginId = LoginId
            self.Password = Password
        self.session = requests.session()  # 创建统一的会话
        self.Code = "null"

    def get_VerificationCode_Image(self):
        #获取验证码图片
        res = self.session.get(self.CodeImgURL, stream=True)  # 获取验证码图片
        img = Image.open(BytesIO(res.content))
        return img

    def ImageToString(self,img):
        bu = TextBuilder(tesseract_layout=7)
        vcode = libtesseract.image_to_string(img, lang='eng', builder=bu)
        return vcode

    def set_PostData_And_send(self, Code):
        # 构建POST数据并提交
        postData = {'txtLoginId': '', 'loginId': self.LoginId,
                    'txtPassword': '', 'password': self.Password,
                    'vericode': Code, 'chkLoginuser': 'on'}
        self.session.post(self.LoginURL, postData)

    def get_Web_source_file(self, get_URL):
        #获取网页源文件
        Web_source_file_Res = self.session.get(get_URL)
        return Web_source_file_Res.text

我再对其中的关键部分解释一下。

# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)

tessdir = os.getenv('TESSDATA_PREFIX', None)
if tessdir is None  :
    os.environ['TESSDATA_PREFIX'] = application_path
if application_path not in os.environ['PATH']:
    os.environ['PATH']= application_path + ';' +os.environ['PATH']

上面这段代码用于判断当前文件是py脚本文件还是可执行文件(exe),因为这两个不同的文件,在运行中取得的文件路径是不同的,这是很关键的地方,不然就会导致无法找到tessdata文件夹,运行错误。

接着第二段创建了环境变量,用于引导语言包和DLL文件的调用。


构造函数中base64_utf_8参数是我实验的网站需要处理的,通过查看网站源码发现对用户名和密码进行了转码,所以我也处理了一下。实际情况,按看客自己的要求来处理。


def ImageToString(self,img):
        bu = TextBuilder(tesseract_layout=7)
        vcode = libtesseract.image_to_string(img, lang='eng', builder=bu)
        return vcode

上面代码中

 vcode = libtesseract.image_to_string(img, lang='eng', builder=bu)

lang参数默认也是英语,这里设置为自己要用的语言包,但一定要下载好对应的语言包文件。

----------------------------------------------我是分割线----------------------------------------------

上面的程序已经可以作为脚本运行了。接下来我们进行exe文件的打包处理。

PyInstaller是一个十分有用的第三方库,它能够在Windows、Linux、Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个独立文件方便传递和管理。PyInstaller 需要在命令行(控制台)下用pip 工具安装,如下:

pip install pyinstaller

安装完成后cd到脚本文件的目录下执行打包命令:

pyinstaller -F MainWindow.py

执行完成后会生产两个目录build和dist,其中后一个目录里面就有可执行文件了。

接下来我们试验一下。把可执行文件(MainWindow.exe)复制出来,然后把前面开头我们准备的tessdata文件夹和liblept172.dll、libtesseract304.dll也复制出来,放在同一个文件夹下。这里也要注意一下,整个文件的路径不要有中文,不然在环境变量的设置时会出错。

用CMD运行我们的MainWindow.exe文件,就可以看到执行结果了。当然,你也可以直接双击,不过窗口可能会一闪而逝。

Python中pytesseract库的下载以及Tesseract-OCR工具的安装配置 是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。 阅读详情

相关推荐

Python Selenium自动化学习工具开发指南:从环境搭建到实战应用

Web自动化是软件测试和流程自动化领域的核心技术,它通过模拟用户操作实现浏览器行为的程序化控制。其核心原理基于WebDriver协议,允许脚本与真实浏览器进行双向通信,从而执行点击、输入、导航等交互。这项技术的价值在于将人力从重复、机械的Web操作中解放出来,大幅提升工作效率和准确性,广泛应用于UI测试、数据采集和业务流程自动化等场景。在在线教育领域,结合Python和Selenium,可以构建智能辅助工具,高效处理平台上的视频进度管理与章节测验等任务,实现学习流程的自动化辅助。

abcyan1235的博客 411

tesseract4.1 OCR 64位DLL库资源

tesseract4.1 OCR 64位DLL库资源 【下载地址】tesseract4.1OCR64位DLL库资源 本仓库提供了tesseract 4.1版本的预编译64位DLL库文件,以及相配套的Leptonica 1.74库。Tesseract是一款由Google维护的高度精确的开源OCR(光学字符识别)引擎,广泛应...

gitblog_09762的博客 1099

基于Playwright的自动化刷课脚本开发:从原理到实战部署

浏览器自动化是现代Web开发与测试中的关键技术,其核心原理是通过程序控制浏览器引擎,模拟真实用户的操作行为,如点击、输入和导航。这项技术的价值在于能够高效处理重复性Web任务,提升工作效率,广泛应用于自动化测试、数据采集和流程自动化等场景。在自动化工具中,无头浏览器(Headless Browser)因其能完整执行JavaScript并绕过前端反爬机制而成为主流选择。本文聚焦于使用Playwright这一跨浏览器自动化框架,结合Python编程,构建一个稳健的自动化脚本。该脚本能模拟登录、遍历课程、自动播放

靓靓软件工作室 395

下载安装tesseract3.05

** 1 ** 最近在学习爬虫,需要用到tesseract,可是没有梯子,官网下载奇慢无比,找了各种资源终于下载到了,是3.05版本,传到百度网盘里面,分享给大家https://pan.baidu.com/s/1jWDOD6Hte1zlDKHp0sWIXQ,提取码t5jg 语言包可以到这里下载:https://github.com/tesseract-ocr/tessdata点击那个code,然后选择Ddownloadzip,下载完成后把文件解压到tesseract安装目录下的tessdata文件夹里面即

weixin_46335578的博客 780

Tesseract 4 自行构建支持双引擎的tessdata 文件

Tesseract 4 版本具备两种识别引擎,新的基于LSTM(神经网络)引擎与传统引擎,通过在初始化时设定不同的EngineMode启动。OCR Engine modes: 0 Legacy engine only. 1 Neural nets LSTM engine only. 2 Legacy + LSTM engines. 3 Default, ba...

烛龙之穹 4101

tesseract4.1_ocr_64位DLL.zip

该文件包是编译好的64位tesseract4.1和leptonica1.74的DLL库(包括.lib,.h),解压后,可以加入vc工程文件进行引用

Selenium实战:破解动态加载与验证码的专利数据爬虫

网络数据采集是现代数据工程中的基础技术,其核心原理是通过程序模拟浏览器行为或直接发送网络请求来获取目标信息。在应对动态渲染、复杂交互及反爬机制严格的目标网站时,传统的静态页面解析技术往往失效。Selenium作为浏览器自动化工具,其技术价值在于能够完整模拟真实用户操作,有效处理JavaScript动态加载内容,并绕过基于浏览器指纹检测的反爬策略。结合验证码识别技术,特别是通过图像预处理(如二值化、去噪)与OCR引擎(如Tesseract)的集成,可以自动化完成登录验证这一关键环节。这一技术组合在需要登录、具

weixin_30443075的博客 378

C#Tesseract.3.0.2.0 完整实例以及训练教程

C#Tesseract.3.0.2.0 完整实例以及训练教程,包含简单的验证码识别源码(未进行训练 识别率感人的源码。。。。)

爬虫教程( 2 ) --- scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

freeking101的博客 5250

windows下编译好的tesseract库(亲测可用)

windows下编译好的tesseract库(亲测可用)

GD32F303 Keil 工程项目从零搭建实战指南

本文是一份详细的GD32F303 Keil工程项目从零搭建实战指南。文章阐述了亲手搭建工程的重要性,并逐步指导开发者完成从环境准备、目录规划、工程创建、文件添加、关键配置到编译调试的全过程。重点讲解了如何正确选择启动文件、添加外设库、配置头文件路径和全局宏,旨在帮助开发者深入理解工程结构,掌握GD32F303开发的核心技能,实现从“会用”到“懂”的跨越。

weixin_29190651的博客 404

jTessBoxEditor训练识别库

1、背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率。 本文将针对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率。 2、准备工具 tesseract样本训练有一个官方流程说明,https://github.com/tesseract-ocr/tesseract/wiki/T...

weixin_30254435的博客 574

博途WinCC上位机避坑指南:从工控机选型到趋势图优化的完整流程

本文详细解析了博途WinCC上位机开发全流程,从工控机选型到趋势图优化的关键技巧。针对工业自动化场景,提供硬件配置指南、网络优化方案和性能提升策略,帮助工程师避开常见陷阱,实现稳定高效的HMI系统部署。特别强调PC Station与传统触摸屏的选型对比及SIMATIC NET配置优化。

pp12345的博客 277

pycharm如何正确打包ocr且让打包出来的exe尽量小

打包exe ocr 对辅助文件进行第二次打包

m0_52551404的博客 5627

LeRobot SO-ARM100 学习笔记(2) diffusion module

对 lerobot 中的 diffusion policy 进行基本的代码阅读

mikhailbran的博客 1586

【自动驾驶】汽车智能驾驶计算芯片

本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。

Mr.Cssust的博客 2631

python中animation使用_在python代码中使用Tesseract OCR

上一篇文章中我们学习了用于光学字符识别的 Tesseract。本文将探讨如何在Python脚本中调用Tesseract库。然后我们应用Tesseract程序在一个非常小的示例图像集上对OCR的性能进行测试和评估。当前景文本与背景有非常清晰的分割时,Tesseract效果最好。在实践中,保证这些类型的分割可能极具挑战性。因此,我们倾向于训练特定领域的图像分类器和检测器。然而,当我们需要将OCR应用于...

weixin_39623082的博客 257

C# chart以鼠标所在位置为中心进行缩放

以前都用labview做一些软件,但给出去总是会遇到版本,安装包过大等一些问题,于是想自学C#,记录一下使用过程中遇到的一些问题和解决措施,便于日后回顾。 在这个项目中需要绘制折线图,由于数据比较大,需要对图表进行缩放操作,以鼠标为中心对图表进行缩放,在网上查找了一些资料没找到我想要的,于是自己想了一个解决方案,可以基本实现,但略显繁琐,由于刚开始学习C#,对一些操作不太了解,若以后遇...

fei的博客 6363

基于Tesseract-OCR识别简单验证码

Tesseract-OCR是谷歌的开源OCR库。使用Tesseract-OCR识别验证码的优点如下: 1、与调用网络API相比,本地调用速度更快; 2、对于识别简单的验证码,Tesseract-OCR显得更加简单高效。 缺点也是十分明显的,如下: 1、只调用Tesseract-OCR识别效果差,需要使用jTextBoxEditor进行人工手动训练数据,过程十分繁琐; 2、对于复杂验证码,...

diOSyu的博客 1716

广东省道路工程检测练习试题(判断题)真题

按下式计算小于某粒径颗粒质量百分数:X=(A/B)x100( )49.、挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测。95.挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测( )107.以干密度 pd 为纵坐标,含水率w为横坐标,绘 pd-w 关系曲线,曲线上峰值点的纵、横坐标分别为最大干密度和最佳含水率( )

ZShy001238的博客 682

基于DRU-HVDC的构网型海上风电场环流机理仿真复现

本文介绍了基于DRU-HVDC的构网型海上风电场环流机理仿真模型的构建方法。主要内容包括: 完整的Simulink模型结构,包含主模型文件GFM_DRU_Main.slx和配置脚本GFM_DRU_Setup.m 系统参数设置,包括基础频率(20Hz)、电压基准值(690V)、功率基准值(2MVA)等 四种仿真场景配置:电压不平衡、相位不平衡、阻抗不平衡和频率不平衡 风力发电机(WT)子系统的详细构建步骤,包含电压源、输出阻抗和测量模块 变压器和DRU整流器的参数设置 该模型可用于研究构网型风电场的环流机理。

huanghm88的专栏 261

图片识别工具Tesseract介绍和python搭配使用

Tesseract工具介绍和python的搭配使用,提高职场能力,训练属于自己的识别语言,你值得拥有!

xiaomao1993的博客 7782

基于Keil软件实现OLED显示(江协科技HAL库)

没有HAL库的OLED驱动文件,可以看过来

2401_82728381的博客 1452

Windows下Tesseract OCR引擎库的编译和下载

网上很多关于Tesseract OCR下载和编译的博客都已经过时了,按照其方法并不能成功。这里以最新的官方文档为基础,记录Tesseract OCR的下载和编译经历。

xiaofeizai1116的博客 2222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

tesseract ocr 安装使用

centos7安装 root用户执行如下命令 yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/ 如果找不到yum-config-manager命令 则安装 yum -y install yum-utils sud...

gs80140的专栏 1597

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

tesseract安装使用,人工智,图文识别验证码 系统操作(python)

这两天自学关于自我感觉很牛的图文识别系统,给你一张图片可以扫描其中的文字(是不是很牛嘿嘿!!!),以下是我在学习过程中所遇到的一点问题。先前在学习之前肯定是安装各种文件,各种包……(头痛……),查过各种版本的安装流程。其中也有好多大牛写的(大牛请之行绕道……),而我是总结一下自己的安装加理解经验。 1.安装tesseract:这个文件很是智能,我们不用为环境变量中的path发愁,安装时安

Smile_Mr的博客 786

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Python爬虫学习笔记一:模拟登录(人工输入简单验证码)
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值