前言
你有没有一张清单?记录着日常不顺手的地方,等到一有空闲,一一去攻克它。
编写业务代码是对用户的优化,编写环境代码是对自身工作的优化。时间不可逆,缩短机械操作的时间,可以节省无意义的消耗,拥有更多的自由时间,才能有更多的时间投入与自身成长和环境优化相关的工作中,进而继续寻找优化时间的方法,这是一个良性循环,也是优化时间配置的关键。
这不,头疼的问题来了
公司内网站点使用企业微信鉴权,就是我最头疼的问题。
每当管理后台 Session 一过期,我这个日常工作中手机保持断网的家伙,总得老不情愿地拎起手机 -> 手动密码解锁(戴口罩没法人脸解锁,不方便+1) -> 开启网络 -> 打开企业微信 -> 扫码 -> 关闭网络 -> 锁屏。
如果每次登录耗时 30 秒,一天最少 3 次,一天浪费 1.5 分钟,一个月浪费 33 分钟,惨兮兮。
没有什么事情是一个脚本解决不了的
那首先,我们要来确认下,通过电脑企业微信的方式鉴权是否可行。
第一步:截图
第二步:使用某网站进行二维码提取 url,嗯看起来是个带了有效期 token 校验的 url
直接打开?行不通。
第三步:那换个思路,通过企业微信打开,发送到企业微信的文件助手,再点击打开,鉴权成功!
上面的链接复制粘贴到企业微信重新打开后,实际上带上了鉴权信息:
二维码链接:https://open.work.weixin.qq.com/wwopen/sso/confirm2?k=c38869f5165ee77e
鉴权链接:https://open.work.weixin.qq.com/wwopen/sso/confirm2?k=c38869f5165ee77e&st=7C143B7A13F375CD4EB89CEB7B63077C89E3E5C7252495246FD6C919656F0685EA8BD5D8E90C14B343D50FB23E8534F7C868FF81B91BD75CB9F42B24F00CCC583EA4C47750825EC5D922B45B31290E71E1EE394CA67DD5FEAEB392B6BABD08FCC6C3F21066E1C3AD483092EF936C20AD700EEE4DA36C9E77A4DC4691043C7553E178EDBB83233F260EF85156393CCE65D86682210B3CB4DF7554BE0CEB6425DC&vid=1688850316522424&cst=6F409C81BE505448761730EAF144B83CBC333F44486BA80C3482AE283B5C7C824EE5C87A3B91B75E764338D09410FC6C&deviceid=4c23ac3d-14953d740311&version=3.0.23&platform=mac
那我们思考下自动化脚本可以代替手工完成的步骤,能不能一个指令就自动完成鉴权?
说干就干。
准备工作
- 安装 Keyboard Maestro 9
原理解析
第一步:调用系统剪贴板,保存目标二维码图片
通过 Keyboard Maestro 的「Simulate keystroke」方法可以模拟按下「将所选区域的图片拷贝到剪贴板」的快捷键,我把系统的「将所选区域的图片拷贝到剪贴板」设置为指定快捷键,就可以间接调用系统截图功能啦。
第二步:等待截图完成
「Simulate keystroke」方法在按下快捷键后就已经完成,此时它会继续执行剩下的动作,但此时我们的截图操作还没有完成,所以我们需要让 Action 流阻塞一下。
这里有一个小技巧 —— 通过 Keyboard Maestro 的「Pause Until」方法。
我们在截图时需要按下触控板,然后滑动,再松开。我们让 Keyboard Maestro 一直等待,直至这个滑动再松开的动作完成:
- 暂停,直至鼠标左键按下,此时开始选择截图区域
- 暂停,直至鼠标左键松开,此时完成截图区域的选择,系统也完成了截图
- 等待 0.5 秒,保证截图一定会在剪贴板中
第三步:OCR 二维码,提取 url,发送解析结果通知
这里,我们会借助 ZBar 库,ZBar 是一个开源库,用于扫描、读取二维码和条形码。
通过 Homebrew
安装命令行工具 ZBar : brew install zbar
配置「Execute Shell Script」来执行指定命令行,间接调用 ZBar。在识别完成后发送了一个系统通知,这样就能方便知道识别后的文本是什么。并且自动将结果保存到剪贴板。
第四步:分享到企业微信进行鉴权
很可惜,这一步无论是使用 Maestro 还是 mac 自带的自动操作,都无法实现剪贴板分享到企业微信文件传输助手功能,只能让 Maestro 激活企业微信至前台,手工粘贴一下,如果有小伙伴琢磨出来方法,欢迎留言告诉我。
至此,自动化完成。
后记
- 由于软件开发的特殊性,使得我们在使用工具(软件)的同时,还能创造工具(软件)。
- 在恰当的时候让一切可以自动化的事情自动化。今天的计算机已经完全有能力帮我们做足够多的事情。而现实是,我们往往将那些可以被计算机做的事情揽到自己手中,手工去完成,这个效率又怎么能提高上去呢?
我是 FeelsChaotic,一个写得了代码 p 得了图,剪得了视频画得了画的程序媛,致力于追求代码优雅、架构设计和T 型成长。
欢迎关注 FeelsChaotic 的简书和掘金,如果我的文章对你哪怕有一点点帮助,欢迎 ❤️! 你的鼓励是我写作的最大动力!
最最重要的,请给出你的建议或意见,有错误请多多指正!
本篇完成耗时:瞎折腾的端午假期