当模拟登陆遇到验证码

本文介绍了在模拟登录过程中遇到验证码的挑战,探讨了如何使用Tesseract-OCR和Python库pytesseract自动识别验证码。虽然会遇到一些错误,如找不到数据文件或权限问题,但在CMD环境下使用该方法能避免一些PyCharm中的问题。实战部分展示了通过这种方法成功登录校园图书馆系统,尽管存在一些小瑕疵,但已显著提高了自动化程度。文章最后提到了Python3.6与Pillow库的兼容性问题,并推荐了在线验证码处理服务作为更精准的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       

前言

这两天在看相关于模拟登录的案例,不可避免的遇到了一些验证码相关的问题,在此之前一直使用的是将验证码下载到本地,然后人工肉眼识别的方式。但是效果可想而知,精确度倒是还可以,然而却变得不是很智能了。于是今天来学习一下如何自动识别验证码。

环境

我的实验环境为:

  • Python3.6
  • Pycharm2016.2 Professional
  • Tesseract-OCR-3.0
  • Windows 10 64位

在开始之前确保安装了tesseract引擎,然后是pytesseract这个第三方库。

如果没有安装其实也是可以使用的,那就是借助Python调用系统命令的方式来实现将验证码图片中的内容读入到文本文件,在通过代码读取文本文件得到验证码内容。 但是pytesseract使得这样的一个过程更加简便,所以没有安装的话还是建议安装一下。

pip install pytesseract
  
  
  • 1

读取图片的时候需要PIL库的支持,没有安装的话还是建议先安装一下,否则程序无法进行下去的。

实施

简易示例

import pytesseractfrom PIL import Imageimage = Image.open(r'checkcode.gif', mode='r')vcode = pytesseract.image_to_string(image)print(vcode)
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果为:
图片验证码识别

之所以不在PyCharm中运行, 就是因为会出现一些让人不明所以的错误信息。比如什么

  • FileNotFoundError
  • Permission Denyed
  • .TesseractError: (1, ‘Error opening data file \Software\tesseract\Tesseract-OCR\tessdata/eng.traineddata’)

我也查了相关的资料,发现确实没有什么好点的解决办法,或许可以通过修改pytesseract.py的源码来解决吧, 谁知道呢?

实战校园图书馆登录

# coding: utf8# @Author: 郭 璞# @File: DLUTLibraryLogin.py                                                                 # @Time: 2017/4/7                                   # @Contact: 1064319632@qq.com# @blog: http://blog.youkuaiyun.com/marksinoberg# @Description: 大连理工大学图书馆模拟登陆,添加了验证码识别脚本import requestsimport BeautifulSoupimport os, sysimport pytesseractfrom PIL import Imageloginurl = 'http://opac.lib.dlut.edu.cn/reader/redr_verify.php'captchaurl = 'http://opac.lib.dlut.edu.cn/reader/captcha.php'headers = {    'Referer': 'http://opac.lib.dlut.edu.cn/reader/login.php',    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36",}session = requests.Session()##### 获取到验证码并保存checkcodecontent = session.get(captchaurl, headers=headers)with open('checkcode.jpg', 'wb') as f:    f.write(checkcodecontent.content)    f.close()print('验证码已写入到本地!', '下面开始调用tesseract-OCR引擎识别验证码!')img = Image.open('checkcode.gif', mode='r')result = pytesseract.image_to_string(image=img)checkcode = resultprint('验证码为:', checkcode)# os.startfile('checkcode.jpg')# checkcode = input('请输入验证码:')##### 准备登陆图书馆系统payload = {    'number':'学号',    'passwd':'密码',    'captcha': checkcode,    'select':'cert_no'}response = session.post(loginurl, headers=headers, data=payload)print('服务器端返回码: ', response.status_code)soup = BeautifulSoup(response.text, 'html.parser')## 打印当前用户username = soup.find('font', {'color': 'blue'})print(username.get_text())## 打印积分信息jifen = soup.find_all('span', {'class': 'bigger-170'})[3]jifen = str(jifen.get_text())print('当前登录用户总积分:', jifen)
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

效果演示

大连理工大学图书馆系统

恩,用户名那点确实出现了乱码,但是从积分那块我们也可以发现确实是登录成功了。相比于第一个版本,使用了pytesseract来处理验证码问题,还真的是比较方便的,最起码不用再手动输入了,这也算是一个进步吧。

最后,需要说明的是在Pycharm中不好用,还非得到CMD中去运行,真的是很无语。

总结

最后又发现一个问题那就是Python36对于Pillow4.1.0不能兼容,安装上去之后会出现各种各样的问题,比如:ImportError: DLL load failed: from . import _imaging as core

解决办法就是安装Pillow4.0.0,反正我是这么解决的了。

对于验证码问题,使用tesseract基本上已经满足需求了。但是很多时候还是不能正确的获取到真实的验证码内容。

而现在网上也有很多专门的服务,通过接口的形式在线处理验证码问题,精准度还是很不错的,有兴趣的话可以尝试一下。

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值