请编写一个 Hamibot 自动化脚本,具体要求如下:

  1. 脚本启动后自动打开淘宝 App。
  2. 跳转至指定的淘宝活动页面(支持用户自行修改)。
  3. 在活动页面中,循环执行以下操作,直至所有可完成的任务均已处理:
    · 查找并点击包含“去浏览”“去完成”“浏览”等关键词的任务入口按钮。
    · 进入任务详情页后,模拟用户浏览行为(等待 15~20 秒),随后按返回键回到任务列表页。
    · 回到任务列表后,查找并点击“领取”“领奖励”等按钮,以领取已完成任务的奖励。
    · 重复上述“执行任务 → 领取奖励”的过程。
  4. 当页面中不再存在可执行的任务按钮,或出现“任务已完成”“没有更多任务”等提示时,脚本自动停止运行。
  5. 脚本需包含适当的容错机制(例如处理意外弹窗、等待控件加载、避免死循环等)。
  6. 代码注释清晰
HAMI_9678480941 · 3 天前
第 1 条补充
·
3 天前

无活动页面链接,活动在淘宝→芭芭农场→农场砍价→任务砍。滑动要求用贝塞尔曲线模拟人滑动的感觉

回答

Hamibot AI
1
· 3 天前

以下是淘宝自动做任务脚本:

// 文档地址 https://docs.hamibot.com/

/**
 * 淘宝自动做任务脚本
 * 功能:自动完成淘宝活动页面的浏览任务并领取奖励
 * 
 * 使用方法:
 * 1. 修改下方的 ACTIVITY_URL 为目标活动页面链接
 * 2. 运行脚本
 * 3. 首次运行会请求截图权限,选择"始终允许"
 */

// ==================== 配置参数 ====================
var CONFIG = {
    // 活动页面链接(用户可自行修改)
    ACTIVITY_URL: "https://pages.tmall.com/wow/z/hdwk/brand2023/brand-task?wh_biz=tm&wh_weex=true&wh_htv=tm",
    
    // 浏览时间(毫秒)
    MIN_BROWSE_TIME: 15000,
    MAX_BROWSE_TIME: 20000,
    
    // 等待时间(毫秒)
    PAGE_LOAD_TIME: 3000,
    BUTTON_WAIT_TIME: 5000,
    
    // 最大循环次数(防止死循环)
    MAX_LOOP_COUNT: 30,
    
    // 调试模式
    DEBUG: true
};

// ==================== 任务按钮关键词 ====================
var TASK_KEYWORDS = [
    "去浏览", "去完成", "浏览", "去参与", "去看看", 
    "立即去", "去逛逛", "立即参与", "做任务"
];

// ==================== 奖励按钮关键词 ====================
var REWARD_KEYWORDS = [
    "领取", "领奖励", "去领取", "立即领取", 
    "收下", "领取奖励", "兑奖", "兑换"
];

// ==================== 完成提示关键词 ====================
var DONE_KEYWORDS = [
    "任务已完成", "没有更多任务", "已完成", 
    "全部完成", "任务全部完成", "没有任务了"
];

// ==================== 工具函数 ====================

// 日志输出
function log(msg) {
    if (CONFIG.DEBUG) {
        console.log("[淘宝任务] " + msg);
    }
    toastLog(msg);
}

// 随机等待
function randomSleep() {
    var time = random(CONFIG.MIN_BROWSE_TIME, CONFIG.MAX_BROWSE_TIME);
    log("等待 " + (time / 1000) + " 秒...");
    sleep(time);
}

// 关闭可能弹出的广告/弹窗
function closePopup() {
    // 常见的关闭按钮关键词
    var closeKeywords = ["关闭", "我知道了", "知道了", "取消", "稍后再说"];
    
    for (var i = 0; i < closeKeywords.length; i++) {
        var btn = text(closeKeywords[i]).findOne(500);
        if (btn && btn.clickable()) {
            btn.click();
            log("关闭弹窗: " + closeKeywords[i]);
            sleep(500);
            return true;
        }
    }
    
    // 尝试点击坐标关闭(常见于右上角X按钮)
    var width = device.width;
    click(width - 50, 100); // 右上角位置
    sleep(300);
    
    return false;
}

