Files

97 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 常见问题排查
先按输出判断类型:`[捕获]`/`[套件]` 前缀的警告是**提示**(不中断);`SystemExit` / 致命错误则中断。核心是先分清是「没登录 / 套件没捕到 / 回放 401 / 查不到」。
## 登录态与浏览器
### 跳转到 Google 登录页
- 现象:脚本报「当前会话未登录,已跳转到 Google 登录页」,或捕获时停在 accounts.google。
- 原因:没复用已登录 YouTube Studio 的会话,开了全新会话。
- 解决:改用 `--user-data-dir + --channel`(方式 A需先关闭对应浏览器`--connect http://localhost:9222`(方式 B浏览器开在调试端口
### 启动/连接浏览器失败
- 现象:`[!] 启动/连接浏览器失败: ...`
- 原因:方式 A 时浏览器未关闭(用户数据目录被占用);方式 B 时调试端口没起。
- 解决:方式 A 关闭 Chrome/Edge 后重试;方式 B 先 `chrome.exe --remote-debugging-port=9222`(或 msedge再运行。
### channel 不匹配
- 现象:启动后用 --user-data-dir 报告浏览器品牌不符。
- 原因:`--channel` 与用户数据目录指向的浏览器不是同一品牌chrome / msedge
- 解决:`--channel` 必须与 `--user-data-dir` 指向的浏览器一致。
### CDP 附加后页面是空白/不是目标所有者
- 现象:连上 9222 但页面停在别的标签或未登录。
- 原因:`connect_over_cdp` 取的是第一个 context 的新标签,可能与已有登录标签不同步。
- 解决:确保浏览器已登录目标所有者;必要时先用浏览器手动打开所有者 URL 确认登录态。
## 套件捕获(`_capture_bundle`
### 捕获不到 search_groups 请求
- 现象:`[捕获] ... 未捕获到 search_groups 请求` / `TimeoutError`
- 原因:没触发搜索,或页面不是高级模式分析页,或搜索框选择器没猜中。
- 解决:在浏览器里于该所有者分析页**顶部搜索/筛选框输入任意词并回车**(只需一次)。脚本会提示并等待(默认 180 秒,可 `--wait-seconds` 调大)。若选择器每次都猜不中,可先手动搜索确认页面是高级模式。
### 警告externalOwnerId 与 URL ownerId 不一致
- 现象:`[捕获] 警告:请求体 externalOwnerId=... 与 URL ownerId=... 不一致,以请求体为准`
- 原因URL 指向的 owner 与当前页面 delegation 语境不同(切换所有者后会残留)。
- 解决:确认 URL 是目标所有者;页面确实停在目标所有者高级模式页再捕获。
### 警告:缺 Authorization/Cookie/delegation
- 现象:`[捕获] 警告:缺少 AuthorizationSAPISIDHASH头 / ...`
- 原因:捕获到的请求头不全,或请求体缺 `context.user.delegationContext`
- 解决:重新捕获一次,或确认页面是在已登录的目标所有者分析页发起的群组搜索。
## 回放查询
### 回放全量 401
- 现象:结果备注大量 `HTTP401鉴权失败套件缺 Authorization/Cookie 或已过期,请重新捕获)`
- 原因:套件过期(鉴权头是逐请求计算的),或头不全。
- 解决:重新用 `--url` 在线捕获套件(更新到 `--save-bundles`),再回放。查 `references/input-guide.md` 第 2 节核对 headers。
### HTTP403 / 无权限
- 现象:`HTTP403无权限或 delegation 语境不符)`
- 原因delegation 语境不属于当前登录账号,或该所有者无授权。
- 解决:确认登录账号对该内容管理器有权限,重新捕获正确所有者的套件。
### HTTP429 / 限流
- 现象:`HTTP429限流调低 --max-workers 或稍后重试)`
- 原因:并发太高或请求过频繁。
- 解决:降低 `--max-workers`,稍后重试。
### 网络错ERR
- 现象:备注 `网络错: ...`
- 原因:网络不通 / 域名被拦 / 代理导致请求失败。
- 解决:检查网络与代理,重试。
## 匹配结果
### 某名字显示「无结果」
- 现象:备注含 `无结果`
- 原因:该所有者下没有匹配的群组,或名字与 displayName 不完全一致。
- 解决:换所有者再试,或用更短关键词重跑;若名字疑似错字,用品牌名做短词触发变体候选。
### 名字只在候选里(大小写/空格差异)
- 现象:备注含候选 `名=ID`,但没有精确命中。
- 原因:列表里的 displayName 与输入存在大小写/空格差异。
- 解决:直接采用候选 groupId或把名单里的名字改成与 displayName 完全一致后重跑。
### 同名群组跨所有者都有
- 现象:多个所有者都返回候选,或都命中但归属不同。
- 原因不同内容管理器可各有一个「X 漫剧-N」。
- 解决:以**精确 displayName** 命中为准核对实体归属;跨所有者同名时确认要的是哪个 ownerId 下的 groupId。
### 名单不识别 / 空名单
- 现象:`[!] 名单为空或无法解析:...`,或 `无法识别名字列`
- 原因:列名不在别名表,或文件结构不对。
- 解决:按 `references/input-guide.md` 第 1 节整理:用别名列名(群组名称/group_name/实体名称/名称),或改为单列文件。
## 输出问题
### 输出行数为 0 / 找不到输出文件
- 现象:`[输出] 精确命中 0/N`,或默认路径没找到。
- 解决:确认 `--names` 能解析出名单;`--out` 显式指定路径。缺 openpyxl 时 `.xlsx` 自动回退为 `.csv`(脚本会提示)。
### 缺依赖报 ModuleNotFoundError
- 现象:`ModuleNotFoundError: No module named 'requests'``'playwright'``'openpyxl'`
- 解决:项目根 `uv sync` 后统一用 `uv run` 前缀执行;或单独 `pip install requests playwright openpyxl`