微信批量删除好友检测

112 阅读4分钟

下载 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("点击悬浮按钮开始脚本");