本人经常碰到月底或无人值守时校园网断网,尤其是离校放假时,现主要总结配置方法,经测试双系统下均完美运行,提供源码,需要者自取
注:若出现search group报错,证明现在网络连接ing,断网后正常运行
源码
本源码非原创,原文如下,已取得原作者同意,尊重原创
https://blog.csdn.net/qq_36004475/article/details/121623593
# -*- coding:utf-8 -*-
import requests
import re
from pyDes import des, PAD_PKCS5, ECB
import binascii
import time
def des_encrypt(s, key):
"""
DES 加密
:param key: 秘钥
:param s: 原始字符串
:return: 加密后字符串,16进制
"""
secret_key = key
k = des(secret_key, mode=ECB, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return en # 得到加密后的16位进制密码
def encrypt(pd='12345', key='aM51f8FuE/s='):
"""
密码加密过程:
1 从认证页面中可获得base64格式的秘钥
2 将秘钥解码成bytes格式
3 输入明文密码
4 通过des加密明文密码
5 返回base64编码格式的加密后密码
:param pd: 明文密码
:param key: 秘钥
:return: 加密后的密码(base64格式)
"""
key = binascii.a2b_base64(key.encode('utf-8')) # 先解码
pd_bytes = des_encrypt(pd, key) # 得到加密后的16位进制密码
pd_base64 = binascii.b2a_base64(pd_bytes, newline=False).decode('utf-8')
return pd_base64
def login(username, password):
start_time = time.process_time()
session = requests.session()
headers = {
'Connection': 'keep-alive',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3;q=0.9',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/95.0.4638.69 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded'
}
session.headers = headers
# 访问任意网址,返回包含认证页面链接的内容(自动跳转)
url = 'http://bilibili.com/'
resp = session.get(url, verify=False)
# 提取认证链接并访问,经历一次重定向得到认证页面,且会返回一个session值
url = re.search(r"href='(.*?)'", resp.text).group(1)
resp = session.get(url)
# '''从认证页面正则得到 croypto(密钥 base64格式) 与 execution(post参数)的值 '''
croypto = re.search(r'"login-croypto">(.*?)<', resp.text, re.S).group(1)
execution = re.search(r'"login-page-flowkey">(.*?)<', resp.text, re.S).group(1)
# 构建post数据 填入自己的学号 密码
data = {
'username': username, # 学号
'type': 'UsernamePassword',
'_eventId': 'submit',
'geolocation': '',
'execution': execution,
'captcha_code': '',
'croypto': croypto, # 密钥 base64格式
'password': encrypt(password, croypto) # 密码 经过des加密 base64格式
}
# 添加cookie值
session.cookies.update({'isPortal': 'false'})
# 提交数据,进行登录,这里禁止重定向,因为会有cookie限制
url = 'https://id.dlmu.edu.cn/login'
resp = session.post(url, data=data, allow_redirects=False)
# 得到上一步返回的重定向网址,继续访问(需要清空cookie值)
# 这里实际经过了三次重定向
url = resp.headers['Location']
session.cookies.clear()
resp = session.get(url)
end_time = time.process_time()
print(end_time - start_time)
if resp.status_code == 200:
print('成功登录')
if __name__ == '__main__':
username = ''
password = ''
login(username, password)
定时任务配置过程:
Windows下:
修改代码最后为自己的学号密码
此电脑-管理-任务计划程序-创建基本任务
程序或脚本 选择python解释器路径
添加参数 选择 login.py路径
点击完成即可
Linux下:
修改代码最后为自己的学号密码
#!/usr/bin/bash cd /home/lan/Desktop /usr/bin/python /home/lan/Desktop/login.py
修改login.sh 内容为自己的.py路径
!!!!!注意一定要绝对路径
从脚本中要进入py文件所在目录,否则无法成功找到
chmod +x login.sh
添加定时任务
crtotab -e
添加如下内容:
00 7 * * * sh /home/lan/Desktop/login.sh(改为自己的绝对路径)
注释:时间每天7:00 命令
其余语法可自己百度
添加完后:wq保存退出可以通过
crtotab -l 查看



