autojs 常用操作

app下载地址 https://github.com/SuperMonster003/AutoJs6/releases
文档地址 https://docs.autojs6.com/#/
vscode 安装 autojs6 扩展
ctrl + shift + p 输入Autojs6 选择
[连接]- 服务端模式 (Server)|局域网 (LAN)AutoJs6 作为客户端连接至 VSCode 服务端 (使用 IP 地址)
cmd 查看ip命令 ipconfig
手机打开下载app菜单打开无障碍服务、浮动按钮、客户端模式输入电脑局域网内ip
vscode 右上角运行脚本


// "auto收集" https://github.com/xiaorui16888/AutoJsCode
// https://github.com/wiatingpub/autojs/tree/master


// 1. 提示消息 (toast)
// 显示一个短暂的提示消息在屏幕底部
toast('操作成功'); // 普通提示
toastLog('调试信息: 正在执行步骤1'); // 同时会将消息记录到日志

// performUpSwipe() // 上拉
// performDownSwipe() // 下拉
// scrollToTop()

// console.show();
// var r = http.get("www.baidu.com", {
//     headers: {
//         'Accept-Language': 'zh-cn,zh;q=0.5',
//     }
// });
// log("code = " + r.statusCode);
// log("html = " + r.body.string());  // res.body.json();


// var url = "https://login.taobao.com/member/login.jhtml";
// var username = "你的用户名";
// var password = "你的密码";
// var res = http.post(url, {
//     "TPL_username": username,
//     "TPL_password": password
// });
// var html = res.body.string();
// if(html.contains("页面跳转中")){
//     toast("登录成功");
// }else{
//     toast("登录失败");
// }

// auto.waitFor(); //等待获取无障碍辅助权限
text("通讯录").waitFor(); // 等待文字获取
launchPackage("com.tencent.mm")
app.launchApp("腾讯视频") 

const isTxlClicked = safeClick(
    id("icon_tv").className("android.widget.TextView").text("通讯录"),
);
if (isTxlClicked) {
    toast("通讯录点击成功");
} else {
    toast("通讯录点击失败");
}

exit()

/**
 * 通用点击方法(解决clickable: false的元素)
 * @param {Object} selector - 元素选择器(如 text("通讯录"), id("icon").text("首页") 等)
 * @param {number} [timeout=2000] - 查找元素超时时间(毫秒)
 * @param {number} [pressTime=100] - 按压时长(毫秒,模拟真实点击)
 * @returns {boolean} - 是否点击成功
 */
function safeClick(selector, timeout = 2000, pressTime = 100) {
    try {
        // 1. 查找元素
        const element = selector.findOne(timeout);
        if (!element) {
            console.log("未找到目标元素");
            return false;
        }

        // 2. 获取元素坐标范围
        const bounds = element.bounds();
        if (!bounds) {
            console.log("无法获取元素坐标");
            return false;
        }

        // 3. 计算中心点坐标
        //const x = bounds.left + (bounds.right - bounds.left) / 2;
        //const y = bounds.top + (bounds.bottom - bounds.top) / 2;
        //console.log(`计算点击坐标:(${x}, ${y})`);

        // 4. 执行按压点击(比普通click更可靠)
        //press(x, y, pressTime);
        press(bounds.centerX(), bounds.centerY(), pressTime);
        sleep(500); // 等待点击响应
        return true;

    } catch (error) {
        console.log("点击失败:", error.message);
        return false;
    }
}

// 2. 滑动操作 (swipe)
// 从起始坐标滑动到结束坐标,指定滑动时间(毫秒)
// 参数: 起始x, 起始y, 结束x, 结束y, 时长(ms)
swipe(500, 1500, 500, 500, 800); // 从下往上滑动(例如:滚动页面)
swipe(800, 1000, 200, 1000, 600); // 从右往左滑动(例如:切换页面)

// 3. 点击操作 (click)
// 点击指定坐标位置
click(300, 500); // 点击屏幕上(300,500)的位置
click(device.width / 2, device.height / 2); // 点击屏幕中心

// 4. 长按操作 (longClick)
// 长按指定坐标位置
longClick(400, 600); // 长按(400,600)位置(例如:弹出上下文菜单)

// 5. 按压操作 (press)
// 按压指定坐标并保持一段时间
// 参数: x坐标, y坐标, 按压时长(ms)
press(200, 300, 1000); // 在(200,300)位置按压1秒

// 6. 通过控件属性查找并操作
// 根据类名和描述查找按钮并点击
className("android.widget.Button").desc("发现").findOne().click();

// 其他常见的控件查找方式
className("android.widget.EditText").text("请输入用户名").findOne().setText("test"); // 输入文本
className("android.widget.CheckBox").checked(false).findOne().click(); // 勾选复选框
id("com.example:id/loginBtn").findOne().click(); // 通过控件ID查找

// 7. 系统操作
back(); // 模拟按下返回键
home(); // 回到主页
recentApps(); // 打开最近应用列表

// 8. 滚动操作
scrollDown(); // 向下滚动
scrollUp(); // 向上滚动
scrollLeft(); // 向左滚动
scrollRight(); // 向右滚动

