1.應(yīng)用背景
為了追求更高的性價(jià)比,多數(shù)人的電腦選擇自己配置電腦,由于配置的是臺式機(jī),不方便移動。為了在自己現(xiàn)場的時(shí)候也可以使用就需要用到桌面遠(yuǎn)程操作。在學(xué)校的場景下,由于校園網(wǎng)需要登錄認(rèn)證才能連接互聯(lián)網(wǎng),所以在遠(yuǎn)程操作的時(shí)候需要保證校園網(wǎng)處于登錄狀態(tài)。同時(shí),有時(shí)候需要將電腦關(guān)機(jī)以延長使用壽命,而現(xiàn)有的遠(yuǎn)程開機(jī)操作大多需要購買相關(guān)硬件(學(xué)生黨資金不充裕),鑒于此,對電腦設(shè)置定時(shí)開機(jī)操作在一定程度上可以守住錢袋子。
2.電腦定時(shí)開機(jī)
由于博主使用的Windows系統(tǒng)為win10,這里的操作以win10為例。(經(jīng)博主測試,電腦是雙系統(tǒng)(win10+ubuntu20.4)也可定時(shí)開機(jī))
2.1需要在Windows上設(shè)置的相關(guān)操作
1.打開控制面板,找到“系統(tǒng)與安全選項(xiàng)”
2.找到“電源選項(xiàng)”,點(diǎn)擊,“更改電源按鈕功能”
3.點(diǎn)擊“更改當(dāng)前不可用設(shè)置”
4.取消“啟用快速啟動(推薦)”
5.保存更改,關(guān)閉窗口,在Windows上的設(shè)置完成
2.2在bios上設(shè)置的相關(guān)操作
博主使用的主板是微星主板,這里設(shè)置以微星主板為例(各大主板操作應(yīng)該相差不大)
1.進(jìn)入bios,如果是高級模式則進(jìn)行下一步操作,如果不是則按“F7”進(jìn)入高級模式,高級模式如下圖
2.單擊SETTINGS,進(jìn)入SETTINGS設(shè)置,選擇高級選項(xiàng)
3.點(diǎn)擊“喚醒事件設(shè)置”
4.將“即時(shí)(RTC)鬧鈴喚醒”更改為允許;“日期(月份)鬧鐘”設(shè)置為0表示為每天,設(shè)置為1表示為每月1日,2為2日,依次類推,最大為31日;后面的“時(shí)分秒”則設(shè)置為在某天的幾點(diǎn)幾分幾秒(時(shí)間格式為24小時(shí)制)進(jìn)行喚醒操作。博主的設(shè)置如下圖,表示每天早上7點(diǎn)0分0秒進(jìn)行喚醒操作
5.點(diǎn)擊右上角“X”,選擇保存并退出,bios上的相關(guān)操作到這里設(shè)置完成
3.校園網(wǎng)自動登錄程序
博主學(xué)校的校園網(wǎng)認(rèn)證采用的是網(wǎng)頁認(rèn)證,認(rèn)證請求方式為GET。具體查看校園網(wǎng)認(rèn)證請求方式可以打開瀏覽器(Chrome或則edge瀏覽器都可以),按“F12”打開開發(fā)者模式,打開校園網(wǎng)認(rèn)證頁面。如下圖所示
1.校園網(wǎng)登錄程序如下
需要額外安裝的庫
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 #秒轉(zhuǎn)化為分鐘
self.ping_baidu = ping_baidu
self.ping_campus = ping_campus
def __call__(self):
self.run_loop() # 第一次執(zhí)行
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("本機(jī)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("校園網(wǎng)連接正常!")
else:
if not flag_campus :
print("無法訪問校園網(wǎng)登錄頁面, 請檢查是否連接網(wǎng)絡(luò)!")
elif not flag_baidu :
print("校園網(wǎng)未登錄, 嘗試重連中...")
relogin = self.login()
time.sleep(3) # 等待3秒鐘再判斷是否登錄成功
if relogin and self.ping_network(ping_baidu):
print("校園網(wǎng)已登錄")
else: print("校園網(wǎng)登錄失敗")
time.sleep(self.delay_time)
if __name__ == '__main__':
userId = "++++" #校園網(wǎng)賬號
password = "++++" #校園網(wǎng)密碼
delay_time = 360 #360分鐘后判斷是否需要重連
ping_baidu="baidu.com" #百度
ping_campus="++++++" #校園網(wǎng)認(rèn)證頁
network = Network(userId, password, delay_time, ping_baidu, ping_campus)
network()
2.主函數(shù)中userid為自己的校園網(wǎng)賬號;password為自己的校園網(wǎng)密碼;ping_campus為檢測電腦是否連接到互聯(lián)網(wǎng)的網(wǎng)址,可以替換為任一國內(nèi)互聯(lián)網(wǎng)網(wǎng)址(bilibi.com之類);ping_campus為自己學(xué)校的校園網(wǎng)認(rèn)證頁網(wǎng)址
if __name__ == '__main__':
userId = "++++" #聯(lián)通加上%40unicom,電信加上%40telecom,移動加上%40Mobile
password = "++++"
delay_time = 360 #360分鐘后判斷是否需要重連
ping_baidu="baidu.com" #百度
ping_campus="++++++" #校園網(wǎng)認(rèn)證頁
network = Network(userId, password, delay_time, ping_baidu, ping_campus)
network()
3.ping_network用于測試網(wǎng)絡(luò)連通性
下面代碼為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結(jié)果中是否有100%丟失
if ping_result == 0:
return True
else:
return False
4.獲取學(xué)校服務(wù)器分配的校園網(wǎng)IP地址,其中的headers根據(jù)不同學(xué)??赡苡兴煌?,url為Request URL,可以瀏覽器開發(fā)者模式獲取。對應(yīng)填入即可
ip通過向校園網(wǎng)認(rèn)證頁發(fā)送請求所得到的響應(yīng)提取出來
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("本機(jī)ip:%s" % ip)
return ip
5.登錄函數(shù),與步驟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中選擇終端,輸入以下指令即可生成可執(zhí)行文件
pyinstaller --onefile -w auto_connect.py #auto_connect.py替換成自己命名的名字
4.設(shè)置開機(jī)自啟動
1.右鍵此電腦,管理;選擇“創(chuàng)建任務(wù)”
2.常規(guī)設(shè)置,名稱和描述無所謂,按選項(xiàng)選需要修改成第二項(xiàng)
3.觸發(fā)器,選擇“新建”,“開始任務(wù)”選擇“啟動時(shí)”
4.操作,選擇“新建”,“瀏覽”找到自己生成的可執(zhí)行文件,雙擊,確定
5.點(diǎn)擊確定,就創(chuàng)建好任務(wù)了。以后只要電腦開機(jī),就會自動運(yùn)行程序了文章來源:http://www.zghlxwxcb.cn/news/detail-806183.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-806183.html
到了這里,關(guān)于電腦定時(shí)開機(jī)及校園網(wǎng)自動登錄設(shè)置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!