写在前面

书接上篇文章的刷初始,即使自己写了脚本简化了工作量,但是这游戏爆率实在难顶,一个好开局遥遥无期,凑巧在群里看到一些云手机里已经提供了对应的脚本,于是租了几个来刷一刷试试,效果确实好很多,效率也翻倍了。

可是一个新的需求出现了,当脚本卡住或刷出满足设定要求的时候会自动停下,我想要第一时间知道,而不是自己手动隔一段时间去查看其状态。

实现需求很简单,隔一段时间截图比对就行,通知就用最实用的发邮件。

基于 PyAndroidControl 这个项目俺写了ScriptAssistan【脚本助手】这个app,点击下载

服务端我这边设置的是每五分钟检测一次,抽空扔Github上,到时候也可以自行搭建

图标长这样

架构设计

简单做了个图,大概如下图所示,基本大架构没怎么变。 主要新增了些Server端的处理逻辑,安卓端规范POST请求以及权限使用的优化。 架构图

使用方法

制作了个gif以便于直观展示,悬浮窗控制监控是否开启,软件需要root权限。

软件第一栏填写服务端地址,可以直接用我的http://sa.yuk7.com,每五分钟检测一次。 第二栏填写该设备标示,用于在邮件提醒中多设备区分。 第三栏填写通知邮箱,第一栏如果用我提供的则会用inform # yuk7.com(#»@) 发送提醒邮件,不要屏蔽即可。

邮件提醒效果展示 邮件提醒

开发札记

广为流传的错误代码

Python中实现图像对比发现很多都是用 这篇博客中的方法 核心代码如下:

from PIL import Image
from PIL import ImageChops 
image_one = Image.open(path_one)
image_two = Image.open(path_two)
diff = ImageChops.difference(image_one, image_two)

然而这广为抄袭到处转载的代码,实际上是错误的,大部分情况下不管怎么判断都会认定是相同的一张图,需要改成:

...
image_one = Image.open(path_one).convert('RGB') 
image_two = Image.open(path_two).convert('RGB')
...

类似的Stackoverflow也有讨论,大概是原方法是通过有无像素来判断是否为同一张图。而并非判断像素颜色。

PS:Google这简中搜索质量属实不行,这几个月内容农场仍在泛滥,简中一搜一大堆XX知识网在首页,这里分享一篇专门介绍和应对内容农场的文章 清理「内容农场」,还你清爽的 Google 中文搜索体验

Google对简中确实缺少重视,搜索用英文体验更好,麻了,以后试试英文写写博客?笑。

变量命名再也不纠结

CODELF主页上的图

CODELF 这个网站可以让你查询单词来看到GitHub上同行们都是怎么命名的,挺有意思。

Ubuntu部署Flask WSGI

参考Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署 这里只简单提及一些关键点,日后会专门写一篇详细的

如果pip安装Gevent时编译失败,则安装以下组件即可

sudo apt-get install python3 python-dev python3-dev \
     build-essential libssl-dev libffi-dev \
     libxml2-dev libxslt1-dev zlib1g-dev \

这里WSGI用的是Gunicorn和Gevent的组合 使用Supervisor管理进程

# /etc/supervisor/conf.d/ScriptAssistant.conf
[program:ScriptAssistant]
command=/home/ubuntu/ScriptAssistant/venv/bin/gunicorn -w 4 -b 127.0.0.1:2333 -k gevent wsgi:app
directory=/home/ubuntu/ScriptAssistant/
autorestart = true
startsecs = 5
startretries = 3
user = root
nodaemon = false

配置nginx开机自启

sudo systemctl enable nginx

添加每天零点删除screenshots文件夹脚本clean_screenshots.sh

# ~/ScriptAssistant/clean_screenshots.sh
find . -type d -name "screenshots" -exec rm -rf {} \;
chmod u+x ./clean_screenshots.sh    # 配置可执行
crontab -e
0 0 * * *  ~/ScriptAssistant/clean_screenshots.sh > /dev/null 2>&1 # 每天零点执行