// 查找并点击任务按钮
function findAndClickTaskButton() {
    for (var i = 0; i < TASK_KEYWORDS.length; i++) {
        var keyword = TASK_KEYWORDS[i];
        
        // 方式1:通过文本精确匹配
        var btn = text(keyword).findOne(CONFIG.BUTTON_WAIT_TIME);
        if (btn && btn.clickable()) {
            log("找到任务按钮: " + keyword);
            btn.click();
            return true;
        }
        
        // 方式2:通过文本包含
        btn = textContains(keyword).findOne(CONFIG.BUTTON_WAIT_TIME);
        if (btn && btn.clickable()) {
            log("找到任务按钮(含): " + keyword);
            btn.click();
            return true;
        }
    }
    return false;
}

// 查找并点击奖励按钮
function findAndClickRewardButton() {
    for (var i = 0; i < REWARD_KEYWORDS.length; i++) {
        var keyword = REWARD_KEYWORDS[i];
        
        var btn = text(keyword).findOne(2000);
        if (btn && btn.clickable()) {
            log("找到奖励按钮: " + keyword);
            btn.click();
            sleep(1000);
            return true;
        }
        
        btn = textContains(keyword).findOne(2000);
        if (btn && btn.clickable()) {
            log("找到奖励按钮(含): " + keyword);
            btn.click();
            sleep(1000);
            return true;
        }
    }
    return false;
}

// 检查是否已完成所有任务
function isAllTasksDone() {
    for (var i = 0; i < DONE_KEYWORDS.length; i++) {
        var keyword = DONE_KEYWORDS[i];
        if (textContains(keyword).exists() || descContains(keyword).exists()) {
            log("检测到完成提示: " + keyword);
            return true;
        }
    }
    return false;
}

// ==================== 核心功能 ====================

// 打开淘宝并进入活动页面
function openTaobaoAndNavigate() {
    log("正在打开淘宝...");
    
    // 尝试打开淘宝
    if (!launchApp("淘宝")) {
        log("无法打开淘宝,尝试使用包名");
        if (!launch("com.taobao.taobao")) {
            log("打开淘宝失败");
            return false;
        }
    }
    
    log("等待淘宝加载...");
    sleep(5000);
    
    // 关闭可能弹出的广告
    for (var i = 0; i < 3; i++) {
        closePopup();
        sleep(500);
    }
    
    // 尝试打开活动页面
    if (CONFIG.ACTIVITY_URL && CONFIG.ACTIVITY_URL.length > 0) {
        log("尝试打开活动页面...");
        
        // 方式1:通过剪贴板打开(部分活动有效)
        setClip(CONFIG.ACTIVITY_URL);
        sleep(500);
        
        // 尝试在淘宝搜索框中粘贴
        var searchBox = id("com.taobao.taobao:id/search_bar").findOne(3000);
        if (searchBox) {
            searchBox.click();
            sleep(1000);
            // 粘贴
            var pasteBtn = text("粘贴").findOne(2000);
            if (pasteBtn) {
                pasteBtn.click();
                sleep(500);
            }
            
            // 点击搜索
            var searchBtn = text("搜索").findOne(2000);
            if (searchBtn) {
                searchBtn.click();
                sleep(3000);
            }
        }
    }
    
    log("页面加载完成");
    return true;
}

// 执行单个任务
function doTask() {
    log("开始执行任务...");
    
    // 查找任务按钮并点击
    if (!findAndClickTaskButton()) {
        log("未找到任务按钮");
        return false;
    }
    
    // 等待进入任务详情页
    log("等待任务页面加载...");
    sleep(CONFIG.PAGE_LOAD_TIME);
    
    // 关闭可能弹出的广告
    closePopup();
    sleep(500);
    
    // 模拟浏览(等待15-20秒)
    randomSleep();
    
    // 关闭可能弹出的奖励弹窗
    closePopup();
    sleep(500);
    
    // 返回任务列表
    log("返回任务列表...");
    back();
    sleep(2000);
    
    // 关闭可能弹出的广告
    closePopup();
    sleep(500);
    
    return true;
}

