请编写一个 Hamibot 自动化脚本,具体要求如下:
- 脚本启动后自动打开淘宝 App。
- 跳转至指定的淘宝活动页面(支持用户自行修改)。
- 在活动页面中,循环执行以下操作,直至所有可完成的任务均已处理:
· 查找并点击包含“去浏览”“去完成”“浏览”等关键词的任务入口按钮。
· 进入任务详情页后,模拟用户浏览行为(等待 15~20 秒),随后按返回键回到任务列表页。
· 回到任务列表后,查找并点击“领取”“领奖励”等按钮,以领取已完成任务的奖励。
· 重复上述“执行任务 → 领取奖励”的过程。 - 当页面中不再存在可执行的任务按钮,或出现“任务已完成”“没有更多任务”等提示时,脚本自动停止运行。
- 脚本需包含适当的容错机制(例如处理意外弹窗、等待控件加载、避免死循环等)。
- 代码注释清晰
第 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 环境下运行,避免流量消耗
- 脚本运行期间不要操作手机
ℹ️ 内容由 AI 生成,可能不准确,请注意核实
以下是淘宝芭芭农场砍价自动做任务脚本,使用贝塞尔曲线模拟人工滑动:
// 文档地址 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() |
普通随机滑动 |
贝塞尔曲线通过生成随机控制点,使滑动轨迹带有自然的弧度,更像人工操作。
注意事项
- 淘宝界面可能更新,如遇找不到按钮需用布局分析调整
- 建议保持屏幕常亮
- 脚本运行期间不要操作手机
ℹ️ 内容由 AI 生成,可能不准确,请注意核实