Repository navigation
v0.12.2 v0.12.2 — 抖音刷视频进不了推荐页
v0.12.2 — 抖音刷视频进不了推荐页
其实一直在刷,但每轮都空手而归。
根因
FEED_URL = https://www.douyin.com/?recommend=1,抖音桌面版对导航请求一律 302 到 /jingxuan 精选页。
插件抓的 [data-e2e="feed-active-video"] 只在推荐页才有。落在精选页后 scroll 每轮都空手而归,activity 里只写「这轮没刷到新视频」——看起来像没刷,其实是进错了页面。
关键发现
推荐页存在,但只能靠点击左侧栏的「推荐」tab 进入(前端路由跳转,不走服务端 302)。
而且 el.click() 不管用,必须用 Input.dispatchMouseEvent 发真实鼠标事件——抖音对 JS 合成点击免疫。
改了什么
lib/douyin-browse.js 加 ensureRecommend(b):
scroll开头先goto(FEED_URL)(落在精选页)ensureRecommend先用activeVideo()读一条判断在不在推荐页;读不到就找「推荐」按钮位置- 用
Input.dispatchMouseEvent发真实鼠标事件点进去(mouseMoved → mousePressed → mouseReleased) - 等 3 秒后再
activeVideo()验证一次;还进不去就warn停下来,不再空刷一轮
顺带澄清一个误判
我最初以为 data-e2e-* 选择器全挂了(抖音改版)。错:它们全都活着,只是在推荐页——精选页才是另一套 data-aweme-id / .discover-video-card-item。不是选择器坏了,是进错了页面。
验证
node --check lib/douyin-browse.js→ 语法 OKtest/douyin-browser.mjs→ 全过test/smoke.mjs→ 全过test/startup-gate.mjs→ 全过
真实浏览器实测(不是 mock):
起点: https://www.douyin.com/jingxuan | feed-active-video: false
ensureRecommend 结果: true
URL: https://www.douyin.com/?recommend=1
结构: { active: 1, desc: 2, video: 3 }
待验收
没在宿主里跑过完整一轮(宿主得先重启才能加载这个改动)。真实行为待验:进推荐页 → scroll 读到视频 → 写 douyin_seen 记忆 → 主动开口说出刷到的内容。