python实现合工大试题库刷题篇之验证码篇

最近,学校题库网站在登录页面加了验证码,原来的不能用了。于是,和室友合作,他写机器学习识别验证码,我来整合。

他的github:https://github.com/qq316107934/tkkc_captcha_hunter/blob/master/captcha2.py

思路是:把验证码识别程序放在云服务器上,做成api供本地调用。

整个折腾过程遇到的问题:

  • 首先自然是在服务器安装各种机器学习包及其依赖包了。我开始是用的python2的pip然后再安装scipy的时候吧,编译安装结果告诉我“无法分配更多内存的问题”.然后换apt-get去安装scipy以及sklearn。结果由于服务器时ubuntu14.04LTS,所以软件源是比较老的,下下来的包太老了,不能用。卒。在室友的“强迫”下,安了pip3,结果一路安下去,没出啥故障。。。并且知道了原来ubuntu不仅自带了python2.7还自带了python3.4(在控制台分别输入python、python3即可发现)
  • 安完所有包,开始部署了。用的flask,微调了下机器学习代码。成功部署,可以访问后,怎么传验证码图片的数据呢?一开始用的get,貌似直接超过了url大小的限制,于是改做post方式。第二个问题,获取到的图片十六进制数据是诸如‘\xff’这样表示的,还得通过urlencode再传输。这里使用python urllib的两个函数:1. urllib.parse.quote_from_bytes(字节)  2.urllib.parse.unquote_to_bytes(str).传输这一块搞定了,然后测试了下,可以返回识别出的验证码,收工。(顺便提一句,flask中通过flask.request.form[‘ ’]来获取post的数据)
  • OK,回归本地的程序代码来。该加的都加上,比如post的字段randomCode.这里需要注意,由于验证码识别率并不是百分百,所以可能得多试几次。
  1. python是支持 while i>100这样的语法的,以后不用再纠结如何在python里写条件循环了。。。
  2. 清除一个session对象的cookies:ses.cookies.clear()

 

posted @ 2016-12-21 20:46  TellMeUp  阅读(1305)  评论(0编辑  收藏  举报