前言:通过Python爬虫与tkinter模块实现桌面快捷自动化登录教务系统

目录:

前言:通过Python爬虫与tkinter模块实现桌面快捷自动化登录教务系统

效果展示:

整体思路:

总体框架:

代码实现:

所用到的第三方库:

1.主界面实现

2.login()登录按钮

3.Cancel()清除函数

4.MockLongn()自动化登录函数(整个项目的重点!!!)

5.baiduOCR()图像处理识别函数——基于百度图像识别技术

6.结语


效果展示:

整体思路:创建主界面,在界面中手动输入用户名和密码,点击登录后自动打开浏览器,截取整个页面,裁剪出登录页面中的图片验证码并保存到本地,对验证码图片进行处理,识别出验证码。将用户名,密码,验证码一同自动输入到对应的框中,自动登录进入主页。

总体框架:

思维导图


代码实现:

所用到的第三方库:

time、tkinter、AipOcr、selenium、PIL

1.主界面实现

VisualInterface()主界面

#获取主界面窗口所有图片
def get_img(filename, width, height):im = Image.open(filename).resize((width, height))im = ImageTk.PhotoImage(im)return im#创建主界面
def VisualInterface():root = t.Tk()  # 创建主窗口root.title("xxxxxxx教务系统")  # 设置标题root.geometry("500x280")  # 设置窗口大小root.state("zoomed")  # 全屏#背景图canvas_root = t.Canvas(root, width=500, height=280)im_root = get_img('p5.png', 500, 280)canvas_root.create_image(250, 140, image=im_root)canvas_root.create_text(250, 55,text='xxxxxx教务系统桌面可视化登录'  # 所绘制文字的内容, fill='black', font=('宋体', 17,"bold"))canvas_root.create_text(180, 110,text='用户名:'  # 所绘制文字的内容, fill='black', font=('宋体', 14,"bold"))canvas_root.create_text(180, 150,text='密码:'  # 所绘制文字的内容, fill='black', font=('宋体', 14,"bold"))canvas_root.pack()# 用户名输入框varName = tkinter.StringVar(root, value='')  # 为输入框绑定字符串变量entryName = tkinter.Entry(root, width=80, textvariable=varName)entryName.place(x=220, y=100, width=120, height=20)# 密码输入框varPassword = tkinter.StringVar(root, value='')  # 为输入框绑定字符串变量entryPassword = tkinter.Entry(root, width=80, textvariable=varPassword, show='*')entryPassword.place(x=220, y=140, width=120, height=20)

主界面中我采用了python自带的库来做可视化界面,这个库功能性不是很好,只有三种布局方式,局限性有点大,界面美观效果不是特别好,想要了解的朋友可以看这篇文章:python之Tkinter使用详解https://blog.csdn.net/qq_45664055/article/details/117625146?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167064224616782390553588%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167064224616782390553588&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-117625146-null-null.142^v68^control,201^v4^add_ask,213^v2^t3_control2&utm_term=python%E4%B8%ADtkinter%E7%94%A8%E6%B3%95&spm=1018.2226.3001.4187大家可以去找找其他的python可视化窗口的库。首先我为tkinter窗口添加了背景图片,通过canvas工具包对图片样式进行修改,在图片的表面添加了文字对文字进行了字体,字号,加粗的调整。通过绝对布局对输入框进行位置调整。

2.login()登录按钮

    def login():url = "https://jw.scujj.edu.cn:82/xtgl/login_slogin.html"name = entryName.get()password = entryPassword.get()MockLongn(url, name, password)root.quit()# 创建按钮组件,同时设置按钮事件处理函数buttonOK = tkinter.Button(root, text='登录', command=login)buttonOK.place(x=135, y=200, width=60, height=20)

在主界面中创建登录按钮,当按钮点击后执行login()函数,获取上方输入框中输入的用户名和密码,并且调用MockLongn()函数自动化进入教务系统主页

3.Cancel()清除函数

    def Cancel():# 清理用户输入的用户名和密码varName.set('')varPassword.set('')# 创建取消按钮buttonCancel = tkinter.Button(root, text='清除', command=Cancel)buttonCancel.place(x=235, y=200, width=60, height=20)#退出按钮buttonQuit=tkinter.Button(root, text="退出", command=root.quit)buttonQuit.place(x=335,y=200,width=60,height=20)root.mainloop()  # 显示主窗口,进入事件循环

这里创建清除按钮对主界面输入框中输入的值进行清除,创建了退出主界面按钮,防止主界面在MockLongn()函数为未执行完进程之前异常卡死,主动退出主界面。代码比较简单我就不介绍了。

4.MockLongn()自动化登录函数(整个项目的重点!!!)

