专栏首页机器学习AI算法工程Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

Python 2.7 IDE Pycharm 5.0.3 Firefox浏览器:47.0.1

PIL : Pillow-3.3.0-cp27-cp27m-win_amd64.whl

PIL第三方库的下载 win下安装whl文件

http://www.cnblogs.com/2589-spark/p/4501816.html

Pytesser:依赖于PIL ,Tesseract 了解pytesser及基本使用

http://blog.sina.com.cn/s/blog_5d56279201017fta.html

Tesseract:3.0.2 tesseract下载及安装

http://blog.csdn.net/wanghui2008123/article/details/37694307


我有个理想,就是把TMD教务系统弄崩溃,我港真的!

扯淡

我相信每个脚本都有自己的故事,我这个脚本来源于自己GRD教务系统,每次进行登录时,即使我输入全部正确,第一次登录一定是登不上去的!我不知道设计人员什么想法?难道是为了反爬机制?你以为一次登不上,我tm就不爬了?我要是不高兴了,信不信秒秒钟访问你1000+让大家都上不去咯~咳咳,有点跑题了。

目的

自动识别验证码模拟登陆,注意是自动,一键登录,不是那种扫出验证码,然后手动输入登录!

第一次放动图,心理还有点小激动~


遇到问题及解决方法

1:验证码取得问题,因为每次刷新之后验证码动态刷新,所以如果不采用cookie的话(我还不太会用cookie),根本捉不到元素,这个我在下篇文章中采用cookie来登录的,但不是调用浏览器,这个跑远了,下次说。

1:解决方案:用了driver.get_screenshot_as_file方法,机智的进行全截图,然后采用PIL中的crop进行再截图操作,可能有人会说,为什么不采用ImageGrab.grab()函数来做,好吧,因为这个函数在win10上尽然!截不了全图!!自己试了才知道,btw,我的分辨率1920x1080,难道和分辨率有关?反正这个我截了好久都没有成功,到最后才想到,截全部看看,结果,tmd只有一半,我说怎么都找不到要截图的部分!

2:验证码验证错误率高问题

2:解决方案,采用PIL强大的图像处理功能,我先将图片二值化,本来是蓝色字体的,,然后再进行对比度强化来锐化图片,然后再调用Tesseract.exe进行处理,提高的识别精度不是一点两点:看图比较,左1是用cookie抓的原图,右边是全景截图,再定位截图,再进行二值化和锐化处理的图,本来我想着用matlab做图像识别的,但是想想还要调用,感觉有点麻烦。。。


3:调用Tesseract.exe问题 3:解决方案因为程序执行图像识别需要调用Tesseract.exe,所以必须把路径切到有这个exe的路径下,刚开始,以为和包依赖,结果根本没有识别出任何图!折腾一个多小时才写好验证码识别的问题—-单独测试的确很重要,记一笔!

4:登录失败问题–mdzz学校教务系统二次验证

4:解决方案,写了一个while循环,把主程序很大部分都扔进去了,目的也很明确,如果第一次登录失败,再重复进行登录,注意采用try试探元素是否仍然存在,except来抛出break结束循环,因为登录成功后,比如说driver.find_element_by_name('id')是不存在的!所以当这个元素在登陆后的界面找不到时,那就说明登录成功,ok,跳出循环,进行下一步操作。

5:明明图片已截取,为什么没有识别 5:解决方案,这个我真的没想到,我一直以为可能因为save时候还没下载好,导致库中没有这张图,那就不能识别,但是我用time.sleep函数让它停下来缓缓,还是不行,我就很无语了,想了半天,可能是因为图片被占用!因为我有一个img.show()函数,为了检测有没有截取到标准的图,然后show之后这个图像就被占用了!就像你在编辑word时候,是无法删除word文档一样!果然在注释掉show之后,一切可行,真是差错查了小半天啊!!

6:元素一切就位,为什么不执行操作 6:解决方案,这个有点脑残了,不过的确是我遇到的,还是记上一笔,然后骂自己一遍sb,没有click()你让它怎么处理!!!就像用cookie登录时候还有个ENTRY呢!

7:两次验证失败后,用户名重复累加 7:解决方案,直接加了个变量,计数循环次数,观察到只要超过两次没有登录上,就会累加登录名和用户密码,直接写了个if进行判断,完事!

