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

前言:通过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使用详解icon-default.png?t=M85Bhttps://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还没有解决,验证码识别不一定每一次都能正确的识别出来,需要多运行几次,大概率是可以正常识别出来,不影响正常的使用,这也是我第一个自己写的小程序,大佬勿喷。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Python游戏数据采集分析可视化系统是基于Django框架开发的,该系统旨在通过爬虫技术获取游戏数据,并通过数据分析和可视化展示,帮助用户了解游戏情况和进行数据决策。 系统的主要功能包括如下几个模块: 1. 爬虫模块:通过编写爬虫代码,从游戏官方网站或其他相关站点获取游戏数据。爬虫可以实现自动化的数据采集,可以按照设定的规则定时抓取数据,确保数据的及时性和准确性。 2. 数据库模块:系统使用数据库来存储采集到的游戏数据,常用的数据库选择可以是MySQL、SQLite等。通过Django框架提供的ORM技术,可以方便地对数据库进行增、删、改、查的操作,以及对游戏数据进行管理。 3. 数据分析模块:通过数据分析技术,对采集到的游戏数据进行统计、分析、挖掘。可以使用Python的科学计算库如NumPy和Pandas进行数据处理,通过统计学、机器学习等方法,揭示游戏数据背后的规律和趋势。 4. 可视化模块:通过数据可视化技术,将游戏数据以图表、地图等形式直观展示,帮助用户更好地理解数据,并进行数据决策。可以使用Python可视化库如Matplotlib和Seaborn进行图表绘制,或者使用JavaScript的可视化库如D3.js实现更复杂的可视化效果。 5. 源码开放性:系统源码可以根据用户需求进行自定义修改和扩展。Django框架具有良好的可拓展性,用户可以根据自己的需求添加新的功能、优化系统性能等。 总之,Python游戏数据采集分析可视化系统使用Django框架进行开发,通过爬虫实现数据采集,数据分析和可视化模块对数据进行处理和展示。系统源码的开放性使得用户可以根据实际需求自定义修改和扩展功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeques

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值