赞
踩
autojs 是模拟人手点击等手机自动化软件。可用于制作自动化脚本。
1)主要是上划,加一些关键词判断(避免卡在一些“我知道了”页面上划不了)
2)复杂一点的地方是同时支持多个应用,多个页面的ui设计。部分的源代码展示如下,如需要全部代码,请留言或私信
上划代码很简单:
- xishua_common.keeping_swipe = function(local_app_name,run_time,swipe_direction,swipe_time_min,swipe_time_max,swipe_time, click_back, click_words) {
- run_start_time = commonfunc.time_get_seconds()
- //获取当前时间
- commonfunc.log("将一直划动%d分钟", run_time)
- while(commonfunc.time_get_seconds() - run_start_time < run_time * 60) {//运行时间没有到
- if (commonfunc.app_get_current_app_name() == local_app_name) {
- xishua_common.error_handle(click_words) //此函数比较耗时,抖音极速版大概会有20秒左右
- if (swipe_direction == "上") {
- commonfunc.log("上划动")
- swipe(device.width * 0.52, device.height * 0.8, device.width * 0.48, device.height * 0.2, swipe_time)
- } else if (swipe_direction == "下"){
- commonfunc.log("下划动")
- swipe(device.width * 0.52, device.height * 0.2, device.width * 0.48, device.height * 0.8, swipe_time)
- } else if (swipe_direction == "左") {
- commonfunc.log("左划动")
- swipe(device.width * 0.8, device.height * 0.52, device.width * 0.2, device.height * 0.5, swipe_time)
- } else if (swipe_direction == "右") {
- commonfunc.log("右划动")
- swipe(device.width * 0.2, device.height * 0.52, device.width * 0.8, device.height * 0.5, swipe_time)
- } else {
- commonfunc.log("默认上划动")
- swipe(device.width * 0.52, device.height * 0.8, device.width * 0.48, device.height * 0.2, swipe_time)
- }
- }
- sleep_time = random(swipe_time_min, swipe_time_max)
- sleep(sleep_time * 1000)
-
- if (commonfunc.app_get_current_app_name() == local_app_name && click_back == true) {
- back()
- commonfunc.log("返回")
- } else {
-
- }
- }
-
- commonfunc.log(local_app_name+"运行时间到")
-
- }
多ui页面代码如下:
- "ui";
- ui.layout(
- <drawer id="drawer">
- <vertical>
- <appbar>
- <toolbar bg="#FF5c50e6" id="toolbar" title="喜刷" paddingTop="2dp" h="auto" >
- <button bg="#FF00CED1" id="start" layout_gravity="right" textColor="#ffffff" text="开始" style="Widget.AppCompat.Button.Borderless.Colored" w="auto" />
- </toolbar>
- <tabs id="tabs" />
- </appbar>
- <viewpager id="viewpager">
- <frame>
- {/* 第一级 主页*/}
- <scroll>
- <vertical>
- <card>
- <horizontal weightSum="4">
- <Switch id="autoService" text="无障碍服务" checked="{{auto.service != null}}" padding="8 8 8 8" textSize="15sp" layout_weight="2"/><Switch id="floatWindowPermission" text="悬浮窗权限" checked="{{floaty.checkPermission() == true}}" padding="8 8 8 8" textSize="15sp" layout_weight="2"/>
- </horizontal>
- </card>
- <card>
- <horizontal id="global_setting_1" weightSum="4">
- <text text="每个应用运行多久时间" layout_weight="1"/><input id="run_time" inputType="number" hint="分钟" layout_weight="1"/><text text="循环次数" layout_weight="1"/><input id="repeat_time" inputType="number" hint="循环" layout_weight="1"/>
- </horizontal>
- </card>
- <card>
- <horizontal id="click_words" weightSum="2">
- <text text="要点击的关键词" layout_weight="1"/><input id="jump_word" hint="多个关键词以@号分隔" layout_weight="1"/>
- </horizontal>
- </card>
- <card>
- <horizontal id="global_setting_2" weightSum="4">
- <text text="划动间隔最小时间"layout_weight="1"/><input id="swipe_time_min" inputType="number" hint="秒" layout_weight="1"/><text text="最大时间" layout_weight="1"/><input id="swipe_time_max" inputType="number" hint="秒" layout_weight="1"/>
- </horizontal>
- </card>
- <card>
- <horizontal weightSum="4">
- <text text="关闭视频" layout_weight="1"/><checkbox id="shutdown_video" layout_weight="1"/><text text="关闭声音" layout_weight="1"/><checkbox id="shutdown_audio" layout_weight="1"/>
- </horizontal>
- </card>
- <card>
- <horizontal weightSum="4">
- <text id="usage" text="用法说明视频" layout_weight="1"/>
- </horizontal>
- </card>
- </vertical>
- </scroll>
- </frame>
- <frame>
- {/* 第二级 已支持应用*/}
- <scroll>
- <vertical>
- <card id="app_card_0" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_0"/><text id="app_name_0" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_0" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_1" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_1"/><text id="app_name_1" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_1" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_2" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_2"/><text id="app_name_2" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_2" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_3" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_3"/><text id="app_name_3" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_3" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_4" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_4"/><text id="app_name_4" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_4" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_5" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_5"/><text id="app_name_5" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_5" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_6" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_6"/><text id="app_name_6" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_6" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_7" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_7"/><text id="app_name_7" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_7" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_8" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="app_is_run_8"/><text id="app_name_8" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_8" hint="分钟" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- <card id="app_card_9" w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
-
- <horizontal weightSum="4">
- <checkbox id="app_is_run_9"/><text id="app_name_9" text="第一个应用" layout_weight="1"/><text text="运行时间" layout_weight="1"/><input id="app_run_time_9" hint="分钟" layout_weight="1"/>
- </horizontal>
-
- </card>
- </vertical>
- </scroll>
- </frame>
- <frame>
- {/* 第三级 高级用户*/}
- <scroll>
- <vertical>
- <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="cust_app_is_run_0"/><input id="cust_app_name_0" layout_weight="1"/><text text="运行时间" layout_weight="1" /><input id="cust_app_run_time_0" hint="分钟" layout_weight="1"/>
- </horizontal>
- <horizontal weightSum="6">
- <text text="划动方向" layout_weight="1"/><input id="cust_app_direction_0" hint="上下左右" layout_weight="1"/><text text="速度" layout_weight="1"/><input id="cust_app_speed_0" hint="1到10" layout_weight="1"/><checkbox text="是否返回" id="cust_app_click_back_0" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
-
- <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="cust_app_is_run_1"/><input id="cust_app_name_1" layout_weight="1"/><text text="运行时间" layout_weight="1" /><input id="cust_app_run_time_0" hint="分钟" layout_weight="1"/>
- </horizontal>
- <horizontal weightSum="6">
- <text text="划动方向" layout_weight="1"/><input id="cust_app_direction_1" hint="上下左右" layout_weight="1"/><text text="速度" layout_weight="1"/><input id="cust_app_speed_1" hint="1到10" layout_weight="1"/><checkbox text="是否返回" id="cust_app_click_back_1" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
-
- <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="cust_app_is_run_2"/><input id="cust_app_name_2" layout_weight="1"/><text text="运行时间" layout_weight="1" /><input id="cust_app_run_time_0" hint="分钟" layout_weight="1"/>
- </horizontal>
- <horizontal weightSum="6">
- <text text="划动方向" layout_weight="1"/><input id="cust_app_direction_2" hint="上下左右" layout_weight="1"/><text text="速度" layout_weight="1"/><input id="cust_app_speed_2" hint="1到10" layout_weight="1"/><checkbox text="是否返回" id="cust_app_click_back_2" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
-
- <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="cust_app_is_run_3"/><input id="cust_app_name_3" layout_weight="1"/><text text="运行时间" layout_weight="1" /><input id="cust_app_run_time_0" hint="分钟" layout_weight="1"/>
- </horizontal>
- <horizontal weightSum="6">
- <text text="划动方向" layout_weight="1"/><input id="cust_app_direction_3" hint="上下左右" layout_weight="1"/><text text="速度" layout_weight="1"/><input id="cust_app_speed_3" hint="1到10" layout_weight="1"/><checkbox text="是否返回" id="cust_app_click_back_3" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
-
- <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" foreground="?selectableItemBackground">
- <vertical>
- <horizontal weightSum="4">
- <checkbox id="cust_app_is_run_4"/><input id="cust_app_name_4" layout_weight="1"/><text text="运行时间" layout_weight="1" /><input id="cust_app_run_time_4" hint="分钟" layout_weight="1"/>
- </horizontal>
- <horizontal weightSum="6">
- <text text="划动方向" layout_weight="1"/><input id="cust_app_direction_4" hint="上下左右" layout_weight="1"/><text text="速度" layout_weight="1"/><input id="cust_app_speed_4" hint="1到10" layout_weight="1"/><checkbox text="是否返回" id="cust_app_click_back_4" layout_weight="1"/>
- </horizontal>
- </vertical>
- </card>
- </vertical>
- </scroll>
- </frame>
-
- <frame>
- {/* 第四页 调试和帮助*/}
- <scroll>
- <vertical>
-
- </vertical>
- </scroll>
- </frame>
- </viewpager>
- </vertical>
- </drawer>
-
- )
每个支持的应用顺序执行,时间到后退出,进行下一个应用:
- i = 0
- while(i < run_supported_app_array.length) {
- commonfunc.log("运行"+run_supported_app_array[i].name)
- for (j = 0; j < supported_app_array.length; j++) {
- if (run_supported_app_array[i].name == supported_app_array[j].name) {
- //寻找到了默认的支持的应用,划动的速度是每次划动500ms
- supported_app_array[j].script.watch_video(run_supported_app_array[i].run_time,
- Number(swipe_time_min_val),Number(swipe_time_max_val),5*100,mute_audio,mute_video,jump_word_array)
- break
- }
- }
- commonfunc.log("结束"+run_supported_app_array[i].name)
- if (commonfunc.app_get_current_app_name() == run_supported_app_array[i].name) {
- home()
- }
- sleep(2000)
- i = i + 1
- }
由于代码量比较大,贴出部分代码。
另外自己封装了一些常用函数在common.js。这样就能提高复用度。且不容易出错,需要引用的时候只需要执行:
commonfunc = require(PROJECT_ROOT + "common.js")
注释也写得比较清楚,可以大量减少开发时间
- //等待某个符合条件的控件出现,不使用平台的waitfor和untilFind,是因为这两个操作是阻塞的。默认等待10s
- common.widget_wait_timeout = function(selector_conditions, log_info, time) {
- if (!time) {
- time = 10000
- }
- find = selector_conditions.visibleToUser(true).findOne(time)
- //findOne返回控件或者null
- if (find) {
- if (log_info)
- common.log("等到了" + log_info)
- return find
- //返回控件,方便后续操作
- } else {
- if (log_info)
- common.log("等不到" + log_info)
- return null
- }
- }
-
-
- //利用n的bounds转化为有超时时间的等待
- //等待widget在某个父widget区域内出现
- common.widget_wait_timeout_in_widget = function(n, selector_conditions, log_info, time) {
- b = n.bounds()
- v = common.widget_wait_timeout(selector_conditions.boundsInside(b.left,b.top,b.right,b.bottom), null, time)
- if (v) {
- if (log_info) {
- common.log("等到" + log_info)
- }
- return v
- //返回控件,方便后续操作
- } else {
- if (log_info) {
- common.log("无法等到" + log_info)
- }
- return null
- }
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。