Mac自动化——自动登陆公共Wi-Fi

由于时效问题,该文某些代码、技术可能已经过期,请注意!!!本文最后更新于:1 年前

适用场景:经常需要登陆同一个公共Wi-Fi且用户名和密码不变的

一般情况登陆公共Wi-Fi后会弹出一个登陆界面供用户登陆,输入用户名和密码即可上网。

这里介绍两个自动化方法。还有一个是使用hammerspoon+lua+applescript(参考:https://www.jianshu.com/p/59e1334b0a5e)。最后这个一看就很麻烦。

虽说是介绍两个其实根本上也算一个吧。主要都是使用脚本进行登陆。只是执行的方法不太一样。

这里有个前提,就是需要关闭Captive Network Assistant。原因如下:
当Captive Network Assistant弹出的时候,网络会被拦截,这个英语翻译成中文的意思强制网络助理。只要有这个弹窗在,网络都会被终止(没有实际性的原理,亲测是网络被拦截)
关闭方法:

1
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean false

关闭之后就没有什么阻止我们登陆了。

登陆脚本:

1
2
3
4
5
6
wifiName=$(networksetup -getairportnetwork en0 | cut -f2 -d':')
# echo $wifiName
if [ $wifiName = "xxxx" ]; then
# 使用curl发送登陆请求
curl xxxx
fi

保存后并添加执行权限。

方法1: 比较简单,就是更改上述脚本的默认打开方式为终端(必须是mac自带的终端)

然后在系统设置-通用-登陆项里把该脚本添加到登陆时自动打卡。

这样设置之后登陆后便会自动打开终端执行登陆脚本了。不过有一点不完美的就是会多出个终端的窗口。

如何让脚本在后台默默把活干了。

方法2:使用launchctl

具体概念的东西可参考:https://www.jianshu.com/p/0886e1510bbb

  • 首先创建一个后缀为.plist的属性列表文件,例如com.example.myScript.plist,并添加如下内容:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?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.example.myScript</string>
    <key>ProgramArguments</key>
    <array>
    # 这里换成自己的脚本
    <string>/path/to/your/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>
  • 将这个plist文件保存到~/Library/LaunchAgents目录下(用户级别)或/Library/LaunchAgents目录下(系统级别),然后执行命令:
    1
    launchctl load ~/Library/LaunchAgents/com.example.myScript.plist
    下次登陆即可在后台自动登陆Wi-Fi了。

另外:sleepwatcher貌似只能设置睡眠和唤醒后执行的任务,无法做开机登陆的任务。

参考:
https://discussionschinese.apple.com/thread/44410
https://www.jianshu.com/p/0886e1510bbb
https://www.jianshu.com/p/59e1334b0a5e
https://fuzhii.com/2017/10/09/Mac-sleepwatcher/
https://zhuanlan.zhihu.com/p/388287366


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!