下载地址:https://www.pan38.com/share.php?code=JCnzE 提取密码:7789
utoJS脚本实现了抖音小店数据采集的核心功能,包括商品搜索、数据采集、自动私信、关注和点赞等功能。使用时需要确保已开启AutoJS的无障碍服务权限,当前还是给大家学习用的,因为我之前给人家定制过的,这个脚本也是给其他客户定制的,放了一段时间,但是我今天拿出来跑了一下发现还能正常运行,干脆就分享出来给大家学习用,写的时候还是耗费了不少精力。
源码部分:【autojs的哈,一气呵成,在autojspro9.0下正常运行】
// 抖音小店数据采集工具 v1.0
// 功能:采集商品评分、店铺信誉、销量数据,支持自动私信和关注
"ui";
ui.layout(
);
// 全局变量
let isRunning = false;
let collectedData = [];
const MAX_PAGE = 5; // 最大翻页次数
// 主功能实现
function main() {
// 初始化事件监听
ui.search.click(() => {
if (checkRunning()) return;
startTask("search");
});
ui.collect.click(() => {
if (checkRunning()) return;
startTask("collect");
});
ui.message.click(() => {
if (checkRunning()) return;
startTask("message");
});
ui.follow.click(() => {
if (checkRunning()) return;
startTask("follow");
});
ui.like.click(() => {
if (checkRunning()) return;
startTask("like");
});
ui.stop.click(() => {
stopTask();
});
}
// 任务控制函数
function startTask(type) {
isRunning = true;
ui.progress.visibility = "visible";
threads.start(function() {
try {
switch(type) {
case "search":
searchProducts();
break;
case "collect":
collectData();
break;
case "message":
sendMessages();
break;
case "follow":
autoFollow();
break;
case "like":
autoLike();
break;
}
} catch(e) {
logError(e);
} finally {
stopTask();
}
});
}
// 商品搜索功能
function searchProducts() {
let keyword = ui.keywords.text();
if (!keyword) {
toast("请输入搜索关键词");
return;
}
log("开始搜索商品: " + keyword);
launchApp("抖音");
sleep(3000);
// 进入搜索页
click(device.width - 50, 100); // 点击搜索按钮
sleep(2000);
// 输入关键词
setText(0, keyword);
sleep(1000);
click("搜索");
sleep(3000);
// 切换到商品标签
let shopTab = text("商品").findOne(5000);
if (shopTab) {
shopTab.click();
sleep(3000);
} else {
throw new Error("未找到商品标签");
}
// 滚动采集商品
let products = [];
for (let i = 0; i < MAX_PAGE; i++) {
let items = className("android.view.View").depth(15).find();
items.forEach(item => {
let product = parseProductItem(item);
if (product) {
products.push(product);
log("发现商品: " + product.title);
}
});
// 滚动屏幕
swipe(device.width / 2, device.height * 0.8,
device.width / 2, device.height * 0.2, 500);
sleep(3000);
}
collectedData = products;
log("搜索完成,共找到 " + products.length + " 个商品");
}
// 解析商品信息
function parseProductItem(item) {
try {
let bounds = item.bounds();
let titleObj = textMatches(/.*/).boundsInside(bounds.left, bounds.top, bounds.right, bounds.bottom)
.depth(16).findOne();
let priceObj = textMatches(/\d+.\d+/).boundsInside(bounds.left, bounds.top, bounds.right, bounds.bottom)
.depth(16).findOne();
let salesObj = textMatches(/已售\d+/).boundsInside(bounds.left, bounds.top, bounds.right, bounds.bottom)
.depth(16).findOne();
if (!titleObj || !priceObj) return null;
return {
title: titleObj.text(),
price: priceObj.text(),
sales: salesObj ? salesObj.text() : "0",
bounds: bounds
};
} catch(e) {
return null;
}
}
// 数据采集功能
function collectData() {
if (collectedData.length === 0) {
toast("请先搜索商品");
return;
}
log("开始采集商品详情数据...");
launchApp("抖音");
sleep(3000);
for (let i = 0; i < Math.min(collectedData.length, 10); i++) {
let product = collectedData[i];
log("正在采集: " + product.title);
// 点击进入商品详情
click(product.bounds.centerX(), product.bounds.centerY());
sleep(5000);
// 采集店铺信息
let shopInfo = collectShopInfo();
Object.assign(product, shopInfo);
// 返回商品列表
back();
sleep(3000);
}
log("数据采集完成");
saveToFile();
}
// 采集店铺信息
function collectShopInfo() {
let result = {};
// 查找店铺名称
let shopName = textMatches(/.*/).depth(18).findOne(3000);
if (shopName) {
result.shopName = shopName.text();
}
// 查找评分
let score = textMatches(/\d+\.\d+/).depth(18).findOne(3000);
if (score) {
result.score = score.text();
}
// 查找粉丝数
let fans = textMatches(/粉丝.*/).depth(18).findOne(3000);
if (fans) {
result.fans = fans.text();
}
return result;
}
// 自动私信功能
function sendMessages() {
if (collectedData.length === 0) {
toast("请先搜索商品");
return;
}
log("开始批量私信...");
launchApp("抖音");
sleep(3000);
for (let i = 0; i < Math.min(collectedData.length, 5); i++) {
let product = collectedData[i];
log("正在处理: " + product.title);
// 点击进入商品详情
click(product.bounds.centerX(), product.bounds.centerY());
sleep(5000);
// 进入店铺主页
let shopBtn = text("进入店铺").findOne(5000);
if (shopBtn) {
shopBtn.click();
sleep(5000);
// 点击私信按钮
let messageBtn = text("私信").findOne(5000);
if (messageBtn) {
messageBtn.click();
sleep(3000);
// 输入消息
setText(0, "您好,对您的商品很感兴趣,能否优惠?");
sleep(1000);
click("发送");
sleep(2000);
}
// 返回商品详情
back();
sleep(3000);
}
// 返回商品列表
back();
sleep(3000);
}
log("私信发送完成");
}
// 自动关注功能
function autoFollow() {
if (collectedData.length === 0) {
toast("请先搜索商品");
return;
}
log("开始自动关注店铺...");
launchApp("抖音");
sleep(3000);
for (let i = 0; i < Math.min(collectedData.length, 5); i++) {
let product = collectedData[i];
log("正在处理: " + product.title);
// 点击进入商品详情
click(product.bounds.centerX(), product.bounds.centerY());
sleep(5000);
// 进入店铺主页
let shopBtn = text("进入店铺").findOne(5000);
if (shopBtn) {
shopBtn.click();
sleep(5000);
// 点击关注按钮
let followBtn = text("关注").findOne(5000);
if (followBtn) {
followBtn.click();
sleep(2000);
}
// 返回商品详情
back();
sleep(3000);
}
// 返回商品列表
back();
sleep(3000);
}
log("关注完成");
}
// 自动点赞功能
function autoLike() {
if (collectedData.length === 0) {
toast("请先搜索商品");
return;
}
log("开始自动点赞...");
launchApp("抖音");
sleep(3000);
for (let i = 0; i < Math.min(collectedData.length, 10); i++) {
let product = collectedData[i];
log("正在处理: " + product.title);
// 点击进入商品详情
click(product.bounds.centerX(), product.bounds.centerY());
sleep(5000);
// 点赞视频
let likeBtn = className("android.widget.ImageView").depth(10).findOne(5000);
if (likeBtn) {
likeBtn.click();
sleep(1000);
}
// 返回商品列表
back();
sleep(3000);
}
log("点赞完成");
}
// 保存数据到文件
function saveToFile() {
let fileName = "douyin_shopdata" + new Date().getTime() + ".json";
files.write(fileName, JSON.stringify(collectedData, null, 2));
log("数据已保存到: " + fileName);
}
// 辅助函数
function checkRunning() {
if (isRunning) {
toast("当前有任务正在运行");
return true;
}
return false;
}
function stopTask() {
isRunning = false;
ui.progress.visibility = "gone";
}
function log(msg) {
ui.log.setText(ui.log.text() + "\n" + msg);
console.log(msg);
}
function logError(e) {
let msg = "错误: " + e.message;
ui.log.setText(ui.log.text() + "\n" + msg);
console.error(e);
}
// 启动主程序
main();