// 9. 屏幕相关操作
log("屏幕宽度: " + device.width); // 获取屏幕宽度
log("屏幕高度: " + device.height); // 获取屏幕高度
screenshot("/sdcard/screenshot.png"); // 截取屏幕并保存

// 10. 延时操作
sleep(1000); // 暂停1秒(1000毫秒),等待界面响应

// 11. 条件等待
// 等待控件出现,最多等待10秒
var button = className("android.widget.Button").text("确定").waitFor();
if(button){
    button.click();
}

// 12. 循环操作示例
for(var i = 0; i < 5; i++){
    click(500, 500); // 连续点击5次
    sleep(500); // 每次间隔0.5秒
}



/**
 * 生成随机数(用于添加操作随机性,模拟人手操作)
 * @param {number} min - 最小值
 * @param {number} max - 最大值
 * @returns {number} 范围内的随机整数
 */
function getRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

/**
 * 计算正切值(用于计算滑动轨迹角度)
 * @param {number} angle - 角度(度)
 * @returns {number} 角度对应的正切值
 */
function calculateTangent(angle) {
    // 将角度转换为弧度后计算正切值
    return Math.tan(angle * Math.PI / 180);
}

/**
 * 执行上滑操作(模拟人手的曲线滑动轨迹)
 * 特点:滑动路径呈曲线,带有随机偏移,更接近真实用户操作
 */
function performUpSwipe() {
    // 初始化滑动轨迹数组,第一个元素为滑动总时长(毫秒)
    var swipePath = [300];
    
    // 计算起始点坐标(屏幕底部区域,横向中间位置)
    var startX = device.width / 2;
    var startY = device.height / 4 * 3; // 屏幕底部3/4高度位置
    
    // 给起始点添加随机偏移(-30到30像素),模拟人手不精准性
    startX = startX + getRandomNumber(-30, 30);
    startY = startY + getRandomNumber(-30, 30);
    
    // 初始化角度和坐标增量
    var angle = 0; // 初始角度(度)
    var xIncrement = 0; // X轴增量
    var yIncrement = 0; // Y轴增量
    
    // 生成滑动轨迹点(共30个点)
    for (let i = 0; i < 30; i++) {
        // 根据当前角度计算Y轴增量(基于正切值)
        yIncrement = xIncrement * calculateTangent(angle);
        yIncrement = Math.floor(yIncrement); // 取整
        
        // 若计算出的终点超出屏幕顶部,则终止轨迹生成
        if ((startY - yIncrement) < 0) {
            break;
        }
        
        // 计算当前轨迹点坐标并添加到路径数组
        var currentPoint = [startX + xIncrement, startY - yIncrement];
        swipePath.push(currentPoint);
        
        // 累加X轴增量(每次增加5像素)
        xIncrement += 5;
        // 累加角度(每次增加3度,使轨迹呈曲线变化)
        angle += 3;
    }
    
    // 打印轨迹信息(调试用)
    log("滑动轨迹点:", swipePath);
    
    // 执行手势滑动(使用apply调用gesture函数,传入轨迹数组)
    gesture.apply(null, swipePath);
}



/**
 * 执行下拉操作(模拟人手自然下拉轨迹)
 * 特点:从屏幕中上部开始,轨迹呈曲线向下延伸,带有随机偏移
 */
function performDownSwipe() {
    // 滑动轨迹数组,第一个元素为总时长(毫秒)
    // 300ms为完成整个下拉动作的时间,可根据需要调整
    var swipePath = [300];
    
    // 计算起始点坐标(屏幕中上部区域)
    var startX = device.width / 2;               // 横向中间位置
    var startY = device.height / 4;              // 纵向1/4高度位置(中上部)
    
    // 添加随机偏移(-30到30像素),避免机械性操作
    startX = startX + getRandomNumber(-30, 30);
    startY = startY + getRandomNumber(-30, 30);
    
    // 初始化轨迹参数
    var angle = 0;          // 初始角度(度)
    var xIncrement = 0;     // X轴增量
    var yIncrement = 0;     // Y轴增量
    
    // 生成滑动轨迹点(最多30个点)
    for (let i = 0; i < 30; i++) {
        // 根据角度计算Y轴增量(向下为正方向)
        yIncrement = xIncrement * calculateTangent(angle);
        yIncrement = Math.floor(yIncrement);
        
        // 防止滑动超出屏幕底部
        if ((startY + yIncrement) > device.height) {
            break;
        }
        
        // 计算当前轨迹点并添加到路径
        var currentPoint = [startX + xIncrement, startY + yIncrement];
        swipePath.push(currentPoint);
        
        // 逐步增加X轴偏移和角度,形成曲线轨迹
        xIncrement += 5;    // X轴每次增加5像素
        angle += 3;         // 角度每次增加3度,使轨迹向下弯曲
    }
    
    // 打印轨迹信息(调试用)
    log("下拉轨迹点:", swipePath);
    
    // 执行下拉手势
    gesture.apply(null, swipePath);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容