校园网每晚断电都需要重新认证
通过浏览器开发者模式获取到请求头,复制到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)