本文最初是为了开机自动登录某论坛进行签到所写,但为了防止扰乱论坛正常使用,仅介绍自动登录校园网脚本。
考虑到仅需要开机登录校园网,因此此处并未给出注销的代码。
下面上代码:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import base64
from os import getenv
username = getenv('IUSER')
password = getenv('PASSWORD')
domain = getenv('DOMAIN')
passwd = base64.b64encode(password.encode('utf-8')).decode()
login = 'http://a.nuist.edu.cn/index.php/index/login'
headers = {'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer' : 'http://a.nuist.edu.cn/'}
loginData = {'domain' : domain,
'enablemacauth' : 0,
'password' : passwd,
'username' : username
}
s = requests.session()
checkinfo = s.get('http://www.baidu.com')
if checkinfo.text.find(domain) > 0:
getinfo = s.post(login, data = loginData, headers = headers)
cookie = {'PHPSESSID' : s.cookies.values()[0],
'sunriseUsername' : username,
'sunriseDomain': domain,
'think_language': 'zh_CN'}
print(getinfo.json().get('info'))
elif checkinfo.text.find('www.baidu.com'):
from datetime import datetime
tiurl = 'http://a.nuist.edu.cn/index.php/index/init?'
tiinfo = s.get(tiurl)
timearary = datetime.utcfromtimestamp(tiinfo.json().get('logout_timer'))
print('网络已连接:%s.' % timearary.strftime('%H:%M:%S'))
else:
print(checkinfo.text)
下面讲一下各段代码:
首先,加载 requests库,用于实现 http 通信,登录网页使用base64算法对密码进行了编码,加载base64 库用于对密码进行编码, 从 os 库中加载 getenv 获取系统环境变量。
import requests
import base64
from os import getenv
username = getenv('IUSER')
password = getenv('PASSWORD')
domain = getenv('DOMAIN')
有一点要注意:DOMAIN 可以为 NUIST,CMCC, ChinaNet, Unicom, 分别对应 南京信息工程大学, 中国移动,中国电信, 中国联通。
以下分别为 登录页 URL,通信headers及登录时所需要的信息。
login = 'http://a.nuist.edu.cn/index.php/index/login'
headers = {'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0',
'Referer' : 'http://a.nuist.edu.cn/'}
loginData = {'domain' : domain,
'enablemacauth' : 0,
'password' : passwd,
'username' : username
}
建立 session,这里首先检查一下是否已经联网(百度除了可以被 ping 外,也可以检查是否联网)。如果已经联网了,将给出已经联网的时长。
s = requests.session()
checkinfo = s.get('http://www.baidu.com')
if checkinfo.text.find(domain) > 0:
getinfo = s.post(login, data = loginData, headers = headers)
cookie = {'PHPSESSID' : s.cookies.values()[0],
'sunriseUsername' : username,
'sunriseDomain': domain,
'think_language': 'zh_CN'}
print(getinfo.json().get('info'))
elif checkinfo.text.find('www.baidu.com'):
from datetime import datetime
tiurl = 'http://a.nuist.edu.cn/index.php/index/init?'
tiinfo = s.get(tiurl)
timearary = datetime.utcfromtimestamp(tiinfo.json().get('logout_timer'))
print('网络已连接:%s.' % timearary.strftime('%H:%M:%S'))
else:
print(checkinfo.text)
2. 选择 高级系统设置 选项,然后在 高级 中 找到 环境变量 选项,在 系统变量 栏下选择 新建, 依次设置好三个环境变量即可
注: 设置环境变量变量值时不需要添加引号
3. 找到 控制面板>系统和安全>管理工具>计划任务, 可以看到下图所示内容
4. 选择 创建基本任务
设置启动程序时,我使用的是 Anaconda3,所以此处设置为 ipython.exe, 可根据安装的相应版本设置。参数为要执行的脚本路径,起始于为 ipython.exe的路径,注意最后的 \ 不需要添加。
5. 为了让网络中断后自动重连,设置脚本重复执行时间
找到 触发器, 然后选择 编辑 > 高级选项 然后根据需要设置重复间隔即可。
注: 常规 中选择 不管用户是否登录都运行
历史记录 可以查看每次任务运行情况。