def MockLongn(url, name, password):s = Service(r'D:\Install the package\chromedriver.exe')browser = webdriver.Chrome(service=s)  # 实例化谷歌浏览器对象browser.implicitly_wait(10)  # 设置隐式等待browser.get(url)  # 访问教务系统登录界面browser.save_screenshot("./pic.png")  # 可以修改保存地址time.sleep(2)# (3)获取图片验证码坐标code_ele = browser.find_element(By.XPATH,"/html/body/div[1]/div[2]/div[2]/form/div/div/div[1]/div[3]/div[2]/img")# (4)图片4个点的坐标位置left = code_ele.location['x']  # x点的坐标top = code_ele.location['y']  # y点的坐标right = code_ele.size['width'] + left  # 上面右边点的坐标down = code_ele.size['height'] + top  # 下面右边点的坐标image = Image.open('pic.png')# (5)将图片验证码截取code_image = image.crop((left, top, right, down))code_image.save('./pic1.png')  # 截取的验证码图片保存为新的文件user_input = browser.find_element(By.XPATH, '//*[@id="yhm"]')  # 定位登录表单中的用户名输入框password_input = browser.find_element(By.XPATH, '//*[@id="mm"]')  # 定位登录表单中的密码输入框closs_input = browser.find_element(By.XPATH, '//*[@id="yzm"]')  # 定位登录表单中的验证码输入框user_input.send_keys(name)  # 在输入框中输入“用户名”password_input.send_keys(password)  # 在输入框中输入“密码”captcha = baiduOCR("pic1.png")closs_input.send_keys(captcha)  # 在输入框中输入"验证码"long_in = browser.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[2]/form/div/div/div[1]/div[5]/button')  # 定位登录按钮actions = ActionChains(browser)actions.click(long_in).perform()  # 执行点击登录按钮操作browser.switch_to.window(browser.window_handles[-1])  # 切换到用户主界面ActionChains(browser).key_down(Keys.CONTROL).send_keys("t").key_up(Keys.CONTROL).perform()

该部分主要通过模拟登录来首先,自动化登录。首先我们需要使用驱动ChromeDriver,来模拟Chrome浏览器,当然也可以用其他浏览器,需要去下载相应的驱动,这里作者以Chrome为例,如何下载使用请参考这篇文章:chromedriver使用。

我们模拟登录除了手动输入用户名和密码传递到网页外,最大的难点就是如何自动填写当前时刻的验证码,我最开始以爬虫的思路直接获取当前时刻验证码的url并下载保存验证码图片,结果发现下载后的图片与登录界面中显示的图片完全不相同,无法通过图片的URL直接保存当前时刻的图片验证码,后来通过不断寻找解决方法,参考思路,我突然想到可以直接保存当前时刻的登录界面,直接保存整个界面图片,并且识别出验证码所在的位置,将其从登录界面裁剪出来,即可得到当前时刻的验证码图片。然而图像的识别又是另一难点,在这里我才用的是百度开放平台提供的第三方识别文字工具——AI开发平台,至于如何使用可以参考:使用Python调用百度OCR。

在这个平台中新用户都可以领取到识别次数,要是没有领取,程序运行的时候就会报错,所以新用户记得都去领取一下。

对于验证码图像识别百度提供的库也存在一定的缺陷,对于干扰性线条多的验证码就无法正确的进行识别,我们可以使用另外一种识别方法OCR工具pytesseract,可以对图像进行大精度的识别处理,常见的验证码如下:

XPATH参数的获取,可以对教务系统页面源代码进行查看,右键获取输入框和验证码的XPATH值

模拟登录中的点击事件也是自动化的一个重要板块,如何点击可以看看这篇:python+selenium实现登录账户后自动点击https://blog.csdn.net/lijun538/article/details/50695914

5.baiduOCR()图像处理识别函数——基于百度图像识别技术

def baiduOCR(picfile):#百度识别技术APP_ID = ''API_KEY = ''SECRET_KEY = ''client = AipOcr(APP_ID, API_KEY, SECRET_KEY)i = open(picfile, 'rb')img = i.read()""" 调用通用文字识别(高精度版) """message = client.basicAccurate(img)i.close()return message['words_result'][0]['words']  #返回验证码值

这个函数我就不做过多介绍,如何使用请看上文——使用Python调用百度OCR

6.结语

最后我还将.py文件和图片打包成为了一个可执行的EXE文件,直接在桌面就可以使用,想要使用或者学习的小伙伴可以直接私信我。本文所使用的方式和代码还有很多不足的地方,也有一些BUG还没有解决,验证码识别不一定每一次都能正确的识别出来,需要多运行几次,大概率是可以正常识别出来,不影响正常的使用,这也是我第一个自己写的小程序,大佬勿喷。