// 领取任务奖励
function claimReward() {
    log("尝试领取奖励...");
    
    // 多次尝试领取(可能有多个奖励)
    var claimed = false;
    for (var i = 0; i < 3; i++) {
        if (findAndClickRewardButton()) {
            claimed = true;
            sleep(1000);
            closePopup();
        } else {
            break;
        }
    }
    
    if (claimed) {
        log("奖励领取完成");
    } else {
        log("未找到可领取的奖励");
    }
    
    return claimed;
}

// ==================== 主流程 ====================

function main() {
    log("========== 淘宝自动任务脚本启动 ==========");
    
    // 申请截图权限
    if (!requestScreenCapture()) {
        log("需要截图权限才能运行");
        exit();
    }
    
    // 打开淘宝并进入活动页面
    if (!openTaobaoAndNavigate()) {
        log("打开淘宝失败,脚本退出");
        exit();
    }
    
    // 等待页面稳定
    sleep(2000);
    
    // 主循环:执行任务直到完成
    var loopCount = 0;
    var noTaskCount = 0; // 连续未找到任务的次数
    
    while (loopCount < CONFIG.MAX_LOOP_COUNT) {
        loopCount++;
        log("========== 第 " + loopCount + " 次循环 ==========");
        
        // 检查是否已完成所有任务
        if (isAllTasksDone()) {
            log("所有任务已完成!");
            break;
        }
        
        // 关闭可能弹出的广告
        closePopup();
        sleep(500);
        
        // 执行任务
        var taskFound = doTask();
        
        if (taskFound) {
            // 任务执行成功,领取奖励
            sleep(1000);
            claimReward();
            noTaskCount = 0;
        } else {
            // 未找到任务
            noTaskCount++;
            log("未找到任务,连续 " + noTaskCount + " 次");
            
            // 连续3次未找到任务,可能已完成
            if (noTaskCount >= 3) {
                log("连续多次未找到任务,可能已完成");
                if (isAllTasksDone()) {
                    log("确认所有任务已完成");
                    break;
                }
            }
        }
        
        // 每次循环后等待
        sleep(1000);
        
        // 关闭弹窗
        closePopup();
    }
    
    // 脚本结束
    log("========== 脚本执行完成 ==========");
    log("共执行 " + loopCount + " 次循环");
    
    // 提示用户
    alert("脚本执行完成", "已执行 " + loopCount + " 次任务循环,请查看奖励领取情况");
}

// 启动脚本
main();

使用说明

步骤 操作
1 修改 CONFIG.ACTIVITY_URL 为目标活动页面链接
2 在 Hamibot 客户端运行脚本
3 首次运行会请求截图权限,选择"始终允许"
4 脚本自动执行任务,完成后自动停止

配置说明

参数 说明 默认值
ACTIVITY_URL 活动页面链接 需手动填写
MIN_BROWSE_TIME 最小浏览时间 15000ms
MAX_BROWSE_TIME 最大浏览时间 20000ms
MAX_LOOP_COUNT 最大循环次数 30

注意事项

  • 淘宝界面可能经常更新,如遇找不到按钮的情况,需用布局分析工具重新定位
  • 建议在 Wi-Fi 环境下运行,避免流量消耗
  • 脚本运行期间不要操作手机

参考文档:https://docs.hamibot.com/

ℹ️ 内容由 AI 生成,可能不准确,请注意核实
Hamibot AI
1
· 3 天前

以下是淘宝芭芭农场砍价自动做任务脚本,使用贝塞尔曲线模拟人工滑动:

// 文档地址 https://docs.hamibot.com/

/**
 * 淘宝芭芭农场砍价自动任务脚本
 * 路径:淘宝 → 芭芭农场 → 农场砍价 → 任务砍
 * 特点:贝塞尔曲线模拟人工滑动
 */

