57 lines
3.6 KiB
Markdown
57 lines
3.6 KiB
Markdown
# 视频列表获取执行避坑(功能二)
|
||||
|
|
|
|||
|
|
> 与 `浏览器搜索抖音账号操作规范.md` 配合使用;本文记录功能二(获取视频列表)执行中踩过的坑与纠正。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、数据提取方法优先级(2026-08-31 纠正)
|
|||
|
|
|
|||
|
|
### 坑 1:逐条打开视频页抓字段 = 爬虫特征 + 低效(严重)
|
|||
|
|
|
|||
|
|
**现象**:俊希全流程测试 TC-04 时,发现列表页逐卡片 `awemeInfo` 拿不到 `createTime`(undefined 被 JSON.stringify 省略),于是改成**逐条 `goto_url("https://www.douyin.com/video/{id}")` 打开视频页**抓「发布时间」文本。结果:15 次连续跳转明显是爬虫特征,且耗时极长、方法退化。
|
|||
|
|
|
|||
|
|
**根因**:08-26 旧梦留声机已验证的 **`defaultDataList` 方法(一次拿全含 createTime)没有固化到技能文件**,本次执行时凭记忆退化。
|
|||
|
|
|
|||
|
|
**正确方法(实测通过)**:
|
|||
|
|
|
|||
|
|
| 数据 | 来源 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| createTime / stats / desc | **列表组件 Fiber `defaultDataList`**(首选) | 从 `#root` 的 `__reactContainer$`/`__reactFiber$` 键沿 child/sibling 链遍历,找 `memoizedProps.defaultDataList`;136 条全含 createTime |
|
|||
|
|
| duration(毫秒) | 卡片 Fiber `awemeInfo`(兜底) | `awemeInfo.video.duration`;defaultDataList 里可能为 null,两者按 awemeId 合并 |
|
|||
|
|
| 其余统计字段 | 两来源均可 | **驼峰式**:`diggCount/commentCount/shareCount/collectCount/playCount`,非 snake_case |
|
|||
|
|
|
|||
|
|
**执行要点**:
|
|||
|
|
1. 主页滚动加载(`.route-sc` 容器,随机节奏,≥60 条或加载不出即停)
|
|||
|
|
2. 一次 Fiber 提取全量 → 合并 → 生成 13 列 Excel(发布时间列 = `createTime` 转 `YYYY-MM-DD`)
|
|||
|
|
3. 再走 `excel_tool.py select-top6` 筛选(依赖「发布时间」列)
|
|||
|
|
|
|||
|
|
### 坑 2:访问账号主页直接构造地址(严重)
|
|||
|
|
|
|||
|
|
**现象**:直接 `goto_url("https://www.douyin.com/user/{sec_uid}")` 跳转主页,页面加载异常(标题缺昵称、无视频链接、无 `.route-sc` 容器);且真实链接带完整参数后缀(如 `...brjmRxiM9i`),构造缺后缀地址访问异常。
|
|||
|
|
|
|||
|
|
**正确方法**:
|
|||
|
|
1. 先 `goto_url("https://www.douyin.com/search/{账号ID}?type=user")` 走搜索页
|
|||
|
|
2. 搜索结果中**定位目标用户卡片**(用 innerText 匹配 抖音号/粉丝数 特征,如 `JJX0827`+`281.9万`)
|
|||
|
|
3. **模拟点击进入主页**:CDP `Input.dispatchMouseEvent`(mouseMoved → mousePressed → mouseReleased)或 `click_at_xy`;点击后可能新开标签页(target=_blank),从 `Target.getTargets` 找新主页标签页继续操作
|
|||
|
|
4. 禁止直接构造 `/user/{sec_uid}` 地址跳转
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、数据校验速查表
|
|||
|
|
|
|||
|
|
| 检查项 | 标准 | 异常处理 |
|
|||
|
|
|--------|------|---------|
|
|||
|
|
| 发布时间列填充率 | 100%(defaultDataList 全含 createTime) | 若大量为空 → 检查是否用了逐卡片 awemeInfo 而非 defaultDataList |
|
|||
|
|
| 时长填充率 | 100%(卡片 awemeInfo.duration 毫秒) | 合并逻辑遗漏 → 按 awemeId 补合并 |
|
|||
|
|
| 视频条数 | ≥60 条(SKILL.md 唯一权威参数) | 滚动加载未触发 → 检查 `.route-sc` 容器定位 |
|
|||
|
|
| 统计字段 | 驼峰式(diggCount 等) | 若全 0 → 检查字段名是否误用 snake_case |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、浏览器行为准则速记
|
|||
|
|
|
|||
|
|
- ✅ 标签页复用:已有抖音标签页直接 goto_url 导航,不 new_tab
|
|||
|
|
- ✅ 访问主页走搜索 → 模拟点击;不构造直达地址
|
|||
|
|
- ✅ 数据提取一次 Fiber 拿全;不逐条开视频页
|
|||
|
|
- ✅ 适度访问:随机停留/滚动节奏,不连续快速跳转
|
|||
|
|
- ❌ 禁止:new_tab 堆积、直达 `/user/{sec_uid}`、逐条 `/video/{id}`、无间隔连跳
|