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 配置
  • 支持脚本加密、模块化、插件化
  • 支持自动升级与热更新

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

相关推荐
旧曲重听110 分钟前
最快实现的前端灰度方案
前端·程序人生·状态模式
默默coding的程序猿19 分钟前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
夏梦春蝉25 分钟前
ES6从入门到精通:常用知识点
前端·javascript·es6
归于尽31 分钟前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课32 分钟前
React useEffect 详解与运用
前端·react.js
我想说一句33 分钟前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript
funnycoffee12334 分钟前
Huawei 6730 Switch software upgrade example版本升级
java·前端·华为
小鱼小鱼干36 分钟前
【Tauri】Tauri中Channel的使用
前端
拾光拾趣录38 分钟前
CSS全面指南:从基础布局到高级技巧与实践
前端·css
南屿im41 分钟前
基于 Promise 封装 Ajax 请求:从 XMLHttpRequest 到现代化异步处理
前端·javascript