// ==================== 配置参数 ====================
var CONFIG = {
    // 浏览时间(毫秒)
    MIN_BROWSE_TIME: 15000,
    MAX_BROWSE_TIME: 20000,
    
    // 等待时间
    PAGE_LOAD_TIME: 3000,
    BUTTON_WAIT_TIME: 5000,
    
    // 最大循环次数
    MAX_LOOP_COUNT:40,
    
    // 调试模式
    DEBUG: true
};

// ==================== 任务按钮关键词 ====================
var TASK_KEYWORDS = [
    "去浏览", "去完成", "浏览", "去参与", "去看看", 
    "立即去", "去逛逛", "立即参与", "做任务", "去观看"
];

// ==================== 奖励按钮关键词 ====================
var REWARD_KEYWORDS = [
    "领取", "领奖励", "去领取", "立即领取", 
    "收下", "领取奖励", "兑奖", "兑换", "确认"
];

// ==================== 完成提示关键词 ====================
var DONE_KEYWORDS = [
    "任务已完成", "没有更多任务", "已完成", 
    "全部完成", "任务全部完成", "没有任务了",
    "今日任务已完成", "暂无可领", "来晚啦"
];

// ==================== 贝塞尔曲线滑动 ====================

/**
 * 贝塞尔曲线模拟人工滑动
 * @param {number} startX 起始X坐标
 * @param {number} startY 起始Y坐标
 * @param {number} endX 结束X坐标
 * @param {number} endY 结束Y坐标
 * @param {number} duration 滑动持续时间(毫秒)
 */
function bezierSwipe(startX, startY, endX, endY, duration) {
    // 生成随机控制点,模拟人滑动时的自然弧度
    var controlX1 = startX + (endX - startX) * random(0.2, 0.4) + random(-50, 50);
    var controlY1 = startY + (endY - startY) * random(0.1, 0.3) + random(-30, 30);
    var controlX2 = startX + (endX - startX) * random(0.6, 0.8) + random(-50, 50);
    var controlY2 = startY + (endY - startY) * random(0.7, 0.9) + random(-30, 30);
    
    // 使用 gesture 函数执行贝塞尔曲线滑动
    gesture(duration, 
        [startX, startY],
        [controlX1, controlY1],
        [controlX2, controlY2],
        [endX, endY]
    );
}

/**
 * 随机贝塞尔滑动(上下滑动)
 * @param {number} times 滑动次数
 */
function randomBezierSwipeDown(times) {
    var width = device.width;
    var height = device.height;
    
    for (var i = 0; i < times; i++) {
        var startX = width / 2 + random(-30, 30);
        var startY = height * random(0.6, 0.75);
        var endX = width / 2 + random(-30, 30);
        var endY = height * random(0.25, 0.4);
        
        var duration = random(400, 700);
        
        bezierSwipe(startX, startY, endX, endY, duration);
        
        log("贝塞尔滑动 " + (i + 1) + "/" + times);
        sleep(random(300, 600));
    }
}

/**
 * 随机普通滑动(备用)
 */
function randomSwipe() {
    var width = device.width;
    var height = device.height;
    
    var startX = width / 2 + random(-50, 50);
    var startY = height * random(0.65, 0.75);
    var endX = width / 2 + random(-50, 50);
    var endY = height * random(0.25, 0.35);
    
    swipe(startX, startY, endX, endY, random(400, 700));
}

// ==================== 工具函数 ====================

function log(msg) {
    if (CONFIG.DEBUG) {
        console.log("[芭芭农场] " + msg);
    }
    toastLog(msg);
}

function randomSleep() {
    var time = random(CONFIG.MIN_BROWSE_TIME, CONFIG.MAX_BROWSE_TIME);
    log("浏览等待 " + (time / 1000) + " 秒...");
    sleep(time);
}

