利用MonkeyRunner(WebDriverAgent)和OpenCV在Android(iOS)设备上自动玩微信跳一跳小游戏。
brew install opencv
,然后按提示进行配置即可pip
安装:pip install -U -r requirements_server.txt
tools/bin/monkeyrunner
platform-tools/adb
pip
安装:pip install -U -r requirements_wda.txt
本项目通过图像处理的方式从屏幕截图中判断棋子当前位置和目标棋盘位置。
项目主要分为两部分:计算跳跃时间的服务端(server.py
)和执行设备控制操作的客户端,分为控制Android设备的MonkeyRunner脚本(monkeyrunner.py
)和控制iOS设备的WDA脚本(wda.py
)。
执行设备控制操作的客户端首先对设备进行截图,然后将截图通过POST方式发送到服务端的HTTP接口上,计算跳跃时间的服务端对截图进行处理并返回对应的按压时间,客户端在设备上模拟点击操作。
在项目根目录下运行 python setup.py build_ext --inplace
即可。该步骤可选,不执行该步骤则关键步骤使用纯Python实现,执行该步骤则使用Cython实现。
在项目根目录下运行 python server.py
即可。服务端默认监听 127.0.0.1:5000
。可选启动参数见 python server.py -h
。
adb devices
,并记录设备ID如 WTKDU1670700000
。monkeyrunner monkeyrunner.py WTKDU1670700000 http://127.0.0.1:5000
。注意将 WTKDU1670700000
替换为上一步记录的设备ID,如果启动服务端时修改了监听端口,则第二个参数也需要对应修改。Press enter to start
后,在微信中打开跳一跳并开始游戏,然后在MonkeyRunner中按下回车键。WebDriverAgentRunner
,并记录设备URL如 http://10.0.0.100:8100
。python wda.py http://10.0.0.100:8100 http://127.0.0.1:5000
。注意将 http://10.0.0.100:8100
替换为上一步记录的设备ID,如果启动服务端时修改了监听端口,则第二个参数也需要对应修改。Press enter to start
后,在微信中打开跳一跳并开始游戏,然后在脚本中按下回车键。本项目做了以下幺蛾子操作。
monkeyrunner.py
和 wda.py
均接受 --jitter JITTER
参数,若设置该值,则会将控制设备按压的时间乘以 [1 - JITTER, 1 + JITTER]
区间内的随机值。可以先尝试 0.01
然后再根据效果调整。
两次跳跃间的等待时间为固定 1.75s
加 0.5s
内的随机值。
CORRECTION_RATIO
变量)。不需要ROOT。但需要电脑安装 Android SDK。只需要命令行工具即可,不需要Android Studio
。
Broken Pipe
该如何处理?Ctrl + C
退出一次MonkeyRunner再重新启动即可。
Press enter to start
后卡住下载2.5.4rc1版本的Jython并 替换 Android SDK 中 tools/lib/jython-standalone-2.5.3.jar
文件。
这个……封号应该是不会的,并没有对微信做任何的hack。不过删榜倒是有可能的。另外刷分太多会没朋友喔。
可以,开一个服务端和多个MonkeyRunner即可。
Ignored shape
提示是WDA默认截图为有损格式所致。可以自行修改代码 WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m 中 - (NSData *)fb_screenshotWithError:(NSError*__autoreleasing*)error
函数里 quality
变量值为 0
。但可能会导致不稳定,原因见该变量注释。
支持,使用 server.py
中的 app
变量即可。配置可在 server_config.py
中修改。
比如用 gunicorn
跑:gunicorn -w 4 -k gevent server:app
。 NOT PRODUCTION READY!