… 等我写完这个脚本,刷到了372分, 才发现Android的大佬们早就有一套操作了, 似乎想法都差不多,我的环境是在ios-mac上执行
安装环境
WebDriverAgent
https://github.com/facebook/WebDriverAgent
facebook开源的自动化驱动框架, 调的私有Api,所以执行的速度应该说是最准的,这也是这套玩法的关键点
需要一些环境依赖,代码clone下来之后, 得在项目路径下执行下:
1 2 3 4 5
|
./Scripts/bootstrap.sh
|
xcode打开,选择Target是WebDriverAgentRunner,Test到手机(签名用个人Appid就可以,然后Test到手机后,信任一下证书)

facebook-wda
https://github.com/openatx/facebook-wda
wda,一个python脚本,配合WebDriverAgent使用,便捷的安装方法:
1 2 3 4 5
|
sudo pip install --pre facebook-wda
|
测试下环境
用个终端端口转发下(iproxy 可以通过 brew install usbmuxd安装):
用以下命令启动下WebDriverAgent,你需要改下下方的name=你自己的手机名:
1 2 3 4 5
|
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS,name=YourDeviceName' test
|
看到输出这个就启动正常了:

另开个终端,启动下python,如下测试下:

脚本实现:
git代码地址-python3.6.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
IMAGE\_PLACE = '/tmp/screen.png'
each\_pixel\_d = 0.00190
c = wda.Client()
s = c.session('com.tencent.xin')
input("请自行切换到游戏里面的界面,回车即可开始")
def change\_to\_duration(position\_list):
"""
勾股定理 求d=C=开根号(A^2+B^2)
"""
if not position\_list:
return
x1,y1 = position\_list\[0\]
x2,y2 = position\_list\[1\]
the\_d = math.sqrt(math.pow(y2 - y1, 2) + math.pow(x2 - x1, 2))
return float('%.3f' % (the\_d \* each\_pixel\_d))
if \_\_name\_\_ == '\_\_main\_\_':
while 1:
x = c.screenshot(IMAGE\_PLACE)
if not os.path.exists(IMAGE\_PLACE):
continue
\# time.sleep(1) #图片就算在了,渲染还没结束,这1秒阻塞就给了吧,或者不给,为渲染正常的以下方阴影为准
pl.imshow(pl.array(Image.open(IMAGE\_PLACE)))
position\_list = pl.ginput(2,timeout=2147483647)
pl.ion()
duration = change\_to\_duration(position\_list)
pl.ioff()
if duration and os.path.exists(IMAGE\_PLACE):
s.tap\_hold(200, 200, duration=duration)
os.remove(IMAGE\_PLACE)
|
首先进入到游戏页面,截图到本地
使用plt.imshow展示这张图片, 通过plt.ginput我们点击的两个点会被记录下来,
我们通过分析这两个点, 得到小人到对面物体的地点:
嗯, 勾股定理:

change_to_duration中先勾股计算的距离d, 然后乘以每个像素点的对应的秒, each_pixel_d = 0.00190是我目前计算到的.应该算还挺准.最后这个方法返回的是按键时间.
而最终操作的方法:
s.tap_hold(200, 200, duration=duration) durantion就是change_to_duration计算出的按键时间.
直接使用
启动后只需要做三步, 点击小人的底部,点击前方物体的中心,然后关闭图, 嗯就可以了, 耐心点,还是可以在朋友圈装一下下的.