// 关闭弹窗
function closePopup() {
    var closeKeywords = ["关闭", "我知道了", "知道了", "取消", "稍后再说", "残忍拒绝"];
    
    for (var i = 0; i < closeKeywords.length; i++) {
        var btn = text(closeKeywords[i]).findOne(500);
        if (btn && btn.clickable()) {
            btn.click();
            log("关闭弹窗: " + closeKeywords[i]);
            sleep(300);
            return true;
        }
    }
    
    // 尝试点击右上角关闭
    click(device.width - 50, 100);
    sleep(200);
    
    return false;
}

// 查找任务按钮
function findAndClickTaskButton() {
    for (var i = 0; i < TASK_KEYWORDS.length; i++) {
        var keyword = TASK_KEYWORDS[i];
        
        var btn = text(keyword).findOne(CONFIG.BUTTON_WAIT_TIME);
        if (btn && btn.clickable()) {
            log("找到任务按钮: " + keyword);
            btn.click();
            return true;
        }
        
        btn = textContains(keyword).findOne(CONFIG.BUTTON_WAIT_TIME);
        if (btn && btn.clickable()) {
            log("找到任务按钮(含): " + keyword);
            btn.click();
            return true;
        }
    }
    return false;
}

// 查找奖励按钮
function findAndClickRewardButton() {
    for (var i = 0; i < REWARD_KEYWORDS.length; i++) {
        var keyword = REWARD_KEYWORDS[i];
        
        var btn = text(keyword).findOne(2000);
        if (btn && btn.clickable()) {
            log("找到奖励按钮: " + keyword);
            btn.click();
            sleep(1000);
            return true;
        }
        
        btn = textContains(keyword).findOne(2000);
        if (btn && btn.clickable()) {
            log("找到奖励按钮(含): " + keyword);
            btn.click();
            sleep(1000);
            return true;
        }
    }
    return false;
}

// 检查是否完成
function isAllTasksDone() {
    for (var i = 0; i < DONE_KEYWORDS.length; i++) {
        if (textContains(DONE_KEYWORDS[i]).exists() || descContains(DONE_KEYWORDS[i]).exists()) {
            log("检测到完成提示: " + DONE_KEYWORDS[i]);
            return true;
        }
    }
    return false;
}

// ==================== 核心功能 ====================

// 打开淘宝并进入芭芭农场
function openBabaFarm() {
    log("正在打开淘宝...");
    
    if (!launchApp("淘宝")) {
        if (!launch("com.taobao.taobao")) {
            log("打开淘宝失败");
            return false;
        }
    }
    
    log("等待淘宝加载...");
    sleep(5000);
    
    // 关闭启动广告
    for (var i = 0; i < 3; i++) {
        closePopup();
        sleep(500);
    }
    
    // 尝试通过搜索进入芭芭农场
    log("搜索芭芭农场...");
    var searchBox = id("com.taobao.taobao:id/search_bar").findOne(5000);
    if (searchBox) {
        searchBox.click();
        sleep(1000);
        setText("芭芭农场");
        sleep(500);
        
        var searchBtn = text("搜索").findOne(2000);
        if (searchBtn) {
            searchBtn.click();
            sleep(3000);
        }
    }
    
    // 尝试点击搜索结果中的芭芭农场
    var babaFarm = text("芭芭农场").findOne(5000);
    if (babaFarm) {
        babaFarm.click();
        log("进入芭芭农场");
        sleep(3000);
    }
    
    // 关闭弹窗
    closePopup();
    sleep(1000);
    
    // 寻找"农场砍价"入口
    log("寻找农场砍价入口...");
    var kanJia = textContains("砍价").findOne(5000);
    if (kanJia) {
        kanJia.click();
        log("进入农场砍价");
        sleep(3000);
    }
    
    // 寻找"任务砍"入口
    log("寻找任务砍入口...");
    var taskKan = textContains("任务砍").findOne(5000);
    if (taskKan) {
        taskKan.click();
        log("进入任务砍");
        sleep(3000);
    }
    
    // 关闭可能弹出的广告
    closePopup();
    sleep(1000);
    
    log("页面加载完成");
    return true;
}