Python桌面可视化+自动登录学校教务系统(含源码!!!)相关推荐

  1. Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]

    1.视频演示: [项目分享]Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.明厨亮灶: 餐饮企业的厨房卫生状况一直饱受消 ...

  2. 基于改进Deeplabv3plus的自动驾驶场景分割系统 (源码&教程)

    1.研究背景 随着人工智能技术的飞速发展,车辆的自动驾驶离人们的生活越来越近.自动驾驶整个运行流程中首先需要依赖各种车载传感器收集车辆周围的各种环境数据,进而利用各种分析算法分析得到计算机可感知的环境 ...

  3. 用Python模拟登录学校教务系统抢课

    --  Illustrations by Vladislav Solovjov -- ♚ 作者:小苏打 博客地址:https://vhyz.me GitHub地址:github.com/vhyz/ZF ...

  4. 抢课不再凭手速和运气,Python模拟登录学校教务系统抢课

    前言: 最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,不用再担心手速跟不上,抢啥中啥.不用再承受抢不中想去的课,最后被调剂到各种"灭绝师太&q ...

  5. 模拟登录学校教务系统网站

    # -*- coding:utf-8 -*-# 用于http请求 import requests# 解析HTML和XML import bs4# 操作系统的命令操作模块 import os# 在内存中 ...

  6. 利用Python requests库模拟登陆学校教务系统

    在研究了一会requests库的实现之后.发现requests的确非常强大.. 几行代码就登陆上了学校的教务系统,但也许是我们学校的教务系统做的太烂了吧23333.动不动就血崩. 下面是代码. imp ...

  7. Java项目学校教务教学管理系统源码,基于springboot+mybatis+layui+shiro+jquery开发

    Java学校教务管理系统源码 技术:springboot+mybatis+layui+shiro+jquery 运行环境:jdk8+mysql5.7+IntelliJ IDEA+maven  源码类型 ...

  8. Vue+python+django高校田径运动会成绩报名系统pycharm源码lw

    田径运动会成绩管理系统,主要的模块包括首页.个人中心.赛前通知管理.裁判员管理.队员管理.比赛信息管理.比赛项目管理.比赛报名管理.弃权信息管理.特殊队员管理.赛前编排管理.赛中信息管理.赛事成绩管理 ...

  9. SSM毕设项目 - 基于SSM的电影院在线售票系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 开发环境 3.3 系统流程 3.3.1 系统开发流程 3.3.2 用户登录流程 3.3.3 系统操作流程 3 ...

最新文章

  1. Python time sleep()方法
  2. 聊聊近期的感受和10月文章精选!
  3. 忧心文案小程序第二版前端后端源码
  4. Aizu0189 Convenient Location【Floyd算法】
  5. linux版svn 软件,可以媲美TortoiseSVN的Linux版SVN客户端软件RabbitVCS
  6. 你写的api接口代码真是_有哪些好玩的免费的API接口?
  7. Sorting 2D Vector in C++ | Set 2 (In descending order by row and column)
  8. su: Authentication failure问题
  9. javascript小案例-----tab栏切换
  10. 人生如梦,一尊还酹江月(评倚天屠龙记)
  11. 51CTO.com 巅峰访谈:让远程接入访问变得更简单 更高效
  12. 高级货!Django实现基于人脸识别的门禁管理系统【源码】
  13. 数学乐 --- 奇函数与偶函数(个人学习笔记)
  14. php图片点阵,HTML5边玩边学(八)-砖块贴图点阵字
  15. VMware12下安装Windows7虚拟机---详细多图教程(沙盒环境)
  16. 第二十八篇 网页实战之静态网页爬取,四大案例,小说,书,图片等抓取操作
  17. Pandas常用方法一
  18. CLB Overview
  19. Python:1018 锤子剪刀布
  20. 《树莓派实战秘籍》——第 1 章 配置技巧1.1 技巧01选择并格式化合适的SD卡...

热门文章

  1. 使用 JavaScript 从字符串中提取数字
  2. 性格测试c语言程序,性格测试题目及答案
  3. docker制作centos7.9+apache2.4+php7.4镜像
  4. qq信息自动发送程序
  5. 微软学者奖学金2020名单出炉!中国高校八人上榜,清华表现最为亮眼
  6. oracle实验记录 (ROW 压缩,迁移,链接)
  7. 大部分工业机器人都采用二级计算机控制,焊接机器人示教器解读.ppt
  8. 简单因式分解100道及答案_整式的乘除与因式分解拔高题习题.doc
  9. linux安装joomla,如何在CentOS 7上安装Joomla
  10. STM32中开漏(open-drain,漏极开路)和推挽(push-pull)以及float input分析