基于 Playwright 的校园/企业网关自动登录脚本,支持掉线探测、自动重连、开机自启与周期性保活。适用于 macOS 和 Windows。
- 联网探测:多探针判定,已在线时静默退出。
- 自动登录:填写账号/密码并点击登录,成功后再次探测外网。
- 保活巡检:默认每 2 分钟一次(macOS 使用 launchd,Windows 使用任务计划程序),掉线自动重登。
- 自启:macOS 的 launchd 与 Windows 任务计划程序均支持登录后自动运行。
- 排障:日志 + 异常截图/HTML。
Auto_Wifi_Connect/
├─ portal-login.sh # macOS bash 入口,探测/调度 Playwright 登录
├─ portal-login.mjs # Playwright 脚本(登录逻辑)
├─ package.json / lock # 依赖声明(playwright)
├─ .env.example # 环境变量模板(账号、密码、门户地址)
├─ deploy.sh # 一键部署(写 plist+启动 launchd)
├─ undeploy.sh # 一键卸载(停止并移除 plist)
├─ portal-login.ps1 # Windows PowerShell 入口,探测/调度 Playwright 登录
├─ deploy.ps1 # Windows 任务计划程序部署
├─ undeploy.ps1 # Windows 解除部署
├─ .gitignore # Git 忽略配置
├─ LICENSE # ISC 许可证
├─ ms-playwright/ (可选) # Playwright 浏览器缓存,拷贝可省下载
├─ node_modules/ (可选) # 依赖目录,拷贝可省 npm install
└─ README.md
- macOS(Apple Silicon/Intel)或 Windows 10/11
- Node.js ≥ 18
- 可访问 npm(如未拷贝
ms-playwright//node_modules/)
- 将本目录放到目标机,推荐路径:
~/Library/AutoWiFi/Auto_Wifi_Connect。 - 确保脚本可执行(首次执行前运行一次):
cd ~/Library/AutoWiFi/Auto_Wifi_Connect chmod +x portal-login.sh deploy.sh undeploy.sh
- 安装 Node.js(如缺失):
HOMEBREW_NO_AUTO_UPDATE=1 brew install node(或用 nvm 安装,需 ≥18)。 - 安装依赖(如未拷贝
node_modules/):cd ~/Library/AutoWiFi/Auto_Wifi_Connect npm install
- 浏览器内核:若未拷贝
ms-playwright/,deploy.sh会自动运行npx playwright install chromium(需联网,安装目录固定为./ms-playwright)。
-
复制模板并填写:
cd ~/Library/AutoWiFi/Auto_Wifi_Connect cp .env.example .env # 编辑 .env 写入你的账号/密码/门户地址
.env字段说明:PORTAL_ACCOUNT:账号(建议用引号包裹)PORTAL_PASSWORD:密码(建议用引号;含$时务必用单引号或转义)PORTAL_LOGIN_CANDIDATES:门户地址,逗号分隔多个 URL(建议用引号包裹;不同公司网关请填真实地址)。AUTO_WIFI_PROJ:可选,自定义工作目录(默认~/Library/AutoWiFi)。AUTO_WIFI_ENV:可选,自定义 .env 路径。 如密码包含$等特殊字符,请用单引号包裹:PORTAL_PASSWORD='p@ss$word'
-
也可直接导出环境变量(无需 .env):
export PORTAL_ACCOUNT=xxx export PORTAL_PASSWORD=yyy export PORTAL_LOGIN_CANDIDATES="https://portal.xx.com/,https://portal.xx.com/login"
-
或直接修改
portal-login.mjs内的占位值(仓库默认已清空)。
- 手动测试:
cd ~/Library/AutoWiFi/Auto_Wifi_Connect ./portal-login.sh tail -n 50 portal-login.log
DEBUG=1 ./portal-login.sh可打开 bash -x 追踪。
-
部署(安装依赖、校验 .env、写入并启动 launchd,默认 120 秒巡检):
cd ~/Library/AutoWiFi/Auto_Wifi_Connect ./deploy.sh
如果首次生成
.env但未填写账号/密码,脚本会提示并退出。 -
解除(停止并移除 plist):
cd ~/Library/AutoWiFi/Auto_Wifi_Connect ./undeploy.sh
环境要求:Windows 10/11、Node.js 18 或更高版本。请在 Windows 机器上单独安装依赖和 Chromium,不能直接复用 macOS 的 node_modules 或 ms-playwright 目录。
-
将项目放到一个固定路径,例如
C:\AutoWiFi\Auto_Wifi_Connect;复制.env.example为.env,填入账号、密码和门户地址。 -
打开 PowerShell,进入项目目录后部署:
.\deploy.ps1
如果本机策略阻止执行脚本,可仅对本次 PowerShell 会话执行:
Set-ExecutionPolicy -Scope Process Bypass .\deploy.ps1
部署脚本会安装依赖和 Chromium,并创建名为
AutoWiFi Portal Login的任务计划:用户登录后按每 2 分钟巡检一次。可通过-IntervalMinutes 5调整为 5 分钟。 -
手动测试与查看日志:
.\portal-login.ps1 Get-Content .\portal-login.log -Tail 50
-
解除部署:
.\undeploy.ps1
如需手工配置,可参照下列 plist(与 deploy.sh 生成内容一致):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.autowifi.portal-login</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>-lc</string>
<string>cd ~/Library/AutoWiFi/Auto_Wifi_Connect && ./portal-login.sh</string>
</array>
<key>StartInterval</key><integer>120</integer>
<key>RunAtLoad</key><true/>
<key>StandardOutPath</key><string>/Users/$(whoami)/Library/AutoWiFi/Auto_Wifi_Connect/launchd.out.log</string>
<key>StandardErrorPath</key><string>/Users/$(whoami)/Library/AutoWiFi/Auto_Wifi_Connect/launchd.err.log</string>
</dict>
</plist>加载/启动:
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/com.autowifi.portal-login.plist
launchctl enable gui/$UID/com.autowifi.portal-login
launchctl kickstart -k gui/$UID/com.autowifi.portal-login停止/卸载:
launchctl bootout gui/$UID ~/Library/LaunchAgents/com.autowifi.portal-login.plist- 门户 URL:通过
PORTAL_LOGIN_CANDIDATES配置,适配不同公司网关。 - 表单匹配:脚本尝试常见字段(
textbox、input[name=username]、input[type=text]、input[type=password]、input[name=pwd]等);若仍不兼容,可在portal-login.mjs中微调选择器。
- 日志:
portal-login.log,实时查看tail -f portal-login.log。 - 异常调试:自动生成
debug-*.png/debug-*.html。 - bash 追踪:
DEBUG=1 ./portal-login.sh。 - 如出现 “Executable doesn't exist ... npx playwright install”:
确保目录
cd ~/Library/AutoWiFi/Auto_Wifi_Connect PLAYWRIGHT_BROWSERS_PATH=$PWD/ms-playwright npx playwright install chromium
ms-playwright存在且包含下载的 chromium。 - 若提示 “missing account or password”:确保
.env放在项目目录Auto_Wifi_Connect/.env,或设置AUTO_WIFI_PROJ指向该目录。
- 建议使用
.env/ 环境变量存放账号密码,不要将真实凭据提交到公开仓库。 .gitignore已忽略.env、日志与调试文件。
ISC License(见 LICENSE)。