下载 Hamibot, autojs6 , 开启无障碍和允许悬浮权限
hamibot.cn/download
github.com/SuperMonste…
// 启用按键监听
events.observeKey();
// 监听音量减少键按下事件
//events.onKeyDown("volume_down", function(event) {
// stopScript();
//});
// 确保无障碍服务已开启
if (!auto.service) {
toast("请开启无障碍权限");
auto.waitFor();
}
// 创建悬浮控制按钮
var floatyWindow = floaty.rawWindow(
<frame gravity="center" bg="#aa000000">
<vertical padding="8" bg="#ff009688" cornerRadius="8">
<text id="controlText" text="▶️ 开始" textSize="16sp" textColor="#ffffff" margin="8"/>
</vertical>
</frame>
);
// 设置悬浮窗位置
floatyWindow.setPosition(device.width * 0.8, device.height * 0.3);
floatyWindow.setTouchable(true);
// 脚本运行状态
var isRunning = false;
var mainThread = null;
// 控制按钮点击事件
floatyWindow.controlText.click(() => {
if (isRunning) {
stopScript();
} else {
startScript();
}
});
// 开始脚本
function startScript() {
if (isRunning) return;
isRunning = true;
floatyWindow.controlText.text("⏹️ 停止");
// toast("脚本开始运行");
// 在新线程中运行主逻辑
mainThread = threads.start(function() {
try {
runMainLogic();
} catch (e) {
// console.error("脚本异常: " + e);
// console.log('脚本异常停止')
stopScript();
}
});
}
// 停止脚本
function stopScript() {
if (!isRunning) return;
isRunning = false;
// toast("正在停止脚本...");
floatyWindow.controlText.text("▶️ 开始");
// 停止主线程
if (mainThread) {
mainThread.interrupt();
mainThread = null;
}
// 关闭所有可能打开的窗口
// for (let i = 0; i < 5; i++) {
// back();
// sleep(500);
// }
// console.hide();
toast("脚本已停止");
}
// 主逻辑函数
function runMainLogic() {
// console.show();
toast("脚本运行中,点击悬浮按钮停止");
var wechatAccounts = [];
var nicknames = [];
var blacklists = []; // 黑名单
// 确保在微信主界面
ensureWechatMainPage();
while (isRunning) {
// 确保在通讯录页面
if (!ensureContactsPage()) {
if (!isRunning) break;
continue;
}
// 查找列表父容器
var parent = id("mg").findOne(2000);
if (!parent) {
console.log("未找到列表容器,等待...");
sleep(2000);
continue;
}
var children = parent.children();
var total = children.size();
// console.log("当前页联系人数量:", total);
// 遍历当前页元素
for (var i = 0; i < total && isRunning; i++) {
var currentChild = children.get(i);
if (!currentChild) continue;
var target = currentChild.findOne(id("kbq"));
if (target) {
var nickname = target.text();
if (!nickname || nicknames.includes(nickname)) {
// console.log(`已处理: ${nickname} (${nicknames.length})`);
continue;
}
nicknames.push(nickname);
console.log(`查看: ${nickname} (${nicknames.length})`);
// 进入详情页
safeClick(target);
sleep(1500);
// 判断是否为好友
if (className("android.widget.LinearLayout").depth(22).findOne(1000)) {
var account = id("cff").findOne(1000);
if (account) {
var wxAccount = account.text().replace("微信号:", "").trim();
if (wxAccount && !wechatAccounts.includes(wxAccount)) {
wechatAccounts.push(wxAccount);
// console.log(`微信号: ${wxAccount}`);
// 执行转账检测
if (checkAccount(wxAccount, nickname)) {
blacklists.push(wxAccount);
// console.log("已添加到黑名单");
}
}
}
}
backToContacts();
// sleep(1000);
}
}
// 上滑加载下一页
if (isRunning) {
console.log('黑名单', blacklists);
performUpSwipe();
sleep(1000);
ensureContactsPage();
sleep(3000);
}
}
// 显示最终结果
// console.log("\n===== 扫描结果 =====");
// console.log("有效账号:", wechatAccounts.length, "个");
// console.log("检测昵称:", nicknames.length, "个");
// console.log("黑名单:", blacklists.length, "个", blacklists);
}
// 账号检测逻辑
function checkAccount(wxAccount, nickname) {
// 点击发消息
if (!safeClick(id("o3b").text("发消息").findOne(2000))) {
console.log("找不到发消息按钮");
return false;
}
sleep(1500);
// 点击+
if (!safeClick(id("bqn").findOne(2000))) {
console.log("找不到+按钮");
back();
return false;
}
// sleep(500);
// 点击转账
var transferBtn = className("android.widget.TextView").text("转账").findOne(2000);
if (!transferBtn) {
console.log("找不到转账按钮");
back();
back();
return false;
}
safeClick(transferBtn);
// sleep(1500);
// 输入金额
var amountInput = id("pbn").findOne(1000);
if (!amountInput) {
console.log("找不到金额输入框");
back();
back();
back();
return false;
}
amountInput.setText("0.01");
sleep(800);
// 点击转账按钮
var confirmBtn = id("keyboard_action").findOne(1000);
if (!confirmBtn) {
console.log("找不到转账按钮");
back();
back();
back();
return false;
}
confirmBtn.click();
sleep(1500);
// 检测是否被删除
var result = false;
var alertBtn = id("mm_alert_ok_btn").findOne(2000);
if (alertBtn) {
console.log('删除账号:', wxAccount, '昵称:',nickname);
safeClick(alertBtn);
result = true;
} else {
// console.log("正常好友");
// 关闭转账窗口
back();
}
// 返回通讯录
// backToContacts();
return result;
}
// ===== 增强的页面导航函数 =====
// 确保在微信主界面
function ensureWechatMainPage() {
// 检查是否已在微信主界面
if (currentPackage() == "com.tencent.mm" && id("icon_tv").findOne(1000)) {
return true;
}
if(txlSelect() || homeSelect()){
return true;
}
// console.log("启动微信...");
launch("com.tencent.mm");
// sleep(3000);
// 等待微信启动完成
if (!id("icon_tv").waitFor(10000)) {
toast("微信启动失败");
return false;
}
return true;
}
// 确保在通讯录页面
function ensureContactsPage() {
// 检查是否已在通讯录页面
if (txlSelect()) {
return true;
}
// console.log("切换到通讯录页面...");
// 尝试点击通讯录标签
const txlElement = id("icon_tv").className("android.widget.TextView").text("通讯录").findOne(3000);
if (txlElement) {
safeClick(txlElement);
// sleep(1000);
// 再次检查是否切换成功
if (txlSelect()) {
return true;
}
}
// toast("无法进入通讯录页面");
return false;
}
// ===== 辅助函数 =====
/**
* 通用点击方法
* @param {UiObject} element - 要点击的元素
* @param {number} [pressTime=200] - 按压时长
* @returns {boolean} - 是否点击成功
*/
function safeClick(element, pressTime = 200) {
if (!element) {
// console.log("safeClick: 元素不存在");
return false;
}
try {
const bounds = element.bounds();
press(bounds.centerX(), bounds.centerY(), pressTime);
sleep(500);
return true;
} catch (e) {
// console.log("点击失败: " + e);
return false;
}
}
// 确保回到通讯录页面
function backToContacts() {
let retryCount = 5;
while (retryCount-- > 0 && isRunning) {
if (txlSelect()) {
return true;
}else{
if (homeSelect()) {
ensureContactsPage()
return true
}
}
back();
sleep(500);
// 检查是否回到通讯录
if (txlSelect()) {
return true;
}else{
if (homeSelect()) {
ensureContactsPage()
return true
}
}
}
// console.log("无法返回通讯录");
return false;
}
// 检查是否在通讯录页面
function txlSelect() {
const txlElement = id("icon_tv")
.className("android.widget.TextView")
.text("通讯录")
.findOne(1000);
if (txlElement && txlElement.selected()) {
return true;
}
return false;
}
function homeSelect() {
const txlElement = id("icon_tv")
.className("android.widget.TextView")
.text("通讯录")
.findOne(1000);
if (txlElement && !txlElement.selected()) {
return true;
}
return false;
}
// 上滑操作
function performUpSwipe() {
const startX = device.width / 2;
const startY = device.height * 0.65;
const endY = device.height * 0.4;
swipe(startX, startY, startX, endY, 500);
sleep(1000);
}
// 初始提示
// toast("点击悬浮按钮开始脚本");