Python+Selenium+PIL+Tesseract真正自

作者: mrlevo520 | 来源:发表于2016-08-06 10:59 被阅读7674次

    Python 2.7
    IDE Pycharm 5.0.3

    Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客

    PIL : Pillow-3.3.0-cp27-cp27m-win_amd64.whl PIL第三方库的下载
    win下安装whl文件

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

    Tesseract:3.0.2 tesseract下载及安装

    Firefox浏览器:47.0.1


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

    扯淡

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


    对比图

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


    这里写图片描述

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


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


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


    登陆图书馆

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

    # -*- coding: utf-8 -*-
    #Author:哈士奇说喵
    from selenium import webdriver
    import time
    import sys
    
    
    #shift+tab多行缩进(左)
    reload(sys)
    PostUrl = "http://lib.hrbeu.edu.cn/#"
    driver=webdriver.Firefox()
    driver.get(PostUrl)
    
    elem_user = driver.find_element_by_name('number')
    elem_psw = driver.find_element_by_name('passwd')
    
    #选择我的图书馆,点击后才能看到输入账号密码
    click_first = driver.find_element_by_xpath("//ul[@id='imgmenu']/li[4]")
    click_first.click()
    elem_user.send_keys('S315080092')
    elem_psw.send_keys('xxxxxxxx')
    
    #点击登录
    click_second = driver.find_element_by_name('submit')
    click_second.click()
    
    time.sleep(5)
    #登陆后选择
    click_third = driver.find_element_by_xpath("//*[@id='mainbox']/div/div/ul/li/a")
    click_third.click()
    
    time.sleep(5)#搜索结果页面停留片刻
    #driver.save_screenshot('C:\Users\MrLevo\image.jpg')
    
    driver.close()
    driver.quit()
    

    最后

    (虽然我知道以后肯定会再补充):断断续续差不多两天时间来实现这个操作,虽然对大家来说应该不算难,但是对自己还是有蛮大提升的,对selenium有了基本的概念和操作,对PIL也进行了使用,还有ocr的调用,虽然调用firefox来执行操作表面上看起来很酷炫,但是执行效率和占用内存是很大的内伤,但作为可视化的模拟浏览器登录,这点做的还是十分绚丽的。
    话说今天登了图书馆才知道,我tm过期书好几本了,好几天了,,,,看来得写个一键续期和查询过期图书的小工具了,so,又有动力了!

    so peace out,guys,and good night!


    这里写图片描述

    致谢

    这些博客真的给我很大帮助,谢谢博主们:
    1.tesseract-ocr识别英文和中文图片文字以及扫描图片实例讲解
    2.用pytesser作图片验证码识别
    3. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
    4. [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图
    5.初试PIL及基本操作
    6.Python爬虫模拟登录带验证码网站_手动输入验证码版本
    7.selenium-webdriver(python) (十五) -- 鼠标事件

    相关文章

      网友评论

      • 企鹅烤肉:您好,这个可以应用于打字游戏上么?应该怎样去实现?打字游戏字母是png格式的,并没有多种选项,谢谢您
      • Shimly随:os.chdir("C:\Users\MrLevo\Anaconda2\Lib") 大神 这里的路径是啥?没看懂
        Shimly随:是 python 的安装路径吗?
      • Koelre:滑动滑块验证码怎么做呀?
      • 373fccfcc249:import pytesser 倒入说进口错误

        ImportError: No module named Image

      • 6db52073878e:入学的时候教务秘书就跟我们吐槽这个教务系统了 :joy: 她说第一次先什么都不输,先点下登陆,自动刷新后再输用户名密码验证码,再点登陆 :joy:
        mrlevo520:@Dvangelion 是哈,估计故意设计的
      • 野狗子嗷嗷嗷:请问一下“手动输入验证码:适用范围更广,但不够方便”那里的第一行“response = opener.open(CaptchaUrl)”的opener是urllib里的吗,运行出错。我是新手,请不要嫌弃 :joy:
        野狗子嗷嗷嗷: @mrlevo520 我这几天我也写爬我们学校教务网的爬虫,验证码那一块还有一些问题解决不了,能不能加个好友请教你一下?😊
        mrlevo520:@PatrickYates 啊。有点忘了,太久远了,如果缺少包的话,alt+enter自动导入相关包,你可以试下
        mrlevo520:@PatrickYates 啊。有点忘了,太久远了,如果缺少包的话,alt+enter自动导入相关包,你可以试下
      • vansnowpea:第3个参考文章 登录163的示范,修改了帐号密码后,登入失败,

        Stacktrace:
        at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/ADMINI~1/AppData/Local/Temp/tmpyy57ob3m/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
        at FirefoxDriver.prototype.findElement (file:///C:/Users/ADMINI~1/AppData/Local/Temp/tmpyy57ob3m/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
        at DelayedCommand.prototype.executeInternal_/h (file:///C:/Users/ADMINI~1/AppData/Local/Temp/tmpyy57ob3m/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
        at DelayedCommand.prototype.executeInternal_ (file:///C:/Users/ADMINI~1/AppData/Local/Temp/tmpyy57ob3m/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
        at DelayedCommand.prototype.execute/< (file:///C:/Users/ADMINI~1/AppData/Local/Temp/tmpyy57ob3m/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
        mrlevo520:@vansnowpea 代码参考那个博主的了?还有就是如果用Firefox,那版本不能太高47就行了,太高无法调用的,也可以尝试phantomjs来试试
      • MeteorsHub:tesseract 好像只能识别简单的数字和字母吧,稍微有点变形覆盖啥的就不行了
        mrlevo520:@MeteorHub 对的,要是验证码都能被识别,那还要验证码干什么:joy:这个对简单数字还可以,图像增强下就OK了

      本文标题:Python+Selenium+PIL+Tesseract真正自

      本文链接:https://www.haomeiwen.com/subject/bxyksttx.html