前言
大家好,我是鲫小鱼。是一名不写前端代码
的前端工程师,热衷于分享非前端的知识,带领切图仔逃离切图圈子,欢迎关注我,微信公众号:《鲫小鱼不正经》
。欢迎点赞、收藏、关注,一键三连!!
第五章:实战项目------自动脚本
一、项目背景与理论讲解
自动签到是移动端自动化的高频需求,常见于打卡、积分、福利领取等场景。通过 Auto.js,可以实现定时自动打开 App、定位签到入口、自动点击、结果反馈、异常处理等全流程自动化。
1.1 适用场景
- 每日App签到(如京东、淘宝、B站、网易云等)
- 自动打卡(如企业微信、钉钉、学校/公司考勤)
- 自动领取积分、福利、抽奖
- 定时执行、批量账号签到
1.2 技术要点
- App自动启动与页面跳转
- 多种控件查找与点击
- 异常弹窗处理与容错
- 定时任务与多账号循环
- 日志与结果反馈
- 数据存储与签到历史
- UI交互与参数配置
二、需求分析与项目结构
2.1 需求拆解
- 支持定时自动签到
- 支持多App、多账号签到
- 支持签到结果日志与历史记录
- 支持异常弹窗自动处理
- 支持UI界面配置参数
- 支持一键手动触发与定时自动执行
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 配置
- 支持脚本加密、模块化、插件化
- 支持自动升级与热更新
最后感谢阅读!欢迎关注我,微信公众号:
《鲫小鱼不正经》
。欢迎点赞、收藏、关注,一键三连!!!