← 返回
未分类

抖音关注私信助手

抖音评论区关注私信助手——从作品评论区提取评论用户,进入个人主页点击关注,发送私信打招呼。自动识别已关注/未关注状态,逐条处理。
抖音评论区关注私信助手——从作品评论区提取评论用户,进入个人主页点击关注,发送私信打招呼。自动识别已关注/未关注状态,逐条处理。
叫我老大哥
未分类 community v1.0.0 1 版本 96875 Key: 无需
★ 0
Stars
📥 31
下载
💾 0
安装
1
版本
#latest

概述

抖音关注私信助手 (v1.0)

> 基于 2026-06-01 多轮真实测试验证通过。

> 测试账号:小小程序猿🐒


📖 目录


🎯 功能概述

从抖音作品的评论区中提取评论用户,逐个执行:

  1. 进入该用户个人主页
  2. 点击「关注」按钮(已关注则跳过)
  3. 点击「私信」按钮
  4. 发送一条打招呼消息
  5. 间隔后处理下一位用户

🔧 使用前提

账号要求

  • 抖音账号已在 www.douyin.com 登录(非创作者后台)
  • 登录态通过浏览器 cookie 持久化
  • 不要频繁操作,每天建议不超过 3-5 人

内容要求

  • 有一个已发布的作品(图文或视频),必须有真实评论
  • 图文 URL:https://www.douyin.com/article/{id}
  • 视频 URL:https://www.douyin.com/video/{id}
  • 作品的评论区有人留言(否则没有用户可操作)

环境要求

  • OpenClaw CDP Chrome 运行中

```bash

openclaw browser start

```

  • CDP 端口:18800(http://127.0.0.1:18800
  • Playwright 已安装(npm 全局)

🛠 工具列表

工具用途说明
------------------
Playwright (chromium)浏览器自动化通过 CDP 连接 OpenClaw Chrome
page.goto()页面导航跳转到作品页、用户主页
page.evaluate()执行 JS所有 DOM 操作(查找元素、点击、提取数据)
page.locator()定位元素检测编辑器是否可见
page.keyboard.type()键盘输入私信内容输入(delay模拟真人)
page.keyboard.press('Enter')发送消息按 Enter 键发送私信
document.querySelectorAll()查找元素提取评论区用户链接
Element.getBoundingClientRect()获取位置判断元素可见性和位置
Element.click()原生点击触发 React 事件(比 dispatchEvent 稳定)

📋 完整流程

1. 打开作品页
2. 滚动到评论区
3. 提取所有评论用户(跳过自己)
4. 取前 N 个用户(建议 ≤3)
   ↓ 逐个处理:
   a. 跳转到该用户主页
   b. 检查是否已关注
   c. 未关注 → 点「关注」
   d. 点「私信」
   e. 输入打招呼内容
   f. 按 Enter 发送
   g. 等待 3-5 秒
   h. 处理下一位
5. 全部完成

🔬 详细步骤

Step 1:打开作品页面

const page = await context.newPage();
await page.goto('https://www.douyin.com/article/7645340255293426982', {
  waitUntil: 'domcontentloaded',
  timeout: 15000
});
await new Promise(r => setTimeout(r, 5000));

> 作品可以是图文(/article/{id})或视频(/video/{id})。

> 应该选评论区活跃的作品(点赞数高的通常评论也多)。

Step 2:滚动到评论区

await page.evaluate(() => {
  for (const el of document.querySelectorAll('*')) {
    if (el.textContent.includes('全部评论')) {
      el.scrollIntoView({ block: 'start' });
      break;
    }
  }
});
await new Promise(r => setTimeout(r, 2000));

> 不要用 window.scrollBy —— 评论区在独立滚动容器里,但用户提取只需要第一屏评论可见即可。

> 如果要加载更多评论(数量少时),滚动容器:.parent-route-container

Step 3:提取评论用户

const users = await page.evaluate(() => {
  const allLinks = document.querySelectorAll('a[href*="/user/"]');
  const seen = new Set();
  const results = [];
  
  for (const a of allLinks) {
    const href = a.getAttribute('href') || '';
    // 跳过自己
    if (href.includes('self')) continue;
    
    const rect = a.getBoundingClientRect();
    if (rect.y < 300 || rect.y > 3000) continue;
    
    const name = a.textContent.trim();
    // 过滤无效数据
    if (!name || name.length < 1 || name.length > 12) continue;
    if (name.includes('作者') || name.includes('回复') || name.includes('分享')) continue;
    if (name === '0' || name === '1' || name === '2' || name === '') continue;
    if (seen.has(name)) continue;
    
    seen.add(name);
    const fullUrl = href.startsWith('//') ? 'https:' + href : href;
    results.push({ name, url: fullUrl });
  }
  
  return results;
});

// 取前3个
const targets = users.slice(0, 3);

过滤规则说明:

  • href.includes('self') — 跳过自己的主页链接
  • name.includes('作者') — 跳过自己出现在评论区("小小程序猿🐒 作者")
  • name === '0'/'1'/'2' — 跳过点赞数(误识别)
  • rect.y < 300 — 跳过顶部导航/个人资料区
  • name.length 1-12 — 正常用户名长度范围

Step 4:进入用户主页

await page.goto(target.url, { waitUntil: 'domcontentloaded', timeout: 15000 });
await new Promise(r => setTimeout(r, 4000));

> 不要尝试点击用户名/头像来跳转 —— 抖音的 SPA 路由会拦截点击。

> 直接用 page.goto() 导航到用户的 https://www.douyin.com/user/{user_id} 最稳定。

Step 5:点击关注

// 先检查是否已关注
const isFollowed = await page.evaluate(() => 
  document.body.innerText.includes('已关注')
);

if (!isFollowed) {
  await page.evaluate(() => {
    for (const el of document.querySelectorAll('*')) {
      if (el.textContent.trim() === '关注') {
        const rect = el.getBoundingClientRect();
        // 用户信息区的关注按钮在右侧(x>900),宽度>50
        if (rect.x > 900 && rect.width > 50) {
          el.click();
          return;
        }
      }
    }
  });
  await new Promise(r => setTimeout(r, 2000));
}

按钮位置说明:

  • 用户主页右侧有两个按钮:关注(x≈986)和 私信(x≈1082)
  • 都用 class="semi-button" 渲染
  • 必须通过 rect.x > 900 来过滤掉左侧导航栏的「关注」标签

Step 6:点击私信并发送

// 点击私信按钮
await page.evaluate(() => {
  for (const el of document.querySelectorAll('*')) {
    if (el.textContent.trim() === '私信') {
      const rect = el.getBoundingClientRect();
      if (rect.x > 1000 && rect.width > 50) {
        el.click();
        return;
      }
    }
  }
});
await new Promise(r => setTimeout(r, 2000));

// 输入并发送
const editor = page.locator('[contenteditable]').first();
if (await editor.isVisible().catch(() => false)) {
  await editor.click();
  await new Promise(r => setTimeout(r, 300));
  await page.keyboard.type('你好,感谢你为流浪狗发声。', { delay: 12 });
  await new Promise(r => setTimeout(r, 500));
  await page.keyboard.press('Enter');
  await new Promise(r => setTimeout(r, 3000));
}

私信输入说明:

  • 点击「私信」后,聊天面板在当前页打开(不跳转页面)
  • 输入框是
  • 只能用 keyboard.type 输入,不能用 innerHTMLexecCommand
  • 按 Enter 发送(不是点发送按钮)

Step 7:处理下一位

// 每个人之间间隔 3-5 秒
await new Promise(r => setTimeout(r, 3000));
// 回到 Step 4,处理下一位用户

⚠️ 注意事项与风控

风控防护(最重要)

风险解决方案
:----:---------
每条私信内容相同每人都发不一样的内容
操作频率太快每人间隔 3-5 秒,每天 ≤3-5 人
被举报私信内容要礼貌、自然,不要营销
验证码弹窗立即停止,手动验证后继续
账号被限制严格遵守频率限制

私信内容规范

❌ 不行:
  - "添加微信xxx" "点击链接xxx"(营销感太重)
  - 每个人发一模一样的文字
  - 明显AI生成的套话

✅ 可以:
  - "哈喽,感谢你为流浪狗发声。"
  - "你好呀,看到你也关注流浪动物,感觉遇到同好了~"
  - "谢谢你的支持!希望每只流浪的小动物都能遇到好心人🐾"
  - "看到你的评论好暖心,替流浪的它们谢谢你🙏"

已知限制

  1. 私密账号:可以关注(发起关注请求),但不能发私信
  2. 一条限制:对方回复你之前,只能发一条文字消息
  3. 只能文字:首次消息只能是文字,不能发图片/链接
  4. 每天限制:抖音对私信有风控,每天 3-5 条比较安全

⏱ 时间间隔建议

点关注 → 等 2 秒
点私信 → 等 2 秒
输入内容 → 1 秒
按 Enter → 等 3 秒
进入下一个人 → 等 3-5 秒
每处理 5 人 → 休息 1 分钟

❓ 常见问题

Q: 为什么找不到用户?

可能原因:

  • 作品没有评论(刚发布或无人互动)
  • 评论区需要滚动加载(用容器 .parent-route-container 滚动)
  • 所有用户都是自己的号或已处理过的

Q: 关注按钮点了没反应?

可能原因:

  • 点的位置不对(点到了左侧导航的「关注」标签)
  • 已经关注过了(按钮变成「已关注」)
  • 需要先登录

解决:rect.x > 900 过滤位置

Q: 私信发不出去?

可能原因:

  • 对方是私密账号(只能关注不能私信)
  • 已经发过一条(对方没回复前只有一条额度)
  • 输入框没聚焦

Q: 怎么确认私信发送成功?

检查页面文本: 发送成功后聊天面板会出现你发的消息内容

Q: 浏览器断开连接了?

# 重启浏览器
openclaw browser stop
openclaw browser start

🐛 踩坑记录(2026-06-01 实战)

问题表现根因修复
:----:------:----:------
用户名点不进主页点击无反应SPA 路由拦截点击page.goto() 直接导航
头像点不进主页还在原页面同上page.goto() 直接导航
点到自己的主页看到自己的资料href 包含 self过滤 href.includes('self')
点到「作者」的链接处理了自己「小小程序猿🐒 作者」也在评论区过滤 name.includes('作者')
关注到了左侧标签点了没反应x<100 的「关注」是导航标签rect.x > 900 过滤
私信点到了顶部导航打开了消息列表页顶部也有「私信」按钮rect.x > 1000 过滤
输入框找不到编辑器返回空私信面板还没加载完等 2 秒再找
backtick 在 zsh 中报错shell 解析错误反引号被 zsh 解释脚本写入文件再执行
let 在 zsh eval 中报错parse errorzsh 不识别 let ui=0写入 .cjs 文件再执行
私信内容太官方用户觉得是机器人回复模板化每条都不一样,像真人聊天

版本历史

共 1 个版本

  • v1.0.0 Initial release 当前
    2026-06-01 16:17 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

京东数据采集

user_f4e1eca6
使用浏览器自动化从京东搜索页采集商品数据,支持多页翻页、懒加载滚动、导出 CSV
★ 1 📥 199

抖音全类型自动发布

user_f4e1eca6
抖音全类型作品自动发布——文章、图文、视频三种类型,支持AI封面、话题添加、背景音乐、自主声明、定时发布。基于多轮真实测试验证通过。
★ 1 📥 186

抖音自动回复评论

user_f4e1eca6
抖音评论区自动回复。支持两种模式:(1) 从创作者中心评论管理页面回复;(2) 从个人主页→点作品→评论区逐条回复。自动识别已回复/未回复,逐条发送。
★ 1 📥 181