下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1139
该框架主要包含以下技术亮点:
扩展功能建议:
注意事项:
"ui";
// 全局配置
const CONFIG = {
version: "v3.2",
maxDailyAdd: 50, // 每日上限
defaultInterval: 15, // 默认间隔(秒)
retryTimes: 3 // 失败重试次数
};
// UI界面
ui.layout(
<vertical padding="16" bg="#f5f5f5">
<text textSize="20sp" textColor="#07C160" text="微信批量加好友工具"/>
<horizontal gravity="center">
<text text="数据来源:" marginRight="8"/>
<radio-group id="sourceType">
<radio text="群成员" checked="true"/>
<radio text="手机号列表"/>
<radio text="通讯录导入"/>
</radio-group>
</horizontal>
<horizontal>
<text text="目标群聊:"/>
<input id="targetGroup" hint="输入群名称关键词" layout_weight="1"/>
<button id="scanGroup" text="扫描"/>
</horizontal>
<horizontal>
<text text="验证消息:"/>
<input id="greetMsg" text="您好,商务合作请通过" layout_weight="1"/>
</horizontal>
<horizontal>
<text text="添加间隔:"/>
<input id="interval" text="15" inputType="number" suffix="秒"/>
<text text="每日上限:"/>
<input id="dailyLimit" text="30" inputType="number"/>
</horizontal>
<horizontal>
<button id="start" text="开始执行" bg="#07C160" textColor="#fff"/>
<button id="stop" text="停止" bg="#FF4D4F" textColor="#fff"/>
<button id="export" text="导出结果"/>
</horizontal>
<progressbar id="progress" indeterminate="false" max="100"/>
<text text="执行日志:" textSize="16sp"/>
<scrollbar>
<text id="log" textSize="14sp"/>
</scrollbar>
</vertical>
);
// 核心功能模块
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("开始扫描群成员...");
// 实际实现需添加群成员扫描逻辑
});
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。