Auto.js 入门指南(五)实战项目——自动脚本

前言

大家好,我是鲫小鱼。是一名不写前端代码的前端工程师,热衷于分享非前端的知识,带领切图仔逃离切图圈子,欢迎关注我,微信公众号:《鲫小鱼不正经》。欢迎点赞、收藏、关注,一键三连!!

第五章:实战项目------自动脚本


一、项目背景与理论讲解

自动签到是移动端自动化的高频需求,常见于打卡、积分、福利领取等场景。通过 Auto.js,可以实现定时自动打开 App、定位签到入口、自动点击、结果反馈、异常处理等全流程自动化。

1.1 适用场景

  • 每日App签到(如京东、淘宝、B站、网易云等)
  • 自动打卡(如企业微信、钉钉、学校/公司考勤)
  • 自动领取积分、福利、抽奖
  • 定时执行、批量账号签到

1.2 技术要点

  • App自动启动与页面跳转
  • 多种控件查找与点击
  • 异常弹窗处理与容错
  • 定时任务与多账号循环
  • 日志与结果反馈
  • 数据存储与签到历史
  • UI交互与参数配置

二、需求分析与项目结构

2.1 需求拆解

  1. 支持定时自动签到
  2. 支持多App、多账号签到
  3. 支持签到结果日志与历史记录
  4. 支持异常弹窗自动处理
  5. 支持UI界面配置参数
  6. 支持一键手动触发与定时自动执行

2.2 目录结构设计

plaintext 复制代码
autojs-signin/
├── main.js                # 主入口脚本
├── config/
│   └── apps.json          # 支持签到的App配置
├── modules/
│   ├── signin.js          # 核心签到逻辑
│   ├── logger.js          # 日志模块
│   └── utils.js           # 工具函数
├── data/
│   └── history.json       # 签到历史记录
├── ui/
│   └── config_ui.js       # 配置界面
├── logs/
│   └── signin.log         # 日志输出
├── README.md
└── package.json

三、UI设计与参数配置

3.1 配置界面设计

javascript 复制代码
"ui";
ui.layout(
    <vertical padding="16">
        <text textSize="22sp" textColor="#222">自动签到脚本配置</text>
        <input id="interval" hint="签到间隔(分钟)" inputType="number" />
        <checkbox id="autoStart" text="开机自动签到" />
        <button id="btnStart" text="立即签到" />
        <button id="btnHistory" text="查看历史" />
        <text id="result" textColor="#666" />
    </vertical>
);
ui.btnStart.on("click", () => {
    threads.start(function(){
        let res = require("../modules/signin.js").run();
        ui.result.setText(res ? "签到成功" : "签到失败");
    });
});
ui.btnHistory.on("click", () => {
    let history = files.read("../data/history.json");
    dialogs.alert("签到历史", history || "暂无记录");
});

3.2 配置文件 apps.json 示例

json 复制代码
[
  {
    "name": "京东",
    "package": "com.jingdong.app.mall",
    "signinText": "签到",
    "successText": "已签到",
    "entryActivity": ".main.MainActivity"
  },
  {
    "name": "B站",
    "package": "tv.danmaku.bili",
    "signinText": "打卡",
    "successText": "已打卡",
    "entryActivity": ".ui.main.MainActivity"
  }
]

四、核心代码实现与分步详解

4.1 主入口 main.js

javascript 复制代码
// main.js
const config = require("./config/apps.json");
const signin = require("./modules/signin.js");
const logger = require("./modules/logger.js");

// 定时任务
setInterval(() => {
    logger.log("开始自动签到");
    config.forEach(app => signin.run(app));
}, 1000 * 60 * 60); // 每小时执行一次

// 支持手动触发
signin.run(config[0]);

4.2 核心签到逻辑 modules/signin.js

