1)运行实例截图

 

python appium自动刷抖音 auto.js自动刷抖音脚本_js

python appium自动刷抖音 auto.js自动刷抖音脚本_python appium自动刷抖音_02

python appium自动刷抖音 auto.js自动刷抖音脚本_python appium自动刷抖音_03

python appium自动刷抖音 auto.js自动刷抖音脚本_小程序_04

 

 

 

 

主要运行原理

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
    }
}

 

喜刷简介:

  1. 可以运行 快手极速版,抖音极速版,抖音火山版,微视等应用。
  2. 可以使手机显示黑屏画面,更加省电
  3. 也可以静音