python爬虫登录界面-验证码

选课真的是个苦恼的事,每次都一到时间都登录不上,登录上以后都没的选了,偶尔有人退课也不能一直盯着等待选课,想着使用爬虫进行自动监测和选课。通过分析这次操作过程,决定还是利用selenium,主要由两个点之前没有做过,一个是输入表单的账号和密码提交登录,还有一个就是验证码的问题,由于目前选课已经完成,所以程序做了一半,可以登录进去找到要选的课程,有部分bug未修复,也没有完整的完成选课过程,但是用到的代码块和设计过程中遇到的坑还是可以记录一下,以后说不定还有类似的需求。

第一个坑:开始我用的IE11浏览器和相应的驱动,后来做到提交完表单页面显示为登录页面之后driver对象就为空了,一直没找到原因,网上搜索的结果是IE11有这个bug,我这个小白怕是解决不了这样的问题,于是下载了firefox的驱动geckodriver.exe。用的时候记得配置驱动的环境变量,开始我没配置环境变量,用的下面一段代码实现的:

firefoxdriver = 'D:\software\webdriverie\geckodriver.exe'
os.environ["webdriver.firefox.driver"] = firefoxdriver
driver = webdriver.Firefox(firefoxdriver)
url='https://sso.dlut.edu.cn/cas/login?service=http://202.118.65.123/pyxx/LoginCAS.aspx?a=1'
driver.get(url)

用ie的时候上面那段代码没任何问题,也不需要配置环境变量,但是换成firefox之后总是报一个我不能理解的错误:winerror 276,找不到路径:'D:\\software\\webdriverie\\geckodriver.exe'。我把\换成两个\依然这样报错,可以确定应该不是转义字符的问题,最终没有解决,我就换成了配置环境变量,在path里面输入geckodriver.exe所在的文件路径,driver = webdriver.Firefox()就可以打开火狐浏览器了。但是还有一个小问题,就是firefox浏览器驱动的兼容性问题,我用的是Firefox55.0+geckodriver9.0。火狐浏览器最好选择55.0+版本,具体可以看介绍,我开始用的45.0的火狐出现了打开浏览器不能输入网址的问题,卡在这个地方了。

第二个坑就是验证码的问题了,这个问题我还是没解决,我只做到了一半,就是把验证码截取下来,然后把图形二值化,但是借用pytesseract模块配合tesseract,直接利用英文训练库,用image_to_string方法转换为字符,通常不能转换准确,所以我采用了登录学校不带验证码的旧版系统。介绍一下验证码的识别过程:首先下载tesseract:https://sourceforge.net/projects/tesseract-ocr/ 网络上还有许多下载驱动,下载,然后我用的python,安装pytesseract模块,用pip和conda安装都可以,安装完成之后记得在pytesseract模块的安装目录找到pytesseract.py文件,配置tesseract的安装目录,如下图:

猜你喜欢

转载自blog.csdn.net/Will_Zhan/article/details/86468417