CAU校园网接路由器(备忘)
校园网是30元包月不限流量,3人拼,每人每月10元
1.路由器型号
TP-Link AX3000,京东购入,134.5,因为我们是实验室3个人拼,所以一个人不超过50元
2.路由器安装流程
拿到手接通电源,直接插上网线就行,一般实验室到处都是网口,但是我不知道宿舍可以用吗
网页输入10.3.191.9就会弹出自动跳转跳转有线网登录界面,输入学号密码登录即可
农大校园网连手机经常会掉,无感知绑定也没有用,所以问了一下我师兄他说写个python脚本就行。
3.python脚本使用方法
文件名:campus_autologin.py
存放位置:我是存放到了桌面D:\Users\Administrator\Desktop\
3.1 配置虚拟环境(就第一次安装的时候配置就行)
(一般学计算机的都默认有anaconda和🪜就不讲这个了,其实我也不知道是不是一定需要🪜,直接说命令了)
conda create-nnetloginpython=3.11-yconda activate netlogin pipinstallplaywright playwrightinstallchromium找到后台运行需要的pythonw的路径
where pythonw输出结果:(netlogin) C:\Users\Administrator>where pythonw C:\Users\Administrator\.conda\envs\netlogin\pythonw.exe(有用) C:\Users\Administrator\AppData\Local\Programs\Python\Python311\pythonw.exe
3.2 首次测试
step1:打开anaconda prompt,输入上述5行命令(激活环境)
step2:把脚本的L37改成False测试(这个好像是可以可视化看到登录过程,后续改成True就不看了)
step3:把校园网注销
step4:运行程序:Anaconda Prompt 里:conda activate netlogin→cd /d D:\Users\Administrator\Desktop→python campus_autologin.py。看到浏览器自动登录、日志出现「网络正常 ✓」= 成功。
如果可以成功登录就行,下面开始配置开机自启
4.配置开启自启
把xml文件导入进去
输入Win+R—>taskschd.msc,操作—>导入任务,把xml文件导入进去就行,直接点击确定
在左侧的任务计划程序库里面就能看到校园网自动重连
判断进行有没有在运行,打开任务管理器,输入python,就能查到程序了
要把电脑设置成连接电源电脑不关机不睡眠。
5.代码(附件都有)
代码:
""" 校园网自动重连守护脚本(网页认证版 · Dr.COM 适配) -------------------------------------------------- 定时检测能否上外网,掉线时自动打开登录页、填账号密码、提交重新认证。 只操作可见登录框;用原生 DOM 点击触发登录,绕过元素遮挡/稳定性限制。 首次准备(Anaconda Prompt / 已激活 netlogin 环境): conda create -n netlogin python=3.11 -y conda activate netlogin pip install playwright playwright install chromium 运行: python campus_autologin.py # 前台,能看日志(调试用) pythonw campus_autologin.py # 无窗口后台运行(HEADLESS=True 时) 停止: Ctrl+C """importsysimporttimeimportloggingfromurllib.requestimporturlopen,Requestfromurllib.errorimportURLErrorfromplaywright.sync_apiimportsync_playwright# ============ 配置区:一般只改账号密码 ============LOGIN_URL="http://10.3.38.8"# 你的登录页地址USERNAME="学号"PASSWORD="密码"CHECK_INTERVAL=30# 在线时每隔多久探测一次RETRY_INTERVAL=10# 提交登录后多少秒再复查# 【重要】先用 False 测:能看到浏览器自动填表登录。# 确认成功后改成 True,才能无窗口后台运行、配开机自启。HEADLESS=True# =============================================# 国内连通性检测(返回 204 才算真能上外网;掉线被门户拦截会被重定向,据此识别)CHECK_URLS=["http://connect.rom.miui.com/generate_204","http://connectivitycheck.platform.hicloud.com/generate_204",]logging.basicConfig(level=logging.INFO,format="%(asctime)s %(message)s",datefmt="%H:%M:%S",handlers=[logging.StreamHandler(sys.stdout),logging.FileHandler("campus_autologin.log",encoding="utf-8"),],)log=logging.getLogger()defis_online()->bool:"""访问 generate_204,返回 204 才算真的能上外网。"""forurlinCHECK_URLS:try:req=Request(url,headers={"User-Agent":"Mozilla/5.0"})ifurlopen(req,timeout=5).getcode()==204:returnTrueexcept(URLError,OSError):continuereturnFalsedefwait_visible(page,selector:str,timeout_ms:int=8000):"""在 timeout 内轮询,返回第一个"可见"的匹配元素;跳过隐藏登录框里的重复元素。"""end=time.time()+timeout_ms/1000.0whiletime.time()<end:forelinpage.query_selector_all(selector):try:ifel.is_visible():returnelexceptException:passpage.wait_for_timeout(300)returnNonedefdo_login()->None:"""打开登录页 -> 填可见的账号/密码 -> 原生点击登录按钮(onclick=login)。"""log.info("检测到掉线,尝试重新登录 …")try:withsync_playwright()asp:browser=p.chromium.launch(headless=HEADLESS)page=browser.new_page()page.set_default_timeout(10000)page.goto(LOGIN_URL,wait_until="domcontentloaded")# 等到"可见"的密码框和用户名框(跳过隐藏登录标签页)pw=wait_visible(page,"input[type='password']")user=wait_visible(page,"input:not([type='password']):not([type='checkbox'])"":not([type='hidden']):not([type='submit'])"":not([type='button']):not([type='radio'])")ifnotpwornotuser:log.warning("没找到可见的登录框(可能已是登录状态,或页面没加载出来)")browser.close()returnuser.fill(USERNAME)pw.fill(PASSWORD)log.info("已填入账号密码,准备提交 …")# 提交:优先用原生 DOM click 触发按钮 onclick=login(),绕过遮挡/稳定性检查btn=wait_visible(page,"input[name='0MKKey']",3000)ifbtn:btn.evaluate("el => el.click()")log.info("已触发登录按钮(原生点击)")else:pw.press("Enter")log.info("未找到登录按钮,改用回车提交")page.wait_for_timeout(2500)# 兜底:若仍停留在登录页(还能看到可见密码框),再补一次回车still=wait_visible(page,"input[type='password']",1500)ifstill:log.info("疑似未提交成功,补一次回车兜底")try:still.press("Enter")exceptException:passpage.wait_for_timeout(2000)browser.close()log.info("登录动作已完成,等待网络恢复 …")exceptExceptionase:log.warning(f"登录过程出错:{e}")defmain()->None:log.info("校园网守护已启动,开始监测 …")whileTrue:ifis_online():time.sleep(CHECK_INTERVAL)else:do_login()time.sleep(RETRY_INTERVAL)if__name__=="__main__":try:main()exceptKeyboardInterrupt:log.info("已手动停止")<?xml version="1.0" encoding="UTF-16"?><Taskversion="1.2"xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"><RegistrationInfo><Description>Campus net auto re-login</Description></RegistrationInfo><Triggers><LogonTrigger><Enabled>true</Enabled><Delay>PT30S</Delay></LogonTrigger></Triggers><Principals><Principalid="Author"><LogonType>InteractiveToken</LogonType><RunLevel>LeastPrivilege</RunLevel></Principal></Principals><Settings><MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy><DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries><StopIfGoingOnBatteries>false</StopIfGoingOnBatteries><AllowHardTerminate>true</AllowHardTerminate><StartWhenAvailable>true</StartWhenAvailable><RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable><IdleSettings><StopOnIdleEnd>false</StopOnIdleEnd><RestartOnIdle>false</RestartOnIdle></IdleSettings><AllowStartOnDemand>true</AllowStartOnDemand><Enabled>true</Enabled><Hidden>false</Hidden><RunOnlyIfIdle>false</RunOnlyIfIdle><WakeToRun>false</WakeToRun><ExecutionTimeLimit>PT0S</ExecutionTimeLimit><Priority>7</Priority></Settings><ActionsContext="Author"><Exec><Command>C:\Users\Administrator\.conda\envs\netlogin\pythonw.exe</Command><Arguments>"D:\Users\Administrator\Desktop\campus_autologin.py"</Arguments><WorkingDirectory>D:\Users\Administrator\Desktop</WorkingDirectory></Exec></Actions></Task>
