EasyClick脚本开发教程(21)主脚本和子脚本传递参数

前言

很多人刚接触EasyClick,就很想了解它和auto.js的区别。
auto.js有个脚本引擎对象。每个脚本都有一个脚本引擎对象。当主脚本调用子脚本时,会生成子脚本的引擎对象。通过这个对象,可以对子脚本进行一些操作。
同时,auto.js调用子脚本可以传递参数。

这一节来研究EasyClick脚本间的参数传递的两种方式。

本地存储

既然execScript()不能传参,我们可以尝试使用本地存储的方式来进行参数传递。
这样虽然麻烦了一点,但是能达到目的。
在子脚本运行之前,先将需要传递的参数,写入配置项中。
子脚本运行后,读取配置项中的参数即可。

主脚本代码:

function main() {
    //如果自动化服务正常
    if (!autoServiceStart(3)) {
        loge("自动化服务启动失败,无法执行脚本")
        exit();
    } else {
        logd("开始执行脚本...")
    }
};

main();

let url = './awemeViewHotVideo.js'
var x = http.httpGetDefault(url, 10 * 1000);
if (x.length > 0) {
    let infoKey = 'taskInfo';
    let infoValue = {
        "task_id": "24504",
        "module_name": "某音_随机浏览热门视频",
        "module_url": "./awemeViewHotVideo.js",
        "module_group_id": null,
        "module_param": {
            "module_id": "54",
            "group_name": "某音",
            "module_url": "",
        },
    };

    if (setStorageData(infoKey, JSON.stringify(infoValue))) {
        if (execScript(2, x)) {
            logi('执行脚本成功');

            // 获取任务结果
            let resultKey = 'taskResult';
            let resulValue = getStorageData(resultKey);
            logd('任务结果:' + resulValue);
        } else {
            loge('执行脚本失败');
        }
    } else {
        loge('传参失败');
    }
}

子脚本运行完成后,如果需要回传执行结果,可以同样使用本地存储的方式,将参数写入配置项,供主脚本读取。

子脚本代码:

/*
 * @Description: 
 * @Version: 1.0
 * @Autor: 飞云
 * @LastEditTime: 2020-12-08 18:43:52
 */

let infoKey = 'taskInfo';
let infoValue = JSON.parse(getStorageData(infoKey))
logd('任务参数:' + getStorageData(infoKey));

if (infoValue) {
    awemeFace();

    // 回传任务结果
    let resultKey = 'taskResult';
    let resulValue = {
        "task_id": "24504",
        "result": "true",
    };
    setStorageData(resultKey, JSON.stringify(resulValue));
} else {
    loge('未取到任务参数')
};

setExceptionCallback(function (msg) {
    logd(" 异常停止消息: " + msg)
});

setStopCallback(function () {
    logd("我是停止回调")
});

// 测试版本:13.8.0
function awemeFace() {
    home();
    let packageName = 'com.ss.android.ugc.aweme';
    launch(packageName);

    let pages = random(3, 5);   //指定需浏览的视频随机数量
    logi('需浏览 ' + pages + '个视频');

    for (let i = 0; i < pages; i++) {
        let activity = getRunningActivity();
        switch (activity) {
            case 'com.ss.android.ugc.aweme.main.MainActivity':
                let times = random(5000, 10000);  //单个视频浏览时长
                logd('等待 ' + times + '毫秒');
                sleep(times);

                // 设定坐标,注意避开悬浮窗
                let x = device.getScreenWidth() * 7 / 10;
                let y = device.getScreenHeight() * 8 / 10;
                let x1 = device.getScreenWidth() * 7 / 10;
                let y1 = device.getScreenHeight() * 1.5 / 10;

                // 随机滑屏
                let jumpNum = random(1, 5);
                for (let j = 0; j < jumpNum; j++) {
                    if (j != jumpNum - 1) {
                        logd('跳过第 ' + (j + 1) + '屏');
                    }
                    // 滑动屏幕,注意避开悬浮窗
                    if (rndSwipe(x, y, x1, y1, 100, 200, 200)) {
                        sleep(3000);
                    }
                }

                logi('浏览第 ' + (i + 1) + '个视频');
                break;
            default:
                break;
        }
    }
}

运行日志:

[2020-12-08 19:17:30.234]【远程设备】准备运行工程...
[2020-12-08 19:17:30.241]【远程设备】开始启动...
[2020-12-08 19:17:30.331]【远程设备】开始执行,请稍等
[2020-12-08 19:17:30.648]【远程设备】执行 main class: com.js.main
[2020-12-08 19:17:30.656]【远程设备】执行class: com.js.main
[2020-12-08 19:17:30.656]【远程设备】运行模式:无障碍
[2020-12-08 19:17:30.656]【远程设备】开始执行脚本...
[2020-12-08 19:17:30.885]【远程设备】(tmp-dynamic.js#10)任务参数:{"task_id":"24504","module_name":"某音_随机浏览热门视频","module_url":"./awemeViewHotVideo.js","module_group_id":null,"module_param":{"module_id":"54","group_name":"某音","module_url":""}}
[2020-12-08 19:17:30.891]【远程设备】(tmp-dynamic.js#37)启动应用...
[2020-12-08 19:17:36.536]【远程设备】(tmp-dynamic.js#37)启动成功
[2020-12-08 19:17:36.546]【远程设备】(tmp-dynamic.js#37)应用版本号:13.8.0
[2020-12-08 19:17:36.546]【远程设备】(tmp-dynamic.js#40)需浏览 4个视频
[2020-12-08 19:17:36.550]【远程设备】(tmp-dynamic.js#47)等待 7754毫秒
[2020-12-08 19:17:44.314]【远程设备】(tmp-dynamic.js#60)跳过第 1屏
[2020-12-08 19:17:47.342]【远程设备】(tmp-dynamic.js#60)跳过第 2屏
[2020-12-08 19:17:53.389]【远程设备】(tmp-dynamic.js#68)浏览第 1个视频
[2020-12-08 19:17:53.393]【远程设备】(tmp-dynamic.js#47)等待 7677毫秒
[2020-12-08 19:18:01.70]【远程设备】(tmp-dynamic.js#60)跳过第 1屏
[2020-12-08 19:18:07.108]【远程设备】(tmp-dynamic.js#68)浏览第 2个视频
[2020-12-08 19:18:07.112]【远程设备】(tmp-dynamic.js#47)等待 8277毫秒
[2020-12-08 19:18:15.394]【远程设备】(tmp-dynamic.js#60)跳过第 1屏
[2020-12-08 19:18:18.421]【远程设备】(tmp-dynamic.js#60)跳过第 2屏
[2020-12-08 19:18:21.456]【远程设备】(tmp-dynamic.js#60)跳过第 3屏
[2020-12-08 19:18:27.504]【远程设备】(tmp-dynamic.js#68)浏览第 3个视频
[2020-12-08 19:18:27.506]【远程设备】(tmp-dynamic.js#47)等待 5720毫秒
[2020-12-08 19:18:33.238]【远程设备】(tmp-dynamic.js#60)跳过第 1屏
[2020-12-08 19:18:36.262]【远程设备】(tmp-dynamic.js#60)跳过第 2屏
[2020-12-08 19:18:39.291]【远程设备】(tmp-dynamic.js#60)跳过第 3屏
[2020-12-08 19:18:42.328]【远程设备】(tmp-dynamic.js#60)跳过第 4屏
[2020-12-08 19:18:48.376]【远程设备】(tmp-dynamic.js#68)浏览第 4个视频
[2020-12-08 19:18:48.385]【远程设备】执行脚本成功
[2020-12-08 19:18:48.385]【远程设备】任务结果:{"task_id":"24504","result":"true"}
[2020-12-08 19:18:48.391]【远程设备】(tmp-dynamic.js#31)我是停止回调
[2020-12-08 19:18:49.638]【远程设备】运行结束

全局变量

温馨提示:此处内容需要后才能查看!

主脚本代码:

function main() {
    //如果自动化服务正常
    if (!autoServiceStart(3)) {
        loge("自动化服务启动失败,无法执行脚本")
        exit();
    } else {
        logd("开始执行脚本...")
    }
};

main();

var infoValue = {
    "task_id": "24504",
    "module_name": "某音_随机浏览热门视频",
    "module_url": "./awemeViewHotVideo.js",
    "module_group_id": null,
    "module_param": {
        "module_id": "54",
        "group_name": "某音",
        "module_url": "",
    },
};

var x = http.httpGetDefault(infoValue.module_url, 10 * 1000);
if (x.length > 0) {
    if (execScript(2, x)) {
            logi('执行脚本成功');

            // 获取任务结果
            logd('任务结果:' + JSON.stringify(resultValue));
        } else {
            loge('执行脚本失败');
        }
}

子脚本代码:

/*
 * @Description: 
 * @Version: 1.0
 * @Autor: 飞云
 * @LastEditTime: 2020-12-08 18:43:52
 */

awemeFace();

// 回传任务结果
var resultValue = {
        "result": "true",
    };

setExceptionCallback(function (msg) {
    logd(" 异常停止消息: " + msg)
});

setStopCallback(function () {
    logd("我是停止回调")
});

// 测试版本:13.8.0
function awemeFace() {
    home();
    let packageName = 'com.ss.android.ugc.aweme';
    launch(packageName);

    let pages = random(3, 5);   //指定需浏览的视频随机数量
    logi('需浏览 ' + pages + '个视频');

    for (let i = 0; i < pages; i++) {
        let activity = getRunningActivity();
        switch (activity) {
            case 'com.ss.android.ugc.aweme.main.MainActivity':
                let times = random(5000, 10000);  //单个视频浏览时长
                logd('等待 ' + times + '毫秒');
                sleep(times);

                // 设定坐标,注意避开悬浮窗
                let x = device.getScreenWidth() * 7 / 10;
                let y = device.getScreenHeight() * 8 / 10;
                let x1 = device.getScreenWidth() * 7 / 10;
                let y1 = device.getScreenHeight() * 1.5 / 10;

                // 随机滑屏
                let jumpNum = random(1, 5);
                for (let j = 0; j < jumpNum; j++) {
                    if (j != jumpNum - 1) {
                        logd('跳过第 ' + (j + 1) + '屏');
                    }
                    // 滑动屏幕,注意避开悬浮窗
                    if (rndSwipe(x, y, x1, y1, 100, 200, 200)) {
                        sleep(3000);
                    }
                }

                logi('浏览第 ' + (i + 1) + '个视频');
                break;
            default:
                break;
        }
    }
}

运行日志:

[2020-12-08 19:26:43.638]【远程设备】准备运行工程...
[2020-12-08 19:26:43.643]【远程设备】开始启动...
[2020-12-08 19:26:43.725]【远程设备】开始执行,请稍等
[2020-12-08 19:26:43.768]【远程设备】执行 main class: com.js.main
[2020-12-08 19:26:43.768]【远程设备】执行class: com.js.main
[2020-12-08 19:26:43.768]【远程设备】运行模式:无障碍
[2020-12-08 19:26:43.768]【远程设备】开始执行脚本...
[2020-12-08 19:26:43.911]【远程设备】(tmp-dynamic.js#26)启动应用...
[2020-12-08 19:26:49.177]【远程设备】(tmp-dynamic.js#26)启动成功
[2020-12-08 19:26:49.177]【远程设备】(tmp-dynamic.js#26)应用版本号:13.8.0
[2020-12-08 19:26:49.180]【远程设备】(tmp-dynamic.js#29)需浏览 3个视频
[2020-12-08 19:26:49.182]【远程设备】(tmp-dynamic.js#36)等待 9350毫秒
[2020-12-08 19:26:58.549]【远程设备】(tmp-dynamic.js#49)跳过第 1屏
[2020-12-08 19:27:01.588]【远程设备】(tmp-dynamic.js#49)跳过第 2屏
[2020-12-08 19:27:04.606]【远程设备】(tmp-dynamic.js#49)跳过第 3屏
[2020-12-08 19:27:07.653]【远程设备】(tmp-dynamic.js#49)跳过第 4屏
[2020-12-08 19:27:13.701]【远程设备】(tmp-dynamic.js#57)浏览第 1个视频
[2020-12-08 19:27:13.702]【远程设备】(tmp-dynamic.js#36)等待 6155毫秒
[2020-12-08 19:27:19.867]【远程设备】(tmp-dynamic.js#49)跳过第 1屏
[2020-12-08 19:27:25.925]【远程设备】(tmp-dynamic.js#57)浏览第 2个视频
[2020-12-08 19:27:25.930]【远程设备】(tmp-dynamic.js#36)等待 5782毫秒
[2020-12-08 19:27:31.723]【远程设备】(tmp-dynamic.js#49)跳过第 1屏
[2020-12-08 19:27:37.771]【远程设备】(tmp-dynamic.js#57)浏览第 3个视频
[2020-12-08 19:27:37.780]【远程设备】执行脚本成功
[2020-12-08 19:27:37.792]【远程设备】(tmp-dynamic.js#20)我是停止回调
[2020-12-08 19:27:37.792]【远程设备】任务结果:{"result":"true"}
[2020-12-08 19:27:38.331]【远程设备】运行结束

EasyClick免费云控

全动云是淘美科技旗下2021年最新的免费云控脚本管理系统。提供设备分组、设备管理、脚本分组、脚本管理、任务管理、素材管理等强大功能。支持用户上传自定义EasyClick脚本。
全动云大数据智能营销管理系统

相关链接

EasyClick开发文档

EasyClick脚本开发教程(1)IntelliJ IDEA Ultimate的安装方法
EasyClick脚本开发教程(2)安装开发工具并创建项目
EasyClick脚本开发教程(3)连接设备与屏幕映射

EasyClick实现某音直播间刷屏喊话,循环发送随机话术
EasyClick实现某音发送指定语音,发送好友私信,引流脚本必备技术

EasyClick交流群

QQ群号:737066890

EasyClick技术交流

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » EasyClick脚本开发教程(21)主脚本和子脚本传递参数

企业级大数据智能营销管理系统

了解详情