// 执行任务
function doTask() {
    log("开始执行任务...");
    
    if (!findAndClickTaskButton()) {
        log("未找到任务按钮");
        return false;
    }
    
    log("等待任务页面加载...");
    sleep(CONFIG.PAGE_LOAD_TIME);
    
    // 关闭弹窗
    closePopup();
    sleep(500);
    
    // 模拟浏览
    randomSleep();
    
    // 关闭弹窗
    closePopup();
    sleep(500);
    
    // 返回
    log("返回任务列表...");
    back();
    sleep(2000);
    
    closePopup();
    sleep(500);
    
    return true;
}

// 领取奖励
function claimReward() {
    log("尝试领取奖励...");
    
    var claimed = false;
    for (var i = 0; i < 3; i++) {
        if (findAndClickRewardButton()) {
            claimed = true;
            sleep(1000);
            closePopup();
        } else {
            break;
        }
    }
    
    if (claimed) {
        log("奖励领取完成");
    } else {
        log("未找到可领取的奖励");
    }
    
    return claimed;
}

// ==================== 主流程 ====================

function main() {
    log("========== 芭芭农场砍价任务开始 ==========");
    
    // 申请截图权限
    if (!requestScreenCapture()) {
        log("需要截图权限才能运行");
        exit();
    }
    
    // 打开淘宝并进入活动页面
    if (!openBabaFarm()) {
        log("打开淘宝失败,脚本退出");
        exit();
    }
    
    // 等待页面稳定
    sleep(2000);
    
    // 先向上滑动一下,确保页面加载完整
    log("滑动页面...");
    randomBezierSwipeDown(2);
    sleep(1000);
    
    // 主循环
    var loopCount = 0;
    var noTaskCount = 0;
    
    while (loopCount < CONFIG.MAX_LOOP_COUNT) {
        loopCount++;
        log("========== 第 " + loopCount + " 次循环 ==========");
        
        // 检查是否完成
        if (isAllTasksDone()) {
            log("所有任务已完成!");
            break;
        }
        
        // 关闭弹窗
        closePopup();
        sleep(500);
        
        // 执行任务
        var taskFound = doTask();
        
        if (taskFound) {
            sleep(1000);
            claimReward();
            noTaskCount = 0;
        } else {
            noTaskCount++;
            log("未找到任务,连续 " + noTaskCount + " 次");
            
            // 滑动一下再试
            if (noTaskCount >= 2) {
                log("滑动页面尝试加载更多任务...");
                randomBezierSwipeDown(1);
                sleep(1000);
            }
            
            // 连续多次未找到任务
            if (noTaskCount >= 4) {
                log("多次未找到任务,可能已完成");
                if (isAllTasksDone()) {
                    log("确认所有任务已完成");
                    break;
                }
            }
        }
        
        sleep(1000);
        closePopup();
    }
    
    log("========== 脚本执行完成 ==========");
    log("共执行 " + loopCount + " 次循环");
    
    alert("脚本执行完成", "已执行 " + loopCount + " 次任务循环");
}

main();

使用说明

步骤 操作
1 在 Hamibot 客户端运行脚本
2 首次运行会请求截图权限,选择"始终允许"
3 脚本会自动打开淘宝 → 搜索芭芭农场 → 进入任务
4 自动执行任务并领取奖励

贝塞尔滑动说明

函数 用途
bezierSwipe(x1, y1, x2, y2, duration) 贝塞尔曲线滑动
randomBezierSwipeDown(times) 随机多次上滑
randomSwipe() 普通随机滑动

贝塞尔曲线通过生成随机控制点,使滑动轨迹带有自然的弧度,更像人工操作。

注意事项

  • 淘宝界面可能更新,如遇找不到按钮需用布局分析调整
  • 建议保持屏幕常亮
  • 脚本运行期间不要操作手机

参考文档:https://docs.hamibot.com/

ℹ️ 内容由 AI 生成,可能不准确,请注意核实