首页 > 技术文章 > Autojs实战案例

chen-xia 2020-09-14 14:57 原文

一、概述:

记录封装常用autojs语法及案例,方便日后急速上手使用,高手请绕路!

 

二、基础案例

1.上传图片剪切并返回图片

  • 由于我的autojs的images.clip方法在使用是报错,所以换种方式剪切图片;
  • 方式:通过接口处理图片,后端接口服务为python+flask

服务端:

#!/usr/bin/env python
# encoding: utf-8

import flask
from PIL import Image
from io import BytesIO
from werkzeug.utils import secure_filename
from flask import request, send_from_directory,jsonify

server = flask.Flask(__name__)#创建Flask对象server

# post方法:上传文件的
@server.route('/upload', methods=['post'])
def upload():
    imgData = request.files.get('file')#文件流
    cc=request.values.get('chen')
    dd=eval(cc)
    if imgData and dd:
        # chen = secure_filename(imgData.filename)#获取文件名
        # imgData.save(chen)#保存图片
        # imgData.seek(0)#重新定义指针到文件开头
        ###读取文件流bytes
        chen = request.files["file"].stream.read()
        #把bytes数组还原成图片
        img = Image.open(BytesIO(chen))
        print('图片尺寸:',img.size)

        #指定区域剪切图片
        cropped = img.crop((dd))  # (x1, y1, x2, y2)
        cropped.save(r"./test.png")#保存图片
        return send_from_directory(r'./','test.png', as_attachment=True) #返回要下载的文件内容给客户端
    else:

        return jsonify({"msg": "false", "ret": 2,"code": "fill","text":"图片处理异常或没有传坐标"})


if __name__ == '__main__':
    server.run(port=8000, debug=True, host='0.0.0.0')
View Code

autojs端:

device = device.serial;
//________________________________________截图__________________________________________
if (!requestScreenCapture()) {
    console.show()
    toastLog("请求截图失败");
    exit();
} else {
    toastLog("请求截图成功");
}
//截图
captureScreen("/sdcard/"+device+'.png');
log('开始请求接口-区域处理图片');
sleep(2000);


// ////____________________上传截图并保存文件__________________________________________________
var url="192.168.10.32:8000/upload"
//打开图片并请求
var res = http.postMultipart(url, {
    file: open("/sdcard/"+device+".png"),//图片
    chen: "10,920,1050,1500"//坐标x1,y1,x2,y2
});

//判断状态码
if(res.statusCode >= 200 && res.statusCode < 300){
    //保存文件
    files.writeBytes('/sdcard/'+device+'.png',res.body.bytes());
    //打开文件
    // app.viewFile('/sdcard/'+device+'.png');
    }
else{
    log('图片区域处理错误')
}
View Code

 

 2.关闭app应用

auto();
function kill_app(packageName) {
    var name = getPackageName(packageName); 
    if(!name){
        if(getAppName(packageName)){
            name = packageName;
        }else{
            return false;
        } 
    }

    app.openAppSetting(name);
    text(app.getAppName(name)).waitFor();  
    let is_sure = text("强行停止").findOne();
    if (is_sure.enabled()) {
        click('强行停止');
        sleep(700);
        //确定强行停止
        text("强行停止").findOne().click();
        log(app.getAppName(name) + "应用已被关闭");
        sleep(1000);
        back();
    } else {
        log(app.getAppName(name) + "应用不能被正常关闭或不在后台运行");
        back();
    }
}

kill_app('com.tencent.mobileqq')

 

 

 

 

三、实战案例

 1.实现判断、启动、进服操作

    游戏包:http://pkg.superdalan.com/game.pkg/download?pkgId=5322&f=shywl2mh_dalan_assemblexysdk_96_1.0.0_5322_20211129_141426.apk

auto();
//判断启动包名并启动
function start_app(packageName,AppName){
    if (AppName != null) {
        //停止app
        shell("rm -rf ./sdcard/.dalan");
        toastLog('开始启动:'+AppName);     
        launch(page);
        sleep(15000);
        click(20,30); //单点击坐标

        ////_________________截图操作____________________________________
        //1.请求截图权限
        if(!requestScreenCapture()){
            toast("请求截图失败");
            exit();
        }
        //2、进行截图
        captureScreen("/sdcard/test/shywl_96/登录前开始游戏.png");
        sleep(2000)

        ////______________________________________判断图片相似度(可以两张一样的图片)_____________________________________
        //大图
        let max = images.read("/sdcard/test/shywl_96/登录前开始游戏.png"); 
        //小图
        let min = images.read("/sdcard/test/shywl_96/min登录前开始游戏.png");
        //对比相似对(threshold是阈值)
        let p = findImage(max, min,{threshold:0.6});//// 找到返回true, 失败返回false
        if (p) {
            print('找到开始游戏按钮');
            click(550,1570);
            sleep(8000);
        } 
        //如果没有匹配到图片,就判断是否有账号登录
        else if (text("帐号登录").findOne(20000)) {
            toastLog('打开游戏成功-有账号登录')
            click(800, 800);//点击帐号登录
            if (text("登录").findOne(3000)) {
                log('当前已在账号输入页面')
                setText(id("dlhm_et_account").find(), '18520103625');//输入账号
                var pass = className("android.widget.EditText").text("请输入密码").findOne(1000);
                pass.setText(123456);//输入密码
                click('登录'); //点击text的元素
            }
            else {
                log('有账号登录、没有到账号密码页面')
            } 

        }
        else{
            log('图片匹配失败并没有登录元素')
        }
    }
    else {
            log('手机没有安装:'+packageName)
        }
}


//杀掉app应用
function kill_app(packageName) {
    var name = getPackageName(packageName);
    if (!name) {
        if (getAppName(packageName)) {
            name = packageName;
        } else {
            return false;
        }
    }
    app.openAppSetting(name);
    text(app.getAppName(name)).waitFor();
    let is_sure = text("强行停止").findOne();
    if (is_sure.enabled()) {
        click('强行停止');
        sleep(700);
        //确定强行停止
        text("强行停止").findOne().click();
        log(app.getAppName(name) + "应用已被关闭");
        sleep(1000);
        back();
    } else {
        log(app.getAppName(name) + "应用不能被正常关闭或不在后台运行");
        back();
    }
}


device.wakeUp();//判断是否黑屏
var page = 'com.dl.ctmd.gdt';
var AppName = getAppName(page);
start_app(page,AppName);//启动游戏
kill_app(page);//关闭app

 

 

 

 

相关连接:

https://blog.csdn.net/feiyunjs/article/details/94722766.....................................常用的代码和公共函数搜集整理

https://blog.csdn.net/qq_30856231/article/details/110118735 ........................autojs常用案例

https://blog.csdn.net/m0_57628462/article/details/118887418 .......................autojs常用语法

https://blog.csdn.net/weixin_33690963/article/details/93515638 ....................爬取支付水滴

https://blog.csdn.net/tfnmdmx/article/details/118544342 ...............................autojs多线程-复杂版

https://www.cnblogs.com/Mr-lin66/p/11969098.html ......................................手机同步到pc并获取元素

 

推荐阅读