8:im.crop(box)裁剪区域选择困难症 8:解决方案,多试几次,反正我是试出来的。。。。当然,你点击图片进行审查元素时候,可以看到图片大小,那么,你就可以知道横纵坐标差值多少,但是大范围区域还得自己试,如有更好的办法,请告知,以下为我截图实验次数,次数30+


9:导入不了Image,ImageEnhance 9:解决方案,因为PIL用的是第三方库,所以,采用的导入方式是这样的,多看看官方文档就可以,官方描述如下 Usefrom PIL import Imageinstead ofimport Image.


10:找不到应该键入的元素 10:这个问题,请单击要输入的空白处右键,审查元素,就可以看到,然后根据driver.find_element_by_各种方法来定位元素,如果输入进行了隐藏,在当前页面找不到怎么办,就像如下图,需要先点击我的图书馆,才能看到输入的账户和密码,那么先找我的图书馆的元素,进行click操作,之后再找元素,一句话,把自己想成浏览器,阿不,把python想成浏览器。。。。。

上图的代码我也放上,大同小异,比有验证码的简单,但是多了一个click操作。

断断续续差不多两天时间来实现这个操作,虽然对大家来说应该不算难,但是对自己还是有蛮大提升的,对selenium有了基本的概念和操作,对PIL也进行了使用,还有ocr的调用,虽然调用firefox来执行操作表面上看起来很酷炫,但是执行效率和占用内存是很大的内伤,但作为可视化的模拟浏览器登录,这点做的还是十分绚丽的。

本文分享自微信公众号 - 大数据挖掘DT数据分析(datadw)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 线性回归:预测上海车牌成交价格

    上海是全国最早实行私人轿车牌照拍卖方式来控制交通流量的城市,需要通过投标拍卖的形式购买车牌。 而车牌的拍卖并不是简单的价高者得,服务器只接受最低可成交价上下3...

    机器学习AI算法工程
  • k-d tree算法的研究

    作者:51CTO博主 RaySaint 先前一篇文章《SIFT算法研究》讲了讲SIFT特征具体是如何检测和描述的,其中也提到了SIFT常见的一个用途就是物体识...

    机器学习AI算法工程
  • EfficientDet训练自己的物体检测数据集

    我们常常有一个概念,SSD 等单阶段目标检测器很快,但准确性比不上 Mask R-CNN 等两阶段目标检测器,尽管两阶段目标检测推断速度要慢许多。那么有没有一种...

    机器学习AI算法工程
  • Tesseract文字训练,以及样本生成

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

    bear_fish
  • #数值分析读书笔记(4)求非线性方程的数值求解

    是否同号, 然后即可知根落在左侧还是右侧, 用这个中点来代替掉原来的端点, 然后得到一个新的区间, 如此反复迭代下去之后, 我们会发现区间收敛到接近一个数

    Mezereon
  • 支持向量机实现分类案例

    输出表明:该手写体数字的数码图像数据共有1797条,并且每幅图片是由8X8=64的像素矩阵表示。在模型使用这些像素矩阵的时候,我们习惯将2D的图片像素矩阵逐行首...

    用户3577892
  • nodejs实现简单的自动约车

    最近约车真是越来越难了,网上约车经常车位刚放出来便已空空如也。突然回想起之前学车时教练反复提到的约车软件,去淘宝上一查:我去,卖出去一千多份了!还能约到车那就是...

    星回
  • 世界物联网大会精彩纷呈 安恒信息分享物联网时代下的安全思考

    金秋九月,太湖之滨迎全球物联网发展盛事,无锡再次成为关注焦点。 9月10日,由工信部、科技部、江苏省政府共同主办的国内首个国家级、规模最大的物联网行业博览会——...

    安恒信息
  • 8篇CVPR2019论文开源合集(含CNN/目标检测/GAN/超分辨率/行人检测/文本检测等)

    CVPR2019 | 12篇目标检测最新论文(FSAF/GS3D/Libra R-CNN/Stereo R-CNN和GIoU等)

    Amusi
  • [菜鸟致敬⑨] 排版建议

    最近有关注诸多大佬的博客亦或微信公众号,也时常阅读一些好的文章,它们的排版风格亦是各不相同。大概是大佬都专注于叠代码的缘故,对于文章的排版好坏可能抱着得过且过的...

    Rare0716

扫码关注云+社区

领取腾讯云代金券