javascript 复制代码
// modules/signin.js
const logger = require("./logger.js");
function run(app) {
    logger.log(`启动${app.name}`);
    app.launchApp && app.launchApp(app.package);
    sleep(5000);
    if (text(app.signinText).exists()) {
        text(app.signinText).findOne().click();
        sleep(2000);
        if (text(app.successText).exists()) {
            logger.log(`${app.name}签到成功`);
            saveHistory(app.name, true);
            return true;
        }
    }
    logger.log(`${app.name}签到失败`);
    saveHistory(app.name, false);
    return false;
}
function saveHistory(name, success) {
    let history = files.exists("../data/history.json") ? JSON.parse(files.read("../data/history.json")) : [];
    history.push({ name, success, time: new Date().toLocaleString() });
    files.write("../data/history.json", JSON.stringify(history, null, 2));
}
module.exports = { run };

4.3 日志模块 modules/logger.js

javascript 复制代码
// modules/logger.js
function log(msg) {
    let line = `[${new Date().toLocaleTimeString()}] ${msg}`;
    files.append("../logs/signin.log", line + "\n");
    toast(msg);
}
module.exports = { log };

4.4 工具函数 modules/utils.js

javascript 复制代码
// modules/utils.js
function waitForAndClick(selector, timeout = 8000) {
    let obj = selector.findOne(timeout);
    if (obj) {
        obj.click();
        return true;
    }
    return false;
}
module.exports = { waitForAndClick };

五、分步详解与进阶优化

5.1 多账号循环签到

  • 支持账号切换、自动登录、批量签到
  • 可通过配置文件维护账号信息

5.2 异常弹窗与容错处理

  • 检查并自动关闭弹窗、广告、更新提示
  • 失败自动重试、超时退出、错误日志

5.3 定时任务与后台运行

  • 使用 setInterval、timers、threads 实现定时与多线程
  • 支持开机自启、定时唤醒、后台静默运行

5.4 数据存储与历史查询

  • 签到结果写入本地 JSON 文件
  • 支持历史查询、导出、统计

5.5 UI交互与参数配置

  • 支持自定义签到间隔、App列表、账号信息
  • 支持一键清空历史、导出日志

六、性能优化建议

  • 控件查找加超时,避免死循环
  • 合理 sleep,减少等待时间
  • 日志分级输出,避免刷屏
  • 多线程处理耗时任务,主线程只做调度
  • 定期清理历史、日志,防止文件过大
  • 兼容不同分辨率、系统版本,提升适配性
  • 异常捕获,防止脚本崩溃

七、常见问题与解决方案

问题 解决方案
签到按钮找不到 检查控件文本、id、desc,尝试多种查找方式
App 启动失败 检查包名、权限、App 是否安装
弹窗/广告干扰 增加弹窗检测与自动关闭逻辑
日志/历史无记录 检查文件路径、读写权限、JSON 格式
多账号切换失败 检查账号配置、登录逻辑、超时处理
定时任务不生效 检查 setInterval、线程、App 后台限制
脚本卡顿/崩溃 优化控件查找、减少死循环、加异常捕获
兼容性问题 适配不同品牌、系统、App 版本

八、扩展思路与进阶玩法

  • 支持 OCR 识别签到验证码
  • 支持图色找图签到
  • 支持微信/钉钉/企业微信等多平台打卡
  • 支持自动截图、结果推送到微信/邮箱/钉钉
  • 支持云端同步、远程控制、Web 配置
  • 支持脚本加密、模块化、插件化
  • 支持自动升级与热更新

最后感谢阅读!欢迎关注我,微信公众号:《鲫小鱼不正经》。欢迎点赞、收藏、关注,一键三连!!!

相关推荐
又又呢43 分钟前
前端面试题总结——webpack篇
前端·webpack·node.js
dog shit2 小时前
web第十次课后作业--Mybatis的增删改查
android·前端·mybatis
我有一只臭臭2 小时前
el-tabs 切换时数据不更新的问题
前端·vue.js
七灵微2 小时前
【前端】工具链一本通
前端
科技道人3 小时前
Android15 launcher3
android·launcher3·android15·hotseat
Nueuis3 小时前
微信小程序前端面经
前端·微信小程序·小程序
_r0bin_5 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君5 小时前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
potender5 小时前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11086 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5