基于 TypeScript · Playwright · Cheerio 的微软奖励自动化脚本
针对国内用户深度本地化:✅ 中国热搜查询源(百度/头条/抖音/微博/知乎) · ✅ 日志中文化 · ✅ PushPlus 微信推送
ℹ️ 分支选择建议
main分支(稳定版,推荐):已兼容微软新版 UI,实测未发现明显异常,可放心日常使用。V4-china分支(尝鲜版):架构升级仍在推进中,功能尚未完善,暂不推荐切换。如非必要,请继续留在main分支,待 V4 稳定后再迁移。两分支配置文件结构不同,互不兼容。
账户管理
- ✅ 多账户支持
- ✅ 会话存储与持久化
- ✅ 2FA 支持
- ✅ 无密码登录支持
自动化与控制
- ✅ 无头浏览器操作
- ✅ 集群支持(同时多个账户)
- ✅ 可配置任务选择
- ✅ 代理支持
- ✅ 自动调度(Docker)
搜索与活动
- ✅ 桌面与移动搜索(Microsoft Edge 模拟)
- ✅ 地理定位搜索查询
- ✅ 模拟滚动与链接点击
- ✅ 每日集 / 促销活动 / 打卡 / 每日签到 / 阅读赚取
- ✅ 连击保护 & 领取 dashboard 奖励积分(新版 UI 走 Server Action)
搜索词来源(中国地区)
- ✅ 中国热搜(百度/头条/抖音/微博/知乎,多源聚合 + 限流退避)
- ✅ Bing Suggestions / Related Terms 扩展(日志聚合输出)
- ✅ 本地查询词兜底(
search-queries.json,392 个标准词)
测验与互动内容
- ✅ 测验解答(10 分与 30-40 分变体)
- ✅ 此或彼测验(随机答案)
- ✅ ABC 测验解答
- ✅ 投票完成
- ✅ 点击奖励
通知与监控
- ✅ Discord Webhook 集成
- ✅ ntfy 推送支持
- ✅ PushPlus 推送支持(国内微信推送)
- ✅ 全面日志记录(带日志过滤、本地文件持久化)
- ✅ Docker 支持与监控
本脚本支持两种部署方式,按你的场景二选一即可:
| 维度 | 📦 Windows 直跑 | 🐳 Docker |
|---|---|---|
| 配置方式 | 手动编辑 accounts.json + config.json |
.env + compose.yaml 环境变量 |
| 调度 | 手动 / 计划任务 | 内置 cron |
| headless | 可选(可见窗口) | 强制 true(无显示器) |
| 数据持久化 | sessions/ 目录 |
./config/ + ./sessions/ 挂载 |
| 升级方式 | git pull + npm run build |
docker compose up -d --build |
| 前置要求 | Node.js 24+ | Docker + Docker Compose |
详细步骤见下方对应章节。
⚠️ 本项目所有改动基于 Win11 系统测试,其他系统请参考原项目相关配置。
🔧 自动设置(推荐,一键部署)
- 下载或克隆源代码
- Win 系统运行
setup.bat部署环境(若setup.bat报错,请参考下方手动设置) - 在
dist目录的accounts.json添加你的账户信息 - 按照你的喜好修改
dist目录的config.json文件 - 运行
npm start或运行run.bat启动构建好的脚本
🛠 手动设置(自动设置失败时使用)
-
下载或克隆源代码
-
下载安装 Node.js 24 和 npm 环境
-
运行
npm install安装依赖包 -
若出现
Error: browserType.launch: Executable doesn't exist报错,执行:npx patchright install chromium
-
将
accounts.example.json重命名为accounts.json,并添加你的账户信息 -
按照你的喜好修改
config.json文件 -
运行预构建脚本:
npm run pre-build
-
构建脚本:
npm run build
-
启动:
npm start
Details
Docker 下账号和行为配置都通过环境变量传入,容器启动时由 `entrypoint.sh` 自动生成 `accounts.json` 和 `config.json`,**无需手动维护这两个文件**。从模板复制并填写:
cp env.example .env编辑 .env,至少填一个账号:
ACCOUNT_1_EMAIL=you@example.com
ACCOUNT_1_PASSWORD=your_password
# 国内账号推荐加:
ACCOUNT_1_GEO_LOCALE=cn
ACCOUNT_1_LANG_CODE=zh多账号按
ACCOUNT_2_*、ACCOUNT_3_*递增,编号必须连续。完整字段见env.example。
默认配置开箱即用,如需调整取消对应行注释即可:
TZ:时区(默认Asia/Shanghai)CRON_SCHEDULE:调度(默认0 7 * * *,每天 7 点)RUN_ON_START:容器启动时是否立即跑一次(默认true)CONFIG_QUERY_ENGINES:查询源,国内推荐china,localCONFIG_CHINA_API_APPKEY:gmya.net appkey,配合 china 查询源解除免费档限流(留空走免费档)CONFIG_PUSHPLUS_*:PushPlus 微信推送
完整的
CONFIG_*环境变量列表见scripts/docker/entrypoint.sh顶部注释。
无需手动设置。Docker 环境下 headless 被容器入口强制设为 true(容器内无显示器,无法开窗口模式)。
docker compose up -d --build重要:改了代码或 Dockerfile 后,必须加
--build参数重建镜像,否则跑的还是旧镜像。首次部署也建议带--build。
容器挂载了两个目录,重建容器不丢数据:
./config/:配置和账号文件./sessions/:登录会话(首次登录后 cookie 存这里,后续自动复用)
docker compose up -d --build # 构建+启动
docker compose logs -f # 查看日志
docker compose down # 停止并删除容器
docker compose restart # 重启(不重建)编辑
src/config.json(Windows)或通过CONFIG_*环境变量(Docker)自定义行为。 下面按功能分组,点击各 summary 展开详情。
🔵 Core / 核心配置
| 设置 | 描述 | 默认值 |
|---|---|---|
baseURL |
Microsoft Rewards base URL | https://rewards.bing.com |
sessionPath |
用于存储浏览器会话的文件夹 | sessions |
headless |
在后台运行浏览器 | false(可见) |
clusters |
并发账户实例数 | 1 |
errorDiagnostics |
出错时自动截图诊断 | true |
debugLogs |
输出 DEBUG 级别日志(也可用 -dev 启动参数临时开启) |
false |
👆 Fingerprinting / 指纹识别
| 设置 | 描述 | 默认值 |
|---|---|---|
saveFingerprint.mobile |
重用移动浏览器指纹 | false |
saveFingerprint.desktop |
重用桌面浏览器指纹 | false |
🗂 Job State / 任务开关
| 设置 | 描述 | 默认值 |
|---|---|---|
workers.doDailySet |
完成每日集活动 | true |
workers.doSpecialPromotions |
完成特殊促销活动 | true |
workers.doMorePromotions |
完成促销优惠 | true |
workers.doClaimBonusPoints |
领取 dashboard 上的奖励积分(新版 UI 走 Server Action) | true |
workers.doPunchCards |
完成打卡活动 | true |
workers.doAppPromotions |
完成 App 端活动(ReadToEarn / DailyCheckIn 等) | true |
workers.doDesktopSearch |
执行桌面搜索 | true |
workers.doMobileSearch |
执行移动搜索 | true |
workers.doDailyCheckIn |
完成每日签到 | true |
workers.doReadToEarn |
完成阅读赚取活动 | true |
ensureStreakProtection |
启用连击保护(账户级配置,新版 UI 走 Server Action) | true |
🔍 Search / 搜索配置
| 设置 | 描述 | 默认值 |
|---|---|---|
searchOnBingLocalQueries |
使用本地查询 vs. 获取的查询 | false |
searchSettings.scrollRandomResults |
随机滚动搜索结果 | true |
searchSettings.clickRandomResults |
点击随机结果链接 | true |
searchSettings.parallelSearching |
桌面端/移动端搜索并行执行 | false |
searchSettings.queryEngines |
查询源及顺序(数组),决定从哪些源获取搜索词 | ['china', 'local'] |
searchSettings.searchResultVisitTime |
访问搜索结果页的停留时间 | 10sec |
searchSettings.searchDelay |
搜索之间的延迟(最小/最大) | 30sec - 1min |
searchSettings.readDelay |
阅读赚取活动的阅读间隔(最小/最大) | 30sec - 1min |
searchSettings.chinaApi.appkey |
gmya.net appkey(填入解除免费档限流,留空走免费档) | ''(空) |
📌 注:示例配置
config.example.json里searchDelay为6-12min、readDelay为6-11min、searchResultVisitTime为20sec,比 Validator 默认值更保守,适合长时间挂机场景。
🌐 queryEngines 查询源说明(含国内可用性)
searchSettings.queryEngines 决定从哪些源获取搜索词,按数组顺序尝试。可选值:
| 值 | 来源 | 国内可用性 |
|---|---|---|
china |
中国热搜(gmya.net:百度/头条/抖音/微博/知乎) | ✅ 直连 |
local |
本地查询词(search-queries.json,392 个标准词) |
✅ 离线 |
google |
Google Trends | ❌ 需代理(见 proxy.queryEngine) |
wikipedia |
维基百科热门 | ❌ 需代理 |
reddit |
Reddit 热门帖 | ❌ 需代理 |
国内推荐配置:["china", "local"](示例配置默认值),无需代理即可获取丰富搜索词。
当 queryEngines 包含 china 时,搜索词从中国热搜获取:
- 数据源:gmya.net 热门词 API(百度/头条/抖音/微博/知乎热搜榜)
- 策略:随机打乱 5 个源,取前 N 个聚合去重(避免每个账号都用同一个源)。N 由是否配置
chinaApi.appkey决定:有 appkey 取 2 个;免费档取 1 个。首选源全部失败时自动 fallback 到剩余源 - 限流处理:免费档(无 appkey)对连续请求有频率限制,会触发 403。本脚本在源与源之间插入随机退避(1.2~2.5s),命中限流后指数退避 ×1.5,并将限流错误如实上报(不再误报为"格式异常")。想彻底避免限流,在
searchSettings.chinaApi.appkey填入 gmya.net appkey - 扩展:对每个热搜词调用 Bing Suggestions/Related Terms 扩展查询多样性(命中率取决于词的特性 —— 短词高、长句低),扩展进度采样输出,结尾输出"热搜词使用清单"(INFO 级别)
- 本地兜底:
src/functions/search-queries.json提供 392 个标准查询词作为补充
⚙️ 高级设置(超时 / 代理 / 日志过滤)
| 设置 | 描述 | 默认值 |
|---|---|---|
globalTimeout |
操作超时持续时间 | 30sec |
proxy.queryEngine |
代理查询引擎请求(google/wikipedia/reddit 等需翻墙的源;china 源走 gmya.net 国内直连,无需开) | false |
consoleLogFilter |
控制台日志过滤(按级别/关键词/正则 白名单或黑名单) | 见下方说明 |
webhook.webhookLogFilter |
Webhook 推送日志过滤(结构同 consoleLogFilter) | 见下方说明 |
两个字段结构相同,用于过滤输出到控制台 / webhook 的日志:
{
"enabled": false,
"mode": "whitelist",
"levels": ["error", "warn"],
"keywords": ["starting account"],
"regexPatterns": []
}mode:whitelist(只输出匹配的)或blacklist(排除匹配的)levels:日志级别筛选(debug/info/warn/error)keywords:日志消息包含这些关键词则命中regexPatterns:正则匹配
🆕 新版 UI 兼容性(Server Action)
微软新版 dashboard(modern UI)改用 Next.js App Router,部分功能不再有对外 REST API,旧版 API(togglestreakasync、claimallpointsasync)在新版 UI 下因取不到 requestToken 会返回 400 Bad Request。
| 功能 | 调用方式 | 认证 |
|---|---|---|
| 连击保护 toggle | POST /dashboard + next-action hash + body [true] |
Cookie |
| 领取积分 | POST /dashboard + next-action hash + body [] |
Cookie |
版本守卫机制:next-action hash 在编译时生成、绑定到具体部署版本(dpl)。脚本启动时从 dashboard HTML 提取当前部署 ID,与脚本内置的支持版本(20260612-3)比对:
- ✅ 匹配 → 走 Server Action(新版 UI)
⚠️ 不匹配 → 微软可能更新了 dashboard,内置 hash 可能失效,相关功能自动降级跳过(不会 400,不影响其他任务)- 旧版 UI(legacy)→ 仍走原 REST API(需要
requestToken)
如果降级跳过频繁出现,说明微软更新了部署,需要重新更新 hash。
本项目支持三种推送渠道(均在 webhook 对象下,可同时开启多个):
| 设置 | 描述 | 默认值 |
|---|---|---|
webhook.discord.enabled |
启用 Discord 推送 | false |
webhook.discord.url |
Discord webhook URL | "" |
webhook.ntfy.enabled |
启用 ntfy 推送 | false |
webhook.ntfy.url |
ntfy 服务器 URL | "" |
webhook.ntfy.topic |
ntfy 主题 | "" |
webhook.ntfy.token |
ntfy 认证 token | "" |
webhook.ntfy.priority |
ntfy 优先级(1-5) | 3 |
webhook.pushplus.enabled |
启用 PushPlus 推送(国内) | false |
webhook.pushplus.token |
PushPlus token | "" |
webhook.pushplus.template |
PushPlus 模板(txt/html/markdown) |
txt |
💡 国内推荐:PushPlus(微信推送,无需翻墙)。Discord / ntfy 需要能访问对应服务。
报错 Error: browserType.launch: Executable doesn't exist 怎么办?
Chromium 没装上,手动安装:
npx patchright install chromium登录失败 / 卡住 / 每次都要重新登录?
首次运行时请手动完成网页登录一次,等待脚本自动接管剩余流程。登录后的 cookie 会保存到 sessions/ 目录,后续运行会自动复用。
sessions/ 目录需要多备份,丢了就要重新登录。
Docker 改了配置为什么不生效?
改完 compose.yaml 或代码后,必须加 --build 重建镜像:
docker compose up -d --build不加 --build 跑的是旧镜像。
国内查询词被限流(403)怎么办?
免费档对连续请求有频率限制。解决方法:
到 gmya.net 申请 appkey,填入 searchSettings.chinaApi.appkey(Docker 用 CONFIG_CHINA_API_APPKEY 环境变量),即可解除限流。
修改 accounts.json / config.json 后怎么生效?
- Win 环境:必须运行
npm run build重新构建脚本 - Docker 环境:不要手动改容器内的 config 文件(重启会被 entrypoint 覆盖),改
.env或compose.yaml后用docker compose up -d --build生效
旧版 accounts.json / config.json 能继续用吗?
不能。之前的版本与当前版本不兼容,必须重新基于 accounts.example.json / config.example.json 生成。
- Win 环境:复制或重命名
src/accounts.example.json为src/accounts.json并添加凭据;同样src/config.example.json→src/config.json
- 如果出现无法自动登录情况,请在代码执行登录过程中手动完成网页的登录,等待代码自动完成剩下流程。登录信息保存在
sessions/目录(需要多备份),后续运行根据该目录的会话文件来运行。 - Win 环境:复制或重命名
src/accounts.example.json为src/accounts.json并添加您的凭据。 - Win 环境:复制或重命名
src/config.example.json为src/config.json并自定义您的偏好。 - 不要跳过配置这一步。之前的
accounts.json和config.json版本与当前版本不兼容。 - Win 环境:修改
accounts.json或config.json后,必须运行npm run build重新构建脚本。 - Docker 环境:账号和行为配置通过
.env和compose.yaml传入,不要手动改容器内的 config 文件(重启会被 entrypoint 覆盖)。改 compose.yaml 后用docker compose up -d --build生效。
本项目 fork 自 TheNetsky/Microsoft-Rewards-Script,感谢原作者的付出。
本项目不定时同步原项目代码,主要内容为本地化处理:
- 针对国内用户无法访问 Google 等外网的问题,提供中国热搜查询源(百度/头条/抖音/微博/知乎)
- 输出日志的简单中文翻译
- 在原有基础上完善功能
若有侵权请联系删除。
本项目所有改动基于 Win11 系统和委托他人 Docker 环境测试。其他系统未测试,请根据原项目相关配置设置。
| 项目 | 信息 |
|---|---|
| 上游仓库 | TheNetsky/Microsoft-Rewards-Script |
| 当前版本 | 3.1.6.4 |
| 最后同步原项目 | 2026-06-15 |
| License | GPL-3.0-or-later |
风险自负! 使用自动化脚本时,您的 Microsoft Rewards 账户可能会被暂停或禁止。
此脚本仅供教育目的。作者对 Microsoft 采取的任何账户操作不承担责任。