Skip to content

chiihero/Microsoft-Rewards-Script

Repository files navigation

微软奖励脚本

Version License Node Last Sync Upstream

基于 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

详细步骤见下方对应章节。


📦 Windows 部署

⚠️ 本项目所有改动基于 Win11 系统测试,其他系统请参考原项目相关配置。

🔧 自动设置(推荐,一键部署)
  1. 下载或克隆源代码
  2. Win 系统运行 setup.bat 部署环境(若 setup.bat 报错,请参考下方手动设置)
  3. dist 目录的 accounts.json 添加你的账户信息
  4. 按照你的喜好修改 dist 目录的 config.json 文件
  5. 运行 npm start 或运行 run.bat 启动构建好的脚本
🛠 手动设置(自动设置失败时使用)
  1. 下载或克隆源代码

  2. 下载安装 Node.js 24 和 npm 环境

  3. 运行 npm install 安装依赖包

  4. 若出现 Error: browserType.launch: Executable doesn't exist 报错,执行:

    npx patchright install chromium
  5. accounts.example.json 重命名为 accounts.json,并添加你的账户信息

  6. 按照你的喜好修改 config.json 文件

  7. 运行预构建脚本:

    npm run pre-build
  8. 构建脚本:

    npm run build
  9. 启动:

    npm start

🐳 Docker 部署

Details Docker 下账号和行为配置都通过环境变量传入,容器启动时由 `entrypoint.sh` 自动生成 `accounts.json` 和 `config.json`,**无需手动维护这两个文件**。

1. 准备账号文件(.env)

从模板复制并填写:

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

2. 编辑 compose.yaml(可选)

默认配置开箱即用,如需调整取消对应行注释即可:

  • TZ:时区(默认 Asia/Shanghai
  • CRON_SCHEDULE:调度(默认 0 7 * * *,每天 7 点)
  • RUN_ON_START:容器启动时是否立即跑一次(默认 true
  • CONFIG_QUERY_ENGINES:查询源,国内推荐 china,local
  • CONFIG_CHINA_API_APPKEY:gmya.net appkey,配合 china 查询源解除免费档限流(留空走免费档)
  • CONFIG_PUSHPLUS_*:PushPlus 微信推送

完整的 CONFIG_* 环境变量列表见 scripts/docker/entrypoint.sh 顶部注释。

3. 关于 headless

无需手动设置。Docker 环境下 headless 被容器入口强制设为 true(容器内无显示器,无法开窗口模式)。

4. 构建并启动

docker compose up -d --build

重要:改了代码或 Dockerfile 后,必须加 --build 参数重建镜像,否则跑的还是旧镜像。首次部署也建议带 --build

5. 数据持久化

容器挂载了两个目录,重建容器不丢数据:

  • ./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.jsonsearchDelay6-12minreadDelay6-11minsearchResultVisitTime20sec,比 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) 见下方说明

日志过滤结构(consoleLogFilter / webhookLogFilter)

两个字段结构相同,用于过滤输出到控制台 / webhook 的日志:

{
    "enabled": false,
    "mode": "whitelist",
    "levels": ["error", "warn"],
    "keywords": ["starting account"],
    "regexPatterns": []
}
  • modewhitelist(只输出匹配的)或 blacklist(排除匹配的)
  • levels:日志级别筛选(debug/info/warn/error
  • keywords:日志消息包含这些关键词则命中
  • regexPatterns:正则匹配
🆕 新版 UI 兼容性(Server Action)

微软新版 dashboard(modern UI)改用 Next.js App Router,部分功能不再有对外 REST API,旧版 API(togglestreakasyncclaimallpointsasync)在新版 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 覆盖),改 .envcompose.yaml 后用 docker compose up -d --build 生效
旧版 accounts.json / config.json 能继续用吗?

不能。之前的版本与当前版本不兼容,必须重新基于 accounts.example.json / config.example.json 生成。

  • Win 环境:复制或重命名 src/accounts.example.jsonsrc/accounts.json 并添加凭据;同样 src/config.example.jsonsrc/config.json

⚠️ 注意事项

  • 如果出现无法自动登录情况,请在代码执行登录过程中手动完成网页的登录,等待代码自动完成剩下流程。登录信息保存在 sessions/ 目录(需要多备份),后续运行根据该目录的会话文件来运行。
  • Win 环境:复制或重命名 src/accounts.example.jsonsrc/accounts.json 并添加您的凭据。
  • Win 环境:复制或重命名 src/config.example.jsonsrc/config.json 并自定义您的偏好。
  • 不要跳过配置这一步。之前的 accounts.jsonconfig.json 版本与当前版本不兼容。
  • Win 环境:修改 accounts.jsonconfig.json 后,必须运行 npm run build 重新构建脚本。
  • Docker 环境:账号和行为配置通过 .envcompose.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 采取的任何账户操作不承担责任。

About

微软奖励脚本,基于他人脚本实现中文环境的本地化

Topics

Resources

License

Stars

308 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors