← Back to skills
extension
Category: Data & AnalyticsNo API key required

抖音关注博主提取(公开版)

提取抖音账号「我的关注」完整博主列表(名字+sec_uid)。用户自行打开抖音网页版登录后,AI 自动召唤关注弹窗、滚动加载全部、提取博主名单,为批量下载做准备。

personAuthor: user_f9b838d6hubcommunity

抖音「我的关注」全量提取(公开版)

提取抖音账号关注的全部博主(名字 + sec_uid),为批量下载做准备。

⚠️ 隐私说明:本技能不含任何用户的登录凭据。流程需要用户自行登录抖音网页版,登录成功后告知 AI 继续。

前置条件

  • 本机安装了 Chrome 浏览器
  • 用户愿意自行扫码登录抖音网页版(本技能不接触账号密码)

执行流程

Step 0 — 启动浏览器并让用户登录(关键)

# 1. 用独立调试端口启动 Chrome(用户自己的浏览器,或独立实例均可)
chrome.exe --remote-debugging-port=9222 --user-data-dir="<任意独立目录>" --no-first-run about:blank
# 注意:Windows 136+ 默认 profile 不支持调试端口,必须用 --user-data-dir 指定独立目录
# 2. 打开抖音网页版
curl -s http://localhost:9222/json  # 确认 Chrome 调试端口就绪
# 导航到 https://www.douyin.com/

3. 提示用户自行登录:弹窗/消息告诉用户「请在打开的 Chrome 窗口里登录你的抖音账号(扫码即可)」,然后**等待用户反馈「已登录」**再继续。绝不代填账号密码,也不读取用户登录态。

Step 1 — 导航到我的主页

node scripts/extract_following.mjs <chromePort默认9222>

脚本自动完成(前提:用户已登录):

Step 2 — 提取关注列表

脚本内部流程:

  1. 导航 self 主页(/user/self),等 8s(需已登录,页面显示"关注 N")
  2. 召唤弹窗:找 P 标签文本 /^关注\d+$/ → 取 __reactProps$.onClick 直接调用(弹窗是异步渲染,等 4-5s)
  3. 滚动加载:找弹窗(含"关注 ("+"已关注",矩形 300×300)→ 找内部最大滚动容器(scrollHeight>clientHeight+200)→ 循环 8 轮 scrollTop=scrollHeight + 触发 scroll 事件 + 等 2s,直到高度连续 2 轮不增长(约 6 轮:4376→14699)
  4. 提取:遍历弹窗内 a[href*="/user/MS4"] 按 sec_uid 去重(权威数量 = 页面标注数)→ 名字三源补全:①头像 img[alt*="头像"] 的 alt 去"头像"后缀 ②a 文本 ③祖先卡片清理文本(去"已关注/移除/确认/X个作品未看")
  5. 输出:following_extract_<时间戳>.json([{name, sec}])+ 控制台打印数量

输出数据格式

[
  { "name": "用户A", "sec": "MS4wLjABAAAASxtOYwnx06k96..." },
  { "name": "用户B", "sec": "MS4wLjABAAAA9GJjWKRac0j4ZcE-..." }
]

精度说明(2026-08-26 实测验证)

  • 弹窗内 img[alt*="头像"] 数量 = a[href*="/user/MS4"] 去重数量 = 页面标注关注数
  • 以 sec_uid 去重为权威,不依赖"已关注"按钮找卡片(按钮有变体/缺失会导致漏项)
  • 两次独立跑结果完全一致(差异 0,无未命名)

后续对接

提取的 sec 列表可配合其他工具做批量数据抓取或下载(进主页拿粉丝/作品等)。

踩坑记录(技术通用)

  1. "关注 N" 数字不可点:self 主页 P 标签 width=0 不可见,hover/click/真实鼠标全无效 → 直接调用 React fiber 的 __reactProps$.onClick 召唤弹窗。
  2. React onClick 调用法:const rk = Object.keys(el).find(k => k.startsWith('__reactProps')); el[rk].onClick({preventDefault(){},stopPropagation(){},target:el,currentTarget:el}),弹窗异步渲染需等 4-5s。
  3. 滚动必须带等待:设置 scrollTop 后虚拟列表需要时间懒加载,立即读 scrollHeight 不变。必须循环 [设置→等 2s→重读],连续 2 轮不增长才算到底。
  4. 弹窗滚动容器 class 随机(.aQVXLJB7 等),必须用"弹窗内最大可滚动容器"动态定位,不能硬编码 class。
  5. 提取别依赖"已关注"按钮:按钮文本可能变体/缺失,导致漏项。以 a[href*="/user/MS4"] 的 sec 去重为权威,名字从 img[alt*="头像"] alt 取(去"头像"后缀),三源补全保证名字非空。
  6. 虚拟列表边界:如果首次提取数量低于标注数,把滚动条拉回顶部再拉到底一次(两轮全遍历)。