首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >快手评论采集工具,采集UID评论主页链接信息,autojs框架分享仅供学习

快手评论采集工具,采集UID评论主页链接信息,autojs框架分享仅供学习

原创
作者头像
用户11744395
发布2025-07-17 09:50:36
发布2025-07-17 09:50:36
4710
举报

下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133

该代码实现了完整的快手评论采集功能,包含UI界面、评论滚动采集、用户信息提取和数据保存等功能。使用时需要确保Auto.js已获取无障碍权限,建议在模拟器或root设备上运行。

代码语言:txt
复制

// 快手评论采集工具 - Auto.js实现
// 功能:采集视频评论区UID、评论内容和用户主页链接
// 版本:v1.0
// 日期:2025-07-17

"ui";
ui.layout(
    <vertical padding="16" bg="#f5f5f5">
        <text text="快手评论采集工具" textSize="24" gravity="center" marginBottom="16"/>
        <horizontal>
            <input id="target_url" hint="输入快手视频链接" layout_weight="1"/>
            <button id="start_btn" text="开始采集" marginLeft="8"/>
        </horizontal>
        <horizontal>
            <text text="采集深度:" marginRight="8"/>
            <input id="scroll_times" text="10" inputType="number" layout_weight="1"/>
            <text text="次滚动" marginLeft="8"/>
        </horizontal>
        <checkbox id="save_screenshot" text="保存截图" checked="false"/>
        <progressbar id="progress" indeterminate="true" visibility="gone"/>
        <scroll>
            <text id="log" text="准备就绪..." textSize="14"/>
        </scroll>
    </vertical>
);

// 全局变量
let collectedData = [];
let currentPage = 1;
const config = {
    maxRetry: 3,
    scrollWaitTime: 2000,
    commentSelector: "android.widget.TextView",
    userInfoSelector: "android.widget.ImageView",
    homePageBtnText: "主页"
};

// 主函数
ui.start_btn.click(() => {
    let targetUrl = ui.target_url.text().trim();
    if (!targetUrl) {
        toast("请输入视频链接");
        return;
    }
    
    // 初始化
    collectedData = [];
    currentPage = 1;
    ui.progress.visibility = "visible";
    log("开始采集...");
    
    // 启动快手APP
    launchApp("快手");
    waitForPackage("com.kuaishou.nebula");
    sleep(3000);
    
    // 处理URL
    if (!targetUrl.startsWith("http")) {
        targetUrl = "https://" + targetUrl;
    }
    
    // 打开目标视频
    app.openUrl(targetUrl);
    sleep(5000);
    
    // 进入评论区
    clickCommentArea();
    
    // 开始采集
    collectComments(parseInt(ui.scroll_times.text()));
    
    // 保存结果
    saveResults();
    
    ui.progress.visibility = "gone";
    log("采集完成!共采集到 " + collectedData.length + " 条评论");
});

// 点击评论区
function clickCommentArea() {
    let commentBtn = text("评论").findOne(5000);
    if (commentBtn) {
        commentBtn.click();
        sleep(3000);
    } else {
        log("未找到评论区入口");
        exit();
    }
}

// 采集评论核心函数
function collectComments(scrollTimes) {
    for (let i = 0; i < scrollTimes; i++) {
        log("正在采集第 " + (i + 1) + " 页...");
        
        // 获取当前屏幕可见评论
        let comments = className(config.commentSelector)
            .depth(10)
            .find();
        
        for (let j = 0; j < comments.length; j++) {
            let comment = comments[j];
            if (comment.text().length > 0 && comment.visibleToUser()) {
                processCommentItem(comment);
            }
        }
        
        // 滚动屏幕
        swipe(
            device.width / 2,
            device.height * 0.8,
            device.width / 2,
            device.height * 0.2,
            500
        );
        sleep(config.scrollWaitTime);
        
        // 保存截图
        if (ui.save_screenshot.checked) {
            let img = captureScreen();
            let path = "/sdcard/Download/kuaishou_screenshot_" + currentPage + ".png";
            images.save(img, path);
            log("已保存截图: " + path);
        }
        
        currentPage++;
    }
}

// 处理单个评论项
function processCommentItem(comment) {
    try {
        let commentText = comment.text();
        let parent = comment.parent();
        
        // 获取用户信息
        let userInfo = parent.findOne(className(config.userInfoSelector));
        if (!userInfo) return;
        
        // 点击用户头像进入主页
        userInfo.click();
        sleep(3000);
        
        // 获取UID和主页链接
        let uid = getUidFromProfile();
        let profileUrl = getCurrentPageUrl();
        
        // 返回评论区
        back();
        sleep(2000);
        
        // 保存数据
        if (uid && commentText) {
            collectedData.push({
                uid: uid,
                comment: commentText,
                profile_url: profileUrl,
                timestamp: new Date().toLocaleString()
            });
            log("采集到: " + uid + " - " + commentText.substring(0, 20) + "...");
        }
    } catch (e) {
        log("处理评论出错: " + e);
    }
}

// 从个人主页获取UID
function getUidFromProfile() {
    let uidText = textMatches(/ID: \d+/).findOne(3000);
    if (uidText) {
        return uidText.text().replace("ID: ", "");
    }
    return null;
}

// 获取当前页面URL
function getCurrentPageUrl() {
    let urlBar = descMatches(".*http.*").findOne(3000);
    if (urlBar) {
        return urlBar.desc();
    }
    return "unknown";
}

// 保存结果到文件
function saveResults() {
    let timestamp = new Date().getTime();
    let filePath = "/sdcard/Download/kuaishou_comments_" + timestamp + ".json";
    
    files.write(filePath, JSON.stringify(collectedData, null, 2));
    log("结果已保存到: " + filePath);
    
    // 导出CSV格式
    let csvContent = "UID,评论内容,主页链接,采集时间\n";
    collectedData.forEach(item => {
        csvContent += `"${item.uid}","${item.comment.replace(/"/g, '""')}","${item.profile_url}","${item.timestamp}"\n`;
    });
    
    let csvPath = "/sdcard/Download/kuaishou_comments_" + timestamp + ".csv";
    files.write(csvPath, csvContent);
    log("CSV格式已保存到: " + csvPath);
}

// 日志函数
function log(msg) {
    ui.log.setText(ui.log.text() + "\n" + msg);
    console.log(msg);
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档