1.应用背景
为了追求更高的性价比,多数人的电脑选择自己配置电脑,由于配置的是台式机,不方便移动。为了在自己现场的时候也可以使用就需要用到桌面远程操作。在学校的场景下,由于校园网需要登录认证才能连接互联网,所以在远程操作的时候需要保证校园网处于登录状态。同时,有时候需要将电脑关机以延长使用寿命,而现有的远程开机操作大多需要购买相关硬件(学生党资金不充裕),鉴于此,对电脑设置定时开机操作在一定程度上可以守住钱袋子。
2.电脑定时开机
由于博主使用的Windows系统为win10,这里的操作以win10为例。(经博主测试,电脑是双系统(win10+ubuntu20.4)也可定时开机)
2.1需要在Windows上设置的相关操作
1.打开控制面板,找到“系统与安全选项”
2.找到“电源选项”,点击,“更改电源按钮功能”
3.点击“更改当前不可用设置”
4.取消“启用快速启动(推荐)”
5.保存更改,关闭窗口,在Windows上的设置完成
2.2在bios上设置的相关操作
博主使用的主板是微星主板,这里设置以微星主板为例(各大主板操作应该相差不大)
1.进入bios,如果是高级模式则进行下一步操作,如果不是则按“F7”进入高级模式,高级模式如下图
2.单击SETTINGS,进入SETTINGS设置,选择高级选项
3.点击“唤醒事件设置”
4.将“即时(RTC)闹铃唤醒”更改为允许;“日期(月份)闹钟”设置为0表示为每天,设置为1表示为每月1日,2为2日,依次类推,最大为31日;后面的“时分秒”则设置为在某天的几点几分几秒(时间格式为24小时制)进行唤醒操作。博主的设置如下图,表示每天早上7点0分0秒进行唤醒操作
5.点击右上角“X”,选择保存并退出,bios上的相关操作到这里设置完成
3.校园网自动登录程序
博主学校的校园网认证采用的是网页认证,认证请求方式为GET。具体查看校园网认证请求方式可以打开浏览器(Chrome或则edge浏览器都可以),按“F12”打开开发者模式,打开校园网认证页面。如下图所示
1.校园网登录程序如下
需要额外安装的库
pyinstaller~=4.7
requests~=2.26.0
import subprocess
import time
import requests
class Network:
def __init__(self, userId, password, delay_time, ping_baidu, ping_campus):
self.userId = userId
self.password = password
self.delay_time = delay_time*60 #秒转化为分钟
self.ping_baidu = ping_baidu
self.ping_campus = ping_campus
def __call__(self):
self.run_loop() # 第一次执行
def ping_network(self, ip_or_domain):
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
try:
output = subprocess.check_output('ping %s -n 3 -w 80' % ip_or_domain, stderr=subprocess.STDOUT, universal_newlines=True, startupinfo=si)
if '100% packet loss' in output:
# print('Ping failed: 100% packet loss')
return False
else:
# print('Ping succeeded')
return True
except subprocess.CalledProcessError as e:
# print('Ping failed:', e.returncode, e.output)
return False
def get_wlan_ip(self):
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Host": self.ping_campus,
"Referer": "http://%s" % self.ping_campus,
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
try:
result = requests.get('http://%s' % self.ping_campus, headers)
except requests.exceptions.RequestException as e:
# print("请求异常:", e)
return False
ip = ""
for i in range(result.text.find('ss5=') + 5, result.text.find('ss6=')):
if result.text[i] == '"': break
ip = ip + result.text[i]
print("本机ip:%s" % ip)
return ip
def login(self):
userip = self.get_wlan_ip()
if userip :
url = 'http://{}:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C{}&user_password={}&wlan_user_ip={}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2.1&terminal_type=1&lang=zh-cn&v=7923&lang=zh'.format(
self.ping_campus,
self.userId, self.password, userip)
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Connection": "keep-alive",
"Host": self.ping_campus,
"Referer": "http://%s/" % self.ping_campus,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
try:
req = requests.get(url, headers)
except requests.exceptions.RequestException as e:
# print("请求异常:", e)
return False
if req.status_code == 200:
return True
else:
return False
else: return False
def run_loop(self):
while True :
flag_campus = self.ping_network(self.ping_campus)
flag_baidu = self.ping_network(self.ping_baidu)
if flag_campus and flag_baidu :
print("校园网连接正常!")
else:
if not flag_campus :
print("无法访问校园网登录页面, 请检查是否连接网络!")
elif not flag_baidu :
print("校园网未登录, 尝试重连中...")
relogin = self.login()
time.sleep(3) # 等待3秒钟再判断是否登录成功
if relogin and self.ping_network(ping_baidu):
print("校园网已登录")
else: print("校园网登录失败")
time.sleep(self.delay_time)
if __name__ == '__main__':
userId = "++++" #校园网账号
password = "++++" #校园网密码
delay_time = 360 #360分钟后判断是否需要重连
ping_baidu="baidu.com" #百度
ping_campus="++++++" #校园网认证页
network = Network(userId, password, delay_time, ping_baidu, ping_campus)
network()
2.主函数中userid为自己的校园网账号;password为自己的校园网密码;ping_campus为检测电脑是否连接到互联网的网址,可以替换为任一国内互联网网址(bilibi.com之类);ping_campus为自己学校的校园网认证页网址
if __name__ == '__main__':
userId = "++++" #联通加上%40unicom,电信加上%40telecom,移动加上%40Mobile
password = "++++"
delay_time = 360 #360分钟后判断是否需要重连
ping_baidu="baidu.com" #百度
ping_campus="++++++" #校园网认证页
network = Network(userId, password, delay_time, ping_baidu, ping_campus)
network()
3.ping_network用于测试网络连通性
下面代码为Windows中使用
def ping_network(self, ip_or_domain):
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
try:
output = subprocess.check_output('ping %s -n 3 -w 80' % ip_or_domain, stderr=subprocess.STDOUT, universal_newlines=True, startupinfo=si)
if '100% packet loss' in output:
# print('Ping failed: 100% packet loss')
return False
else:
# print('Ping succeeded')
return True
except subprocess.CalledProcessError as e:
# print('Ping failed:', e.returncode, e.output)
return False
ubuntu下使用下面代码
def ping_network(self, ip_or_domain):
ping_result = subprocess.call(['ping', '-c', '3', ip_or_domain])
# 判断Ping结果中是否有100%丢失
if ping_result == 0:
return True
else:
return False
4.获取学校服务器分配的校园网IP地址,其中的headers根据不同学校可能有所不同,url为Request URL,可以浏览器开发者模式获取。对应填入即可
ip通过向校园网认证页发送请求所得到的响应提取出来
def get_wlan_ip(self):
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Host": self.ping_campus,
"Referer": "http://%s" % self.ping_campus,
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
try:
result = requests.get('http://%s' % self.ping_campus, headers)
except requests.exceptions.RequestException as e:
# print("请求异常:", e)
return False
ip = ""
for i in range(result.text.find('ss5=') + 5, result.text.find('ss6=')):
if result.text[i] == '"': break
ip = ip + result.text[i]
print("本机ip:%s" % ip)
return ip
5.登录函数,与步骤4相同方式可以获得url和headers,
def login(self):
userip = self.get_wlan_ip()
if userip :
url = 'http://{}:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C{}&user_password={}&wlan_user_ip={}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2.1&terminal_type=1&lang=zh-cn&v=7923&lang=zh'.format(
self.ping_campus,
self.userId, self.password, userip)
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Connection": "keep-alive",
"Host": self.ping_campus,
"Referer": "http://%s/" % self.ping_campus,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
try:
req = requests.get(url, headers)
except requests.exceptions.RequestException as e:
# print("请求异常:", e)
return False
if req.status_code == 200:
return True
else:
return False
else: return False
6.在pycharm中选择终端,输入以下指令即可生成可执行文件
pyinstaller --onefile -w auto_connect.py #auto_connect.py替换成自己命名的名字
4.设置开机自启动
1.右键此电脑,管理;选择“创建任务”
2.常规设置,名称和描述无所谓,按选项选需要修改成第二项
3.触发器,选择“新建”,“开始任务”选择“启动时”
4.操作,选择“新建”,“浏览”找到自己生成的可执行文件,双击,确定
5.点击确定,就创建好任务了。以后只要电脑开机,就会自动运行程序了文章来源:https://www.toymoban.com/news/detail-806183.html
文章来源地址https://www.toymoban.com/news/detail-806183.html
到了这里,关于电脑定时开机及校园网自动登录设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!