说明

本文提供的代码仅供参考。不建议用于生产环境。
可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。

Auto.js简介

Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。
与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。

Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。

推荐教程

Auto.js Pro安卓全分辨率免ROOT引流脚本开发视频教程(HD超清1080p)

开发文档

Auto.js Pro开发文档 文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。

为什么要使用Auto.js Pro开发脚本,有什么特点?

吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:

  • Auto.js Pro能开发免ROOT的安卓脚本
  • Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型
  • Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面
  • Auto.js Pro使用的javascript的语法比较优雅,代码可读性强
  • Auto.js Pro的命令库非常的丰富,接口比较多
  • Auto.js Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告

示例代码

// qq验证码极为简单,
// 可用循环 过验证码 
// 省钱省力 经测试 比联众打码网页返码都快
//        大佬看看就好O(∩_∩)O哈哈~
//此代码由飞云脚本圈整理提供(www.feiyunjs.com)
var 账号错误计数 = 0
var 卡在主界面计数 = 0
滑块验证码()

function 滑块验证码() {
    for (var i = 1; i < 99; i++) {
        //登录账号//登录账号//登录账号
        

        launchApp("QQ");

        if (text("允许").findOne(5000)) {
            text("允许").findOne(5000).click()
            sleep(500)
            text("允许").findOne(5000).click()
        }
        className("android.widget.Button").text("登录").waitFor();

        if (className("android.widget.Button").text("登录").findOne(5000)) {
            className("android.widget.Button").text("登录").findOne(5000).click()
            log("开始分割账号")
            toast("开始分割账号")
        }
        file = open("/sdcard/脚本/腾讯账号.txt", "r")
        //读取一行并打印
        var 内容 = file.readline();
        log(内容)
        toast(内容)
        file.close();
        var 登陆分割后的数据 = 内容.split("----");
        log(登陆分割后的数据);
        var 账号 = 登陆分割后的数据[0];
        log(账号);
        var 密码 = 登陆分割后的数据[1];
        log(密码)
        setText([0], 账号)//把“你好”输入到下标为1的输入框里
        setText([1], 密码)//把“你好”输入到下标为1的输入框里
        className("android.widget.ImageView").desc("登 录").findOne(5000).click()
        
        toastLog(read_delete());//删除账号

        for (var ii = 1; ii < 99; ii++) {
            //判断账号状况
            for (var iii = 1; iii < 99; iii++) {
                //滑块
                //如果觉得效率低可以选择打码平台,或者自己去买本地滑块库
                
                if (className("android.view.View").text("拖动下方滑块完成拼图").findOne(5000)) {
                    swipe(232, 1040, 817, 1038, 1500)//滑块点自己取
                    sleep(2500)
                    if (className("android.view.View").text("拖动下方滑块完成拼图").findOne(3000)) {
                        click(995, 1157)//滑块不成功刷新滑块/不同分辨率自己取
                        sleep(1000)

                    }
                } else {
                    toast("滑动完成")
                    log("滑动完成")
                    
                    break;
                }
            }
            if (className("android.widget.TextView").text("消息").findOne(2000)){
              log("登录成功")
              toast("登录成功")
              break;
            }else if(className("android.widget.TextView").text("绑定手机号码").findOne(2000)) {
                log("登录成功")
                toast("登录成功")   
                break;
            }

            //判断是否登录成功
            if (className("android.widget.TextView").text("登录失败").findOne(5000)) {
                账号错误计数++

                log("密码错误,重新登录")
                toast("密码错误,重新登录")
                click("确定")
                sleep(500)
                log("登录失败" + 账号错误计数 + "次")
                toast("登录失败" + 账号错误计数 + "次")

                sleep(2000)

                if (账号错误计数 >= 3) {
                    log("重复登录没有成功,换号")
                    toast("重复登录没有成功,换号")
                    toastLog(read_delete());
                    账号错误计数 = 0;
                    break;
                }
                className("android.widget.ImageView").desc("登 录").findOne(5000).click()

            } else if (text("去安全中心").findOne(3000)) {
                log("冻结,重新登录")
                toast("冻结,重新登录")
                text("取消").findOne(5000).click()
                toastLog(read_delete())
                break;
            } else if (className("android.widget.Button").text("用户注册").findOne()) {
                卡在主界面计数++
                log("卡在主界面重新登录")
                toast("卡在主界面重新登录")
                if (卡在主界面计数 >= 3) {
                    log("重复登录没有成功,换号")
                    toast("重复登录没有成功,换号")
                    toastLog(read_delete());
                    卡在主界面计数 = 0;
                    break;
                }
             
                className("android.widget.ImageView").desc("登 录").findOne(5000).click()
                sleep(5000)
            

            }
        }
        //登录成功
        if(className("android.widget.TextView").text("绑定手机号码").findOne(2000)) {
            log("登录成功")
            toast("登录成功")   
            break;

        }else if(className("android.widget.TextView").text("消息").findOne(2000)){
            log("登录成功")
            toast("登录成功")   
            break;

        }
        

    }
}

function read_delete() {
    //删除第一行
    var path = "/sdcard/脚本/腾讯账号.txt";//txt文本路径
    var reg = /^\s+|s+$/g; //匹配无效空白行
    var txt = files.read(path).replace(reg, "").split("\n");
    let ret_text = txt[0];
    log(ret_text.length);
    if (txt != "") {
        txt.splice(0, 1);
        files.write(path, txt.join("\n"));
        if (ret_text.length > 0) {
            return ret_text.trim();

        }
    } else {
        return "没有号了"
    }

    file.close();
}