对于技术支持团队来说,很大一个优化工作的方向是从无序纷乱的日常线上问题处理和客户支持的过程中梳理事务、整理 SOP(标准流程),然后从 SOP 中提炼出各类可以被自动化的场景需求。
然而从「混乱-->标准-->自动化」的过程是比较反直觉的。因为重复于一些自己熟悉的工作流程、动作会给人带来安全感,这种安全感很容易使人安于当前的工作现状。因此很难跳出圈子来去分析和观察一些工作内容和流程是不是可以被优化。
在有赞,除了鼓励对接线上问题和商家的小伙伴有效能改进的意识,我们也有专门的角色去分析和提炼日常工作中的可以被自动化完成的工作。机器人流程自动化(RPA)相关的技术,就是我们其中的一个探索和应用方向。
RPA 这个话题,我们在技术支持公众号已经聊过很多次了,感兴趣的话可以继续点击下方链接或者搜索公众号推文重新回顾一下它们:
有赞技术支持团队的 RPA 选择了借助开源工具,进行轻量化自研,我们使用了比较容易上手,且库包及其丰富的的 Python 语言作为自研 RPA 工具的技术栈。
模拟人类与电脑软件的交互有两大类方法:
借助浏览器的 WebDriver 协议,可以自动化实现浏览器的各类操作,包括输入、点击、跳转等等。有赞 RPA 的绝大部分功能都是通过使用 WebDriver 协议的库来实现的,代表性的开源库有:playwright、puppeteer、selenium 等。有赞技术支持公众号曾经有过介绍:RPA 在有赞技术支持团队的实践
程序控制键盘键入、鼠标移动点击、剪贴板复制粘贴、屏幕坐标截图等等常见的动作来实现自动化。这类自动化实际上已经不仅仅限于浏览器方面的操作了。在本地安装的其他软件都可以通过编写控制键鼠的流程来实现自动化。
不同于往日的 RPA 介绍文章,这次主要用一个例子来识别自动化的场景,然后借助 pyautogui 这个开源库,去控制键盘和鼠标,用简单的编码去实现一个自动化工具。
场景举例
github 提供了一个 trending 页面,小赞作为一个开源项目的爱好者,经常去这个页面看一下当前的热门项目,希望能及时关注到有意思的项目(实际上 github 是提供了 trending 的 Email 通知服务的,但我们假设目前没这个服务)。
这样一个小的场景,其实也是有自动化的空间的。比如打开浏览器到搜索到自己想要的信息这一部分内容,操作的流程和步骤都是固定的。是可以交给自动化程序做,而小赞只要定时接收由程序获取到的消息就好。
功能拆分
既然是模拟人类的动作,那么一些操作就很好拆分了,举个例子:「在浏览器登录 github 账号」这个动作,就是
在浏览器输入 github URL
在浏览器 tab 到用户名框,输入用户名
在浏览器 tab 到密码框,输入密码
在浏览器 tab 到「sign in」按钮,点击登录。
这里面用到的一些键盘鼠标动作,在 pyautogui 中都是有现成的组合键。所以实现起来很方便。比如:
# 按一次 tab 按键
pyautogui.press("tab")
# 按一次组合按键:command + c
with pyautogui.hold('command'):
pyautogui.press("c")
# 按一次组合按键:command + v
with pyautogui.hold('command'):
pyautogui.press("v")
这样就是一个常见的组合按键 command(ctrl)+ c 和 command(ctrl)+ v 的复制粘贴动作。
因此,我们在代码实现自动化的过程中,其实就是用代码翻译一下这个操作流程,来实现和人力操作一样的结果。除了鼠标点击,chrome 自带的快捷键也非常有助于页面的定位,比如 command + L 就可以直接跳转到浏览器的地址栏。比手动通过屏幕坐标更加方便。更多的快进键还可以参考 chrome 的用户文档:chrome 快捷键。
此外,操作系统也有很多快捷键,比如 macOS 的ctrl + space 可以呼出 spotlight 然后输入App 名字切换到新的App 上进行操作(个人设置)。
借助系统和 chrome 的很多快捷键,我们也能极大的提升键鼠自动化的效率。
最后我们再整理一下整个操作流程,整体的操作动作主要有:
鼠标点击屏幕坐标。
键盘按键输入(键盘组合键输入)
屏幕截图。
切换应用,粘贴截图,发送消息。
最后,我们将这个简单的例子通过系统自带的定时任务比如:crontab ,根据自己的需要定时执行就行,这样小赞每天无需登录 github,就能在特定的时间收到想要的信息了。
附示例工具的所有代码:https://github.com/binbinah/autoDemo