问题背景
校园网连上后需要手动登录认证后才能正常使用
解决方案
模拟请求URL(不好用)
可以看到登录时请求的URL并不简单
这种可以成功,但并不总能成功,主要问题可能是这个请求的URL每次都是变化的,导致会失效,于是更推荐下面的更稳定的方案
通过selenium库模拟登录过程
主要步骤
- 需要下载一个驱动来打开浏览器
我用的是谷歌浏览器驱动,也可以用其他浏览器的驱动前提是你要有对应的浏览器,驱动版本需要对应你的浏览器的版本号 谷歌浏览器驱动下载地址 查看谷歌浏览器版本号(也可以在设置里面查看) - 模拟登录过程
通过selenium库对登录界面的一些元素进行定位,这里面主要就是定位账号密码输入框并进行输入。具体元素的id或者名称可以通过查看登录界面的前端代码得知。
代码
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
login_ip = "http://202.114.177.246"
username = "2010301019"
password = "XXXXXX"
yys = "@cucc"
def login():
options = Options()
options.add_argument('headless')
service = ChromeService(executable_path=r"D:\Desktop\code\Python\xywLogin\chromedriver.exe")
driver = webdriver.Chrome(service=service, options=options)
driver.get(login_ip)
driver.implicitly_wait(3)
try:
driver.find_element(By.ID, "logout")
print("already login")
driver.quit()
return
except Exception as e:
print("no login")
driver.implicitly_wait(1)
driver.find_element(By.ID, "username").send_keys(username + yys)
driver.find_element(By.ID, "password").send_keys(password)
driver.find_element(By.ID, "login-account").click()
sleep(1)
driver.quit()
if __name__ == '__main__':
login()
这样就能实现运行一次脚本在后台自动登录一次校园网了 再结合计算机自带的任务启动程序,就可以实现每次解锁锁屏的时候自动登录校园网
配置每次打开屏幕时自动登录
- 创建任务
- 常规
- 触发器内新建触发器
- 操作里新键操作(此步填入脚本的位置)
- 条件里也可以简单设置一下
运行起来可能会有驱动的黑框,解决方法可以参考这篇文章
http://t.csdn.cn/bijwg
至此可以实现每次解锁电脑时自动登录校园网,未登录状态时锁屏再解锁电脑即可
由于近期校园网总是gank学生(指总是掉线),本来打算实现每次断网都能触发这个脚本实现自动登录,但是没能成功找到一个合适的触发条件,暂时想到的唯一的方法是,间隔几秒检测一下网络状态,这样可以实现,但是需要消耗一定的运行内存来持续检测,也不太推荐用。
代码
from subprocess import run, PIPE
def judge_net_state():
cnt = 1
while True:
r = run('ping www.baidu.com',
stdout=PIPE,
stderr=PIPE,
stdin=PIPE,
shell=True)
if r.returncode:
login()
print('relogin 第{}次'.format(cnt))
print(time.localtime())
cnt += 1
sleep(10)
先写这么多,如果有需要可以再讨论,如果不想看代码想直接白嫖现成脚本软件的也可以与我联系。
|