打开抖音,点击第一个私信里的作品进入评论区,按排序依次点击用户主页,检测简介、背景图和置顶作品是否有微信或手机号,有就截屏保存,没有就自动返回继续下一个,直到找到50个有效联系方式为止
回答
这个需求涉及复杂的自动化流程,包括应用启动、UI 交互、文本识别、截图保存以及循环控制。在实现之前,需要特别注意平台规则和个人隐私保护。大规模收集他人联系方式可能违反抖音的用户协议及相关法律法规,请务必确保你的操作符合合规要求,并获得必要的授权。
以下是基于 Hamibot 技术特性的实现思路和代码框架。该脚本使用了 Rhino 1.7.15 引擎兼容的语法(避免箭头函数和默认参数),并包含了基本的异常处理和超时设置。
实现思路
- 环境准备:申请屏幕录制权限,这是截图和获取控件信息的前提。
- 导航逻辑:通过选择器定位私信列表、视频入口、评论区及用户头像。
- 信息检测:进入主页后,抓取简介、背景图文字(需配合 OCR)及置顶作品描述。
- 判断与存储:匹配目标关键词(如微信号、手机号),符合条件则截图并计数。
- 循环控制:未达到目标数量时自动返回上一页继续遍历。
代码示例
// 文档地址 https://docs.hamibot.com/
// 注意:本代码仅为自动化逻辑演示,请确保遵守平台规则及隐私法律
var targetCount = 50;
var foundCount = 0;
var currentLoop = 0;
var maxLoops = 1000; // 防止死循环的最大尝试次数
// 申请屏幕截图权限
if (!requestScreenCapture()) {
log("请求截图权限失败");
hamibot.exit();
}
// 启动抖音
launchApp("抖音");
sleep(3000);
// 主循环
while (foundCount < targetCount && currentLoop < maxLoops) {
currentLoop++;
log("当前第 " + currentLoop + " 次尝试,已找到 " + foundCount + " 个有效联系方式");
// 1. 点击第一个私信里的作品 (需要根据实际 UI 调整选择器)
// 示例:假设私信列表在某个 ID 下,点击第一个子项
var firstMsgItem = className("android.widget.TextView").textContains("私信").findOne(2000);
if (firstMsgItem == null) {
log("未找到私信入口,尝试退出重试");
back();
sleep(1000);
continue;
}
firstMsgItem.click();
sleep(2000);
// 2. 进入评论区 (假设点击了作品后进入了详情页,需要找评论按钮)
// 这里需要根据实际页面结构编写具体的选择器
var commentBtn = className("ImageView").desc("评论").findOne(2000);
if (commentBtn != null) {
commentBtn.click();
sleep(2000);
}
// 3. 遍历评论区用户
// 注意:Douyin 界面复杂,建议使用深度优先或特定 ID 定位
var userList = className("ImageView").depth(15).findOne(2000);
if (userList != null) {
userList.click();
sleep(2000);
// 4. 检测个人信息
// 获取简介文本
var bioText = className("TextView").textContains("简介").findOne(2000);
var hasContact = false;
if (bioText != null) {
var text = bioText.text();
// 此处应添加正则匹配逻辑,例如检查手机号或微信格式
// 示例:if (/(\d{11})|([a-zA-Z0-9_-]{6,20})/.test(text)) { ... }
// 为了合规,此处不直接提供具体提取正则,请自行实现合法检测逻辑
if (checkContactInfo(text)) {
hasContact = true;
}
}
if (hasContact) {
// 截屏保存
var img = captureScreen();
files.ensureDir("/sdcard/Hamibot_Screenshots/");
var path = "/sdcard/Hamibot_Screenshots/contact_" + foundCount + "_" + new Date().getTime() + ".png";
files.writeBytes(path, img.toBytes());
foundCount++;
log("发现有效联系方式,已保存至 " + path);
}
// 5. 返回继续下一个
back();
sleep(1500);
} else {
log("未找到用户列表,尝试滑动刷新");
swipe(device.width / 2, device.height * 0.8, device.width / 2, device.height * 0.2, 500);
sleep(1000);
}
// 随机等待时间,模拟人工操作
sleep(random(1000, 3000));
}
log("任务结束,共找到 " + foundCount + " 个联系方式");
// 自定义检测函数示例
function checkContactInfo(text) {
// 在这里编写你的正则表达式逻辑
// 务必确保符合法律法规
return false;
}
关键注意事项
- 选择器稳定性:抖音的 UI 结构经常更新,
className、depth和id可能会变化。你需要使用 Hamibot 的“捕获”功能实时获取最新的控件属性,并替换代码中的选择器。 - OCR 支持:背景图上的文字无法直接通过
text()获取,需要使用 Hamibot 的 OCR 功能(如ocr.recognize())对截图区域进行文字识别,这会增加脚本运行时间和资源消耗。 - 防封禁策略:高频次的自动化操作极易触发平台风控。建议在脚本中加入随机延时(如
random(1000, 3000)),并限制每日运行次数。 - 合规性:收集个人联系方式属于敏感操作。请确保你有合法的理由,并且不用于骚扰或非法营销。违反平台规则可能导致账号被封禁。
- 兼容性:上述代码遵循 Rhino 1.7.15 规范,没有使用 ES6+ 的新特性(如箭头函数、
const/let),确保在 Hamibot 环境中稳定运行。
建议先在测试设备上运行小批量任务,验证选择器的准确性和逻辑的正确性,确认无误后再扩大规模。如果有具体的 UI 选择器问题,可以使用 Hamibot 自带的控件捕获工具进行调试。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实