python制作的校园网开机自动认证程序

本文介绍了一个使用Python编写的程序,该程序通过读取txt文件中的账号和密码信息,利用Tkinter创建图形界面,结合Postman获取的认证请求头,实现校园网络的自动登录。程序还能根据用户设置实现开机自启动,并且可以打包成exe文件方便运行。如果打包成单个exe文件,可能会运行较慢,作者建议打包成文件夹形式以提高效率。
摘要由CSDN通过智能技术生成

校园网每晚断电都需要重新认证

 通过浏览器开发者模式获取到请求头,复制到postman中测试,发现只需要账号和密码就可以通过认证,ip信息可有可无,于是就简单做了一个页面,把账号和密码收集一下拼接成字符串发送请求就OK了,但是要做到自动发送请求,就想到把不同的数据存放在同目录下的一个txt文本中,每次打开时读取一下,再让程序开机后自启动就OK

import getpass
import os
from win32com.client import Dispatch
import tkinter as tk
import requests

# 获取当前系统用户的用户名
username = getpass.getuser()

# 创建主窗口
window = tk.Tk()

# 设置窗口大小
window.geometry("400x350")
# 获取屏幕的宽度和高度
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
# 计算窗口的位置
x = (screen_width - window.winfo_reqwidth()) / 2
y = (screen_height - window.winfo_reqheight()) / 2
# 设置窗口的位置
window.geometry("+%d+%d" % (x, y))
# 设置窗口标题
window.title("自动登录程序")

try:
    with open('userMsg.txt', 'r') as f:
        lines = f.readlines()
    name = lines[0].strip()
    password = lines[1].strip()
    mode = lines[2].strip()
    flag = lines[3].strip()
    flag2 = lines[4].strip()
    f.close()
except:
    name = ""
    password = "888888"
    mode = "@cmcc"
    flag = "False"
    flag2 = "True"

if mode == "":
    mode = "@cmcc"
if flag == "":
    flag = "False"
if flag2 == "":
    flag2 = "True"

# 创建一个标签,用于显示输入框中的文本
label = tk.Label(window, text="请输入用户名:")
label.pack()
# 创建一个输入框
entry = tk.Entry(window)
# 设置输入框的默认文本
entry.insert(0, name)
entry.pack()

# 创建一个标签,用于显示输入框中的文本
label2 = tk.Label(window, text="请输入密码:")
label2.pack()
# 创建一个输入框
entry2 = tk.Entry(window)
entry2.insert(0, password)
entry2.pack()

# 创建一个标签,用于显示单选框的文本
radio_label = tk.Label(window, text="请选择对应运营商:")
radio_label.pack()
# 创建一个单选框组件
radio_var = tk.StringVar(value=mode)
# print(len(mode))
# print(mode)
radio_button1 = tk.Radiobutton(window, text="移动", variable=radio_var, value="@cmcc")
radio_button2 = tk.Radiobutton(window, text="电信", variable=radio_var, value="@telecom")
radio_button3 = tk.Radiobutton(window, text="联通", variable=radio_var, value="@unicom")
radio_button1.pack()
radio_button2.pack()
radio_button3.pack()

# 创建勾选框变量
var = tk.BooleanVar(value=flag)
# 创建勾选框控件
checkbox = tk.Checkbutton(window, text="自动登录", variable=var)
# 将勾选框控件添加到主窗口中
checkbox.pack()

# 创建勾选框变量
var2 = tk.BooleanVar(value=flag2)
# 创建勾选框控件
checkbox2 = tk.Checkbutton(window, text="开机自启", variable=var2)
# 将勾选框控件添加到主窗口中
checkbox2.pack()

# 定义一个回调函数,当用户点击“确认”按钮时被调用
def on_confirm():
    text = entry.get()  # 获取输入框中的文本
    text2 = entry2.get()  # 获取输入框中的文本
    option = radio_var.get()  # 获取选中的单选框的值
    check1 = var.get()  # 获取勾选框的值
    check2 = var2.get()  # 获取勾选框的值
    if var.get():
        check2 = True
    with open('userMsg.txt', 'w') as g:
        g.write(str(text.strip()))
        g.write(str('\r'))
        g.write(str(text2.strip()))
        g.write(str('\r'))
        g.write(str(option.strip()))
        g.write(str('\r'))
        g.write(str(check1).strip())
        g.write(str('\r'))
        g.write(str(check2).strip())
        g.close()

    # 对http://10.2.255.26:801进行GET请求
    url = "http://10.2.255.26:801/eportal/portal/login?login_method=1&user_account=" + text + option + "&user_password=" + text2 + \
          "&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=7725&lang=zh"
    r = requests.get(url)

    if "认证成功" in r.text:
        window.deiconify()
        label3 = tk.Label(window, text="认证成功")
        label3.pack()
        if flag:
            window.after(100, window.destroy)
        else:
            window.after(500, window.destroy)
    elif "已经在线" in r.text:
        window.deiconify()
        label3 = tk.Label(window, text="已经在线")
        label3.pack()
        window.after(500, window.destroy)
    elif "login again" in r.text:
        on_confirm()
    else:
        with open('userMsg.txt', 'w') as f:
            f.write(str(text.strip()))
            f.write(str('\r'))
            f.write(str(text2.strip()))
            g.write(str('\r'))
            g.write(str(option.strip()))
            f.write(str('\r'))
            f.write(str("False").strip())
            f.write(str('\r'))
            f.write(str(check2).strip())
            f.close()
        window.deiconify()
        label3 = tk.Label(window, text=r.text)
        label3.pack()

    file_path = os.path.expanduser(os.getcwd()+"/AutoLogin.exe")
    shortcut_path = os.path.expanduser(
            f"C:\\Users\\{username}\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\自动登录.lnk")
    if check2 is True:
        # 创建文件快捷方式
        shell_link = Dispatch("WScript.Shell").CreateShortCut(shortcut_path)
        shell_link.Targetpath = file_path
        shell_link.WorkingDirectory = os.path.dirname(file_path)
        # shell_link.IconLocation = "notepad.exe"
        shell_link.save()
    elif check2 is False:
        if os.path.exists(shortcut_path):
            # 删除文件快捷方式
            os.remove(shortcut_path)

# 创建一个按钮,用于确认用户的输入
button = tk.Button(window, text="确定", command=on_confirm)
button.pack()

if flag == "True":
    window.withdraw()
    on_confirm()

# 进入主循环
window.mainloop()

最后用pyinstaller打包成exe就可以不需要配置python也可以运行,开机自启的方法是在Windows的startup目录创建一个程序的快捷方式。

后来发现打包成单个exe文件 运行速度较慢,于是选择打包成文件夹的形式:

程序获取连接:自动登录.zip - 蓝奏云 (lanzoub.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值