-s
指定,作用不大。 1
EscYezi 2019-10-16 08:30:54 +08:00 via iPhone 1
需要写模拟器脚本的话强推 Airtest,我用 Airtest 弄了个明日方舟的脚本,可以参考下
https://github.com/yeziyezi/airtest-arknights |
2
ctro15547 2019-10-16 08:39:48 +08:00
adb shell screencap 截图本来就很慢 ,试试模拟按键截图。真机用 tap 也差不多 1 秒左右 。想简单直接按键精灵手机版,脑子都不用就能写。还要啥自行车
|
3
JCZ2MkKb5S8ZX9pq OP @ctro15547 按键精灵不大爱写,小东西还行,稍微复杂点调试起来麻烦。
|
4
javen73 2019-10-16 09:45:33 +08:00
emmm 用触动精灵这个平台不行嘛,我觉得还不错
|
5
JCZ2MkKb5S8ZX9pq OP @javen73 是 touchelf 嘛? lua 的那个?
按键精灵和 touchelf 以前都写过,但是感觉调试不方便,手机上看 log 也麻烦,模拟器连打字有时候都有问题,复制黏贴过去啥的,实在是有点费事儿。两三个点判断一下点点还行,稍微复杂点真的太麻烦。 还是觉得 python 写和调试都比较方便。 |
6
javen73 2019-10-16 09:54:56 +08:00
@JCZ2MkKb5S8ZX9pq #5 是触动精灵,不是触摸精灵。
触动精灵有一个小的 IDE,电脑上可以直接调试手机和模拟器,脚本调试的 log 可以直接显示在 IDE 里面,不用再手机里看 log 的 |
7
JCZ2MkKb5S8ZX9pq OP @javen73 ok,我找找看,谢谢。
|
8
fhvch 2019-10-16 10:32:42 +08:00 1
appium https://github.com/appium/appium 环境比较复杂
uiautomater2 https://github.com/openatx/uiautomator2 环境相对简单 还有 1 楼哥们说的 airtest,这个支持图形点击,做游戏测试比较好,如果只是滑动,点击固定的点的话可以用 uiautomater2 |
9
Troevil 2019-10-16 10:36:14 +08:00
可以试试 大漠挺好用的
|
11
JCZ2MkKb5S8ZX9pq OP |
13
JCZ2MkKb5S8ZX9pq OP @Jirajine 跟 Python 完全没关系,直接命令行也是慢的,早试过了。
|
14
Jirajine 2019-10-16 15:14:44 +08:00 via Android
@JCZ2MkKb5S8ZX9pq 不是说 Python 慢,你那样调用每一条命令都要 adb 通信一次,写成脚本就是手机上原生执行,不用通信了。
|
15
fhvch 2019-10-16 15:33:57 +08:00
#11 装个 fiddler 的证书不行么?
不行的话,就换个代理试试 Charles anyproxy ( https 的话都要装证书) |
16
JCZ2MkKb5S8ZX9pq OP @Jirajine 一样很慢的,好像只有一次性连续输入一系列动作可以这么搞,比如点击五次之类的,能优化一点。
但是如果要图形判断再操作,还是每次都很慢。 |
17
JCZ2MkKb5S8ZX9pq OP @fhvch 证书当然装了,安卓 4.2 没问题,可能安卓 7 改了啥东西吧。
而且我的需求只是代理,并不需要抓包,所以想知道有没有更简单的方法,省得多开一个抓包的。 |
18
fhvch 2019-10-16 16:00:36 +08:00 1
#17
Android7.0 及以上的系统中,每个应用可以定义自己的可信 CA 集,默认情况下,应用只会信任系统预装的 CA 证书,而不会信任用户安装的 CA 证书, 所以 Android7.0 及以上的系统就算安装证书也不会被信任, 但还是可以其他办法解决: 1.修改 APP 配置文件,直接修改 APP 的 android:networkSecurityConfig 属性,前提是可以获取到 APP 的源码。 2.将证书安装到系统证书中,需要 root。(详情请查看:https://testerhome.com/articles/17746 ) |
19
JCZ2MkKb5S8ZX9pq OP 暂时先用了 uiautomator,代码改动量很小。
截屏还是需要 1s 左右,估计跟 png 压缩有关系。点击是快了很多。 [10-16 17:42:39] Click used -------------- 0.148 [10-16 17:42:40] Screen capture used ----- 1.131 [10-16 17:42:40] 关卡选择 [10-16 17:42:40] Click used -------------- 0.152 [10-16 17:42:41] Screen capture used ----- 0.611 [10-16 17:42:41] 出击 [10-16 17:42:41] Click used -------------- 0.148 [10-16 17:42:42] Screen capture used ----- 0.714 [10-16 17:42:42] 其它 [10-16 17:42:42] Click used -------------- 0.142 [10-16 17:42:43] Screen capture used ----- 0.712 [10-16 17:42:43] 其它 [10-16 17:42:43] Click used -------------- 0.158 [10-16 17:42:43] Screen capture used ----- 0.634 [10-16 17:42:43] 其它 [10-16 17:42:44] Click used -------------- 0.146 [10-16 17:42:44] Screen capture used ----- 0.593 |
20
locoz 2019-10-16 17:51:27 +08:00
@JCZ2MkKb5S8ZX9pq #11
@JCZ2MkKb5S8ZX9pq #17 是系统级的 SSL Pinning,很好解决,可以看一下我之前写的这篇文章: https://zhuanlan.zhihu.com/p/56397466 |
21
locoz 2019-10-16 17:52:58 +08:00
做游戏自动化脚本的话,其实 Android 端的自动化测试工具会比较好用些,比如 Android 版按键精灵,它还可以加扩展实现它本身没有实现的功能。
|
22
JCZ2MkKb5S8ZX9pq OP @fhvch
uiautomator 如果一段时间没有命令输入,好像会被杀后台? 运行的时候会自动重新 init,挺费时间的,请问你了解这个现象吗? [10-16 21:11:12] uiautomator2.GatewayError(gateway error, tim ed 0.0s), retrying in 3.0 seconds... [D 191016 21:11:15 __init__:627] Product-brand: samsung [D 191016 21:11:17 __init__:645] uiautomator is starting ... [D 191016 21:11:18 __init__:645] uiautomator is starting ... [D 191016 21:11:19 __init__:645] uiautomator is starting ... [D 191016 21:11:20 __init__:645] uiautomator is starting ... [D 191016 21:11:21 __init__:645] uiautomator is starting ... [D 191016 21:11:22 __init__:645] uiautomator is starting ... [D 191016 21:11:23 __init__:645] uiautomator is starting ... [D 191016 21:11:24 __init__:645] uiautomator is starting ... [D 191016 21:11:25 __init__:645] uiautomator is starting ... [D 191016 21:11:26 __init__:645] uiautomator is starting ... [I 191016 21:11:30 __init__:661] uiautomator back to normal |
23
JCZ2MkKb5S8ZX9pq OP 另外每次到这段代码,uiautomator 必定出现 back to normal,好奇怪。
代码: log.info('探测') d.click(540, 880) # 点击探测 time.sleep(5) rx, ry = randint(80, 640), randint(310, 870) log.info(f'搜索 {rx} {ry}') d.click(rx, ry) time.sleep(10) battleTm = Timer() # 开始战斗计时 输出: [10-16 21:50:18] 探测 [10-16 21:50:23] 搜索 606 841 C:\Users\chuan\AppData\Local\Programs\Python\Python37-32\lib te-packages\uiautomator2\__init__.py:460: RuntimeWarning: ui omator2 is not reponding, restart uiautomator2 automatically stacklevel=1) [10-16 21:50:23] uiautomator2.GatewayError(gateway error, ti used 0.0s), retrying in 3.0 seconds... [D 191016 21:50:26 __init__:627] Product-brand: samsung [D 191016 21:50:29 __init__:645] uiautomator is starting ... [I 191016 21:50:33 __init__:661] uiautomator back to normal 好奇怪哦,不知道是不是这里 sleep(5)的影响,但后面暂停还要久都没事。 |
24
fhvch 2019-10-17 10:15:49 +08:00
@JCZ2MkKb5S8ZX9pq
如果这段代码每次执行都是必现这个问题的话 可以去 github 提个 issue 如果不是的话,那就得分析下了。。(你操作的是游戏 app 是不是,界面是动态的是不是?我猜可能问题就出在这里了) |
25
JCZ2MkKb5S8ZX9pq OP |