基于网页版直播间 DOM 解析的可见观众采集与随机抽奖工具。纯前端解析,不涉及任何接口抓包或协议逆向。控制台私有采集、绿幕展示窗供 OBS 抠像投屏,开抽即冻结名单保证公平。
本工具在抖音网页版直播间页面上,通过解析 DOM 采集"可见在线观众"(头像 + 昵称),再从中随机抽奖。核心实现为 Electron 桌面应用(另附轻量油猴脚本版本)。整个过程是纯前端 DOM 解析——不调用任何私有接口、不抓包、不逆向协议。
定时向内嵌直播间注入 capture.js,采到的观众合并去重进 pool,保留排名顺序。
选前 N → 开抽瞬间冻结名单 → 头像昵称滚动 → 停止定格中奖人。
绿幕窗口同步滚动与结果,OBS 色度键抠像后叠加到直播画面。
不死磕易变的 CSS class 名,而是按头像 CDN 域名特征(douyinpic / pstatp / bytecdn 等)+ 方形小图判定来识别观众头像。即使抖音改版换 class,采集依然有效。同时配有基于实测结构的精确选择器(行 / 昵称 / 头像 / 排名)作为首选,特征扫描作兜底。
抖音的完整观众列表需"悬停才显示"。工具通过派发合成的 pointerover / mouseover / mousemove 事件触发展开弹层——不动用你的真实鼠标,采集在后台静默进行。
在线观众列表是虚拟滚动(DOM 节点滚动时复用)。工具自动定位可滚动容器,派发 WheelEvent + scroll 边滚边采集。由于头像 img.src 在虚拟列表里可能滞后 / 重复,用排名序号(rank)作为唯一去重键,避免把不同人误塌缩成一个。
弹幕在 DOM 里存活极短、滚动飞快,定时轮询会漏。工具用 MutationObserver 监听公屏容器的节点插入,消息一进来就抓,把发言观众也累积进抽奖池,几乎不漏。支持关键词过滤(只采发言含指定词的粉丝)。
以"高等级用户 / 贡献用户 / 全部"等面板独有标签为锚点,向上定位到同时包含多张头像的祖先容器,把采集范围严格锁定在观众面板内,避开主播信息区、连麦、榜单等区域的头像误采。
点击"开始摇奖"的瞬间,立刻冻结当前候选名单并停止刷新采集,之后进来的观众不再进入本轮抽奖池——保证每一轮抽奖对所有候选人公平。停止后定格中奖人,结果同步推送到展示窗。
抽奖范围可选预设 前 10/20/50/100/200/500/1000、"全部"或自定义任意数字。候选显示为"实际人数 / 池子总数",按观众列表真实排名取前 N(弹幕额外采到的排在列表之后)。
独立绿幕窗口(默认 #00B140,可改),全屏显示中奖头像 + 昵称。OBS / 直播伴侣按窗口捕获后设色度键过滤绿色即可抠像叠加。展示窗开启 backgroundThrottling: false,失焦 / 被遮挡时仍持续渲染,被捕获时不掉帧。
控制台窗口默认开启 setContentProtection,正常情况下不会被 OBS / 录屏捕获,避免把候选名单、内定等控制内容暴露给粉丝。同时全局 disableHardwareAcceleration,规避硬件合成画面被捕获成黑屏的兼容问题。
contextIsolation + preload 安全桥通信;头像用 HttpClient 异步加载并设超时;窗口关闭时自动释放 webview、后台线程与子窗口,无资源泄漏。electron-builder 打包为 Windows 绿色版 exe