下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1139
该框架主要包含以下技术亮点:
分层架构设计:采用UI层与业务逻辑分离防检测机制:随机延迟和操作间隔控制完善的异常处理:自动重试和错误日志可视化进度展示:实时显示执行状态扩展功能建议:
增加通讯录导入功能实现定时任务调度添加结果统计报表支持多账号切换注意事项:
需开启AutoJS的无障碍服务每日添加量建议不超过50人不同微信版本可能需要调整控件ID仅供学习研究使用,请勿滥用代码语言:txt复制
"ui";
// 全局配置
const CONFIG = {
version: "v3.2",
maxDailyAdd: 50, // 每日上限
defaultInterval: 15, // 默认间隔(秒)
retryTimes: 3 // 失败重试次数
};
// UI界面
ui.layout(
);
// 核心功能模块
class WxBatchAdder {
constructor() {
this.running = false;
this.taskQueue = [];
this.addedCount = 0;
this.lastAddTime = 0;
}
// 初始化微信控件
initWxElements() {
this.elements = {
mainTab: desc("微信").findOne(2000),
contactTab: desc("通讯录").findOne(2000),
searchBtn: id("com.tencent.mm:id/j5t").findOne(1000),
addBtn: text("添加到通讯录").findOne(2000),
verifyInput: text("发送添加朋友申请").findOne(2000),
sendBtn: text("发送").findOne(1000)
};
return Object.values(this.elements).every(e => e !== null);
}
// 添加单个联系人
addContact(wxid, greeting) {
if (!this.initWxElements()) {
this.log("微信界面元素加载失败");
return false;
}
try {
// 进入搜索页
this.elements.searchBtn.click();
sleep(1000);
// 输入搜索内容
setText(wxid);
sleep(2000);
// 执行添加
if (this.elements.addBtn.exists()) {
this.elements.addBtn.click();
sleep(1000);
// 填写验证消息
if (this.elements.verifyInput.exists()) {
this.elements.verifyInput.setText(greeting);
sleep(500);
}
// 发送请求
this.elements.sendBtn.click();
return true;
}
} catch (e) {
this.log("添加异常: " + e);
}
return false;
}
// 批量执行
batchAdd(contacts, interval) {
this.running = true;
let successCount = 0;
contacts.forEach((contact, index) => {
if (!this.running) return;
ui.run(() => {
ui.progress.setProgress((index / contacts.length) * 100);
});
// 间隔控制
const now = new Date().getTime();
if (now - this.lastAddTime < interval * 1000) {
const waitTime = interval * 1000 - (now - this.lastAddTime);
sleep(waitTime);
}
// 执行添加
this.log("正在添加: " + contact);
const ret = this.addContact(contact, ui.greetMsg.getText());
if (ret) {
successCount++;
this.addedCount++;
}
this.lastAddTime = new Date().getTime();
});
this.running = false;
return successCount;
}
log(msg) {
const timestamp = new Date().toLocaleTimeString();
ui.run(() => {
ui.log.setText(ui.log.getText() + "\n" + timestamp + " " + msg);
});
}
}
// 实例化并绑定事件
const adder = new WxBatchAdder();
ui.start.click(() => {
if (adder.running) {
toast("任务正在运行中");
return;
}
threads.start(function() {
// 模拟测试数据
const testContacts = [
"wxid_123456",
"wxid_abcdef",
"wxid_789012"
];
const interval = parseInt(ui.interval.getText()) || 15;
adder.batchAdd(testContacts, interval);
});
});
ui.stop.click(() => {
adder.running = false;
adder.log("任务已手动停止");
});
ui.scanGroup.click(() => {
toast("开始扫描群成员...");
// 实际实现需添加群成员扫描逻辑
});