侧边栏壁纸
博主头像
一朵云的博客博主等级

拥抱生活,向阳而生。

  • 累计撰写 67 篇文章
  • 累计创建 25 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

AutoX.js 小试牛刀

一朵云
2023-05-29 / 0 评论 / 0 点赞 / 15 阅读 / 13539 字

简介

​ ​ AutoX.js 是一款不需要Root权限的 JavaScript 自动化软件,基于 Auto.js 4.1 版本的基础上迭代,使用 Rhino 1.7.13 作为脚本引擎,支持 ES5 与部分 ES6 特性。

  • 学习 AutoX.js 的 API 之前,建议先学习 JavaScript 的基本语法。
  • 如果想要在电脑上开发 AutoX.js,可以使用 VSCode 以及 AutoX.js 插件
  • 如果想要使用 TypeScript 来开发,目前有开发者公布了一个 相关工具
  • 论坛地址:http://www.autoxjs.com/

AutoX.js 下载地址

Github Releases 下载。

估计和它大哥auto.js一样,由于风险被盯上后,挂壁了!!!

image-aubi.png

这里提供个云盘下载地址:

链接: https://pan.baidu.com/s/1lr-GFuxTb33Yb4g3TkSXeg?pwd=1234
提取码: 1234

demo举例操作

工具盒子:

用来截取关键饿了么、京东的关键登录信息。

1、用vs code编辑

下面两个文件在一个文件夹下。

project.json

{
    "name": "工具盒子",
    "main": "main.js",
    "ignore": [
        "build"
    ],
    "packageName": "com.xcj.tool",
    "versionName": "1.0.0",
    "versionCode": 1
}

Main.js

"ui";
ui.layout(
    <vertical>
        <text text="饿了么登录信息" textStyle="bold" textSize="18sp" textColor="black" />
        <input id="elmBeforeInfo" lines="3" hint="请输入饿了么的登录信息" />
        <button id="substr1" text="开始截取" />
        <text id="elmTip" lines="1" textColor="red" textSize="14sp" />
        <text id="elmAfterInfo" lines="5" text="" textSize="14sp" />
        <button id="elmCopy" layout_gravity="right" w="auto" h="auto" text="复制" />

        <text text="京东登录信息" textStyle="bold" textSize="18sp" textColor="black" />
        <input id="jdBeforeInfo" lines="3" hint="请输入京东的登录信息" />
        <button id="substr2" text="开始截取" />
        <text id="jdTip" lines="1" textColor="red" textSize="14sp" />
        <text id="jdAfterInfo" lines="5" text="" textSize="14sp" />
        <button id="jdCopy" layout_gravity="right" w="auto" h="auto" text="复制" />

    </vertical>
);


//截取饿了么登录信息
ui.substr1.click(function () {
    // toast("点击了第一个“开始截取”按钮!");

    var url = "http://服务器ip:8081/elmSubstr";
    var input = ui.elmBeforeInfo.getText();

    http.post(url, {
        "input": input
    }, {}, function (res, err) {

        if (err) {
            console.error(err);
            return null;
        }
        if (res.statusCode === 200) {
            var jsonBody = res.body.json();
            ui.run(() => {
                ui.elmTip.setText(jsonBody.msg);
                ui.elmAfterInfo.setText(jsonBody.data);
            });
        } else {
            toast("接口请求失败:" + res.statusCode + "\n" + res.statusMessage);
        }

    });


})

//复制饿了么关键信息
ui.elmCopy.click(function () {
    if ("" == ui.elmAfterInfo.getText()) {
        toast("请先截取有效信息!");
    } else {
        setClip(ui.elmAfterInfo.getText());
        toast("复制成功!");
    }
})


//截取京东登录信息
ui.substr2.click(function () {
    // toast("点击了第二个“开始截取”按钮!");

    try {
        var url = "http://服务器ip:8081/jdSubstr";
        var input = ui.jdBeforeInfo.getText();
        http.post(url, {
            "input": input
        }, {}, function (res, err) {
            if (err) {
                console.error(err);
                return;
            }
            if (res.statusCode === 200) {
                var jsonBody = res.body.json();
                ui.run(() => {
                    ui.jdTip.setText(jsonBody.msg);
                    ui.jdAfterInfo.setText(jsonBody.data);
                });
            } else {
                toast("接口请求失败:" + res.statusCode + "\n" + res.statusMessage);
            }
        });
    } catch (error) {
        console.error(error);
    }
})

//复制京东关键信息
ui.jdCopy.click(function () {

    if ("" == ui.jdAfterInfo.getText()) {
        toast("请先截取有效信息!")
    } else {
        setClip(ui.jdAfterInfo.getText());
        toast("复制成功!");
    }

})

2、手机安装autox app

autoXjs.jpg

3、引入代码文件夹

引入文件.png

4、打包or运行

打apk包.png

得物脚本

模拟用户的屏幕点击操作,刷浏览量。n年前的版本了,现在样式已经变了!

project.json

{
    "name": "得物,跑起来",
    "main": "main.js",
    "ignore": [
        "build"
    ],
    "packageName": "com.dewu.auto",
    "versionName": "1.0.0",
    "versionCode": 1
}

main.js

//账密
var infoList = [
    { userName: "199xxxxxxxx", passWord: "123456" },
    { userName: "131xxxxxxxx", passWord: "123456" }
];

var target = "小虐";

console.show();

if (startApp()) {


    for (var i = 0; i < infoList.length; i++) {
        var user = infoList[i];

        //1、使用账密登录
        dewuLogin(user["userName"],user["passWord"]);

        //2、检查是否有弹广告,若有则点击广告的关闭按钮
        if (id("iv_close").exists()) {
            id("iv_close").findOne().click();
            console.log("发现广告,尝试关闭了广告...");
            if (!id("iv_close").exists()) {
                console.log("广告已被关闭!");
                sleep(500);
            }
        } else {
            console.log("未发现可关闭的弹窗广告!");
        }

        //3、找到目标联系人
        findTargetMessages();
        sleep(1000);
        //4、找到并访问该联系人的最后一条推文消息
        findLastMessages();
        sleep(1000);
        //5、检查是否被得物安全风控了
        if (checkLoding()) {

            //停止脚本
            engines.stopAllAndToast();
        }

        //6、退出登录返回到登录界面
        backAndLogout();


    }




}

// sleep(5000);
// console.hide();

//启动App
function startApp() {
    app.launchApp("得物");
    //未登录弹出的登录界面包含"btn_other_login";tab_service表示底部导航栏的“探索”菜单。
    while (!(id("btn_other_login").exists() || id("tab_service").exists())) {
        console.log("等待APP启动...");
        sleep(1000);
    }

    if (id("btn_other_login").exists()) {
        id("btn_other_login").click();
        sleep(500);
    }

    console.log("app启动成功!");
    return true;
}


//判断是否已登录
function onLine() {
    if (id("btn_other_login").exists()) { }
}


//登录
function dewuLogin(userName,passWord) {
    // id("btn_other_login").click();
    sleep(1000);
    console.log("开始尝试密码登录!");
    // id("tv_password_login").findOne().click();
    text("密码登录").click();
    sleep(500);
    console.log("勾选协议");
    id("cb_privacy").findOne().click();
    sleep(500);
    console.log("点击用户名输入框");
    id("et_username").findOne().click();
    sleep(500);
    if (id("del_username_btn").exists()) {
        console.log("点击清除用户名按钮");
        id("del_username_btn").findOne().click();
    }
    sleep(1000);
    id("et_username").findOne().setText(userName);
    sleep(500);
    id("et_password").findOne().setText(passWord);
    sleep(1000);
    id("btn_sure").findOne().click();
    sleep(1000);
}


//找私信
function findTargetMessages() {
    console.log("开始找目标私信 " + target + " ...");
    id("tab_service").findOne().click();
    sleep(500);
    click("消息中心");
    sleep(500);
    // let tvTitle = id("tvTitle").find();
    // for (let myTvTitle of tvTitle) {
    //     console.log("开始遍历私信:" + myTvTitle.getText());
    //     if (target === (myTvTitle.getText())) {
    //         console.log("命中目标私信:" + myTvTitle.getText());
    //         console.log(myTvTitle);
    //         myTvTitle.click();
    //         return true;
    //     }
    // }

    try {
        id("recyclerView").findOne().children().forEach(child => {
            // console.log("---------"+child);
            var child_target = child.findOne(id("tvTitle"));
            // console.log("++++++++++++++++++"+child_target);
            if (child_target != null) {
                console.log("开始遍历私信列表,找到:" + child_target);
                if (child_target.getText() === target) {
                    console.log("命中目标:" + child_target.getText());
                    child_target.parent().parent().click();
                    throw Error;
                }
            }
        });
    } catch (error) {
        return true;
    }

}


//找到最后一条私信
function findLastMessages() {

    //点击最后一条推文。
    var collection = id("share_trend_layout").find();
    collection.get(collection.size() - 1).click();


    //模糊关键字能找到
    // var a = textContains("王").findOne();
    // console.log("··························· "+a);
    // var b = a.parent();
    // console.log("··························· "+b);
    // b.click();


    //精确关键字能找到
    // var a = text("帅到爆炸,有没有?").findOne();
    // console.log("··························· "+a);
    // var b = a.parent();
    // console.log("··························· "+b);
    // b.click();


}

//不清楚页面有哪些控件时,可以用这个方法打印一下。
function findAllContent() {

    // 第一步; 编写打印所有控件的递归方法  
    function queryList(json) {
        for (var i = 0; i < json.length; i++) {
            var sonList = json[i];
            if (sonList.childCount() == 0) {
                console.log("========================  " + json[i]);
            } else {
                queryList(sonList);
            }
        }
    }

    // 第二部查找所有控件
    let rooot2 = find();

    // 第三步 调用递归方法
    queryList(rooot2);
}

//检查看推文时是否出现了loading。
function checkLoding() {
    if (id("pwLoading").exists()) {
        console.error("被安全检测了,程序3秒后将自动返回上一个界面!");

        sleep(3000);
        id("ivBack").findOne().click();
        console.warn("请手动点击联系人头像,进行图片安全检测。");
        return true;
    } else {
        return false;
    }
}

//结束,退出登录
function backAndLogout() {
    console.log("1、返回");
    id("ivBack").findOne().click();
    sleep(500);
    console.log("2、返回");
    className("android.widget.ImageButton").findOne().click();
    sleep(500);
    console.log("3、返回");
    id("backBtn").findOne().click();
    sleep(500);
    console.log("4、点击我的");
    id("tab_user").findOne().click();
    sleep(500);
    console.log("5、点击设置");
    id("btn_setting").findOne().click();
    sleep(500);
    console.log("6、点击登出");
    id("rl_sign_out").findOne().click();
    sleep(500);
    console.log("7、点击确认登出");
    id("md_buttonDefaultPositive").findOne().click();
    sleep(1000);

    if (id("tv_go_login").exists()) {
        console.log("退出登录成功了!");
        id("tv_go_login").findOne().click();

        if (id("btn_other_login").exists()) {
            id("btn_other_login").findOne().click();
        }
    }

}


结语:

贴下某Q群的教程pdf

链接: https://pan.baidu.com/s/1-9E3wm3yRadhy47CPKOmlQ?pwd=1234
提取码: 1234

0

评论区