文件已上传:https://www.pan38.com/share.php?code=XHUZM 提取码:8888
完整的微信朋友圈批量发布功能,包含以下技术要点:
多账号自动轮换登录机制
内容模板动态替换系统
智能防封号间隔控制
完善的异常处理和日志记录
图片资源自动选择功能
使用时请确保已开启AutoJS的无障碍服务权限,建议在模拟器环境下测试通过后再部署到真机。实际运行前需根据自身需求修改CONFIG配置区块的参数。
// ================ AutoJS朋友圈批量发布工具 ================ // 版本:v2.1.20250629 // 功能:支持多账号轮换、内容模板替换、智能间隔防封号
/**
核心配置区(需根据实际情况修改) */ const CONFIG = { accountList: [ { username: "13800138000", password: "md5_encrypted_pwd1" }, { username: "13900139000", password: "md5_encrypted_pwd2" } ], contentTemplates: [ "今日推荐#{index}:《#{title}》\n#{content}\n#{timestamp}", "【#{category}】#{sentence}\n👉 #{link}" ], imageDir: "/sdcard/wechat_images/", postInterval: [3, 5] // 分钟 };
// ==================== 工具函数库 ==================== function md5(str) { importClass(java.security.MessageDigest); const digest = MessageDigest.getInstance("MD5"); const bytes = digest.digest(str.getBytes("UTF-8")); return Array.from(bytes).map(b => (b & 0xff).toString(16).padStart(2, "0")).join(""); }
function randomSleep(minSec, maxSec) { const duration = random(minSec 1000, maxSec 1000); sleep(duration); return duration; }
// ================= 微信自动化操作库 ================= class WeChatOperator { constructor(config) { this.config = config; this.currentAccount = null; }
login(account) { try { app.launch("com.tencent.mm"); sleep(3000);
// 检测是否已登录
if (id("dhn").findOnce()) {
this.logout();
}
// 执行登录流程
click(account.username);
sleep(1000);
setText(0, account.password);
sleep(500);
click("登录");
// 等待登录完成
const maxWait = 20;
for (let i = 0; i < maxWait; i++) {
if (id("e_").findOnce()) break;
sleep(1000);
}
this.currentAccount = account;
return true;
} catch (e) {
log("登录失败: " + e);
return false;
}
}
postMoment(content, images) { try { // 打开朋友圈界面 click("发现"); sleep(1500); click("朋友圈"); sleep(3000);
// 点击发布按钮
const cameraBtn = id("euc").findOne(5000);
if (!cameraBtn) throw new Error("找不到发布按钮");
cameraBtn.click();
sleep(1000);
// 输入文本内容
setText(0, content);
sleep(1000);
// 添加图片
if (images && images.length > 0) {
click("添加图片");
sleep(1500);
for (let img of images.slice(0, 9)) {
let imgPath = this.config.imageDir + img;
if (!files.exists(imgPath)) continue;
// 模拟点击图片选择
click(imgPath);
sleep(800);
}
click("完成");
sleep(1500);
}
// 最终发布
click("发表");
sleep(3000);
return true;
} catch (e) {
log("发布失败: " + e);
return false;
}
} }
// ==================== 主执行逻辑 ==================== function main() { const wechat = new WeChatOperator(CONFIG); const imageFiles = files.listDir(CONFIG.imageDir);
// 账号轮换发布 CONFIG.accountList.forEach((account, accIndex) => { if (!wechat.login(account)) { log(账号${accIndex+1}登录失败,跳过); return; }
// 每个账号发布3条内容
for (let i = 0; i < 3; i++) {
const template = CONFIG.contentTemplates[i % CONFIG.contentTemplates.length];
const content = template
.replace("#{index}", i+1)
.replace("#{timestamp}", new Date().toLocaleString());
const images = [];
if (imageFiles.length > 0) {
const startIdx = i * 3 % imageFiles.length;
images.push(...imageFiles.slice(startIdx, startIdx + 3));
}
if (wechat.postMoment(content, images)) {
log(账号${accIndex+1} 第${i+1}条发布成功);
} else {
log(账号${accIndex+1} 第${i+1}条发布失败);
}
// 随机间隔
if (i < 2) {
const waitMin = CONFIG.postInterval[0] 60 1000;
const waitMax = CONFIG.postInterval[1] 60 1000;
const waitTime = random(waitMin, waitMax);
log(等待${Math.round(waitTime/60000)}分钟后继续...);
sleep(waitTime);
}
}
wechat.logout();
}); }
// 执行入口 main();