Kylaan

Back

使用 1Panel + Docker 部署全自动 Bing Rewards 积分脚本Blur image

使用 1Panel + Docker 部署全自动 Bing Rewards 积分脚本#

Microsoft Bing 每日搜索就能获得 Rewards 积分,既然手里有一台 24 小时开机的 NAS / 1Panel 面板,不妨直接部署在服务器上自动挂机,既省电又方便。

Docker 容器化edge浏览器 实现了在无头 Linux 服务器上运行带 GUI 的浏览器,完美绕过了微软的反爬机制,配合改造后的 JavaScript 脚本实现。


想法:纯 Python 无头浏览器?#

一开始,我的思路非常直接:用 Python + Playwright 写一个脚本,放在后台跑不就行了?

于是根据原本在 PC 上跑的油猴(Tampermonkey)脚本逻辑,写出了 Python 版本的自动化搜索爬虫。但最大的问题出现了:账号登录

微软的防机器人的风控非常严格。在没有显示器的 Headless Linux 服务器上,想要让脚本自动过验证码、处理 2FA 双重认证几乎是不可能的。 唯一的解法是:在本地电脑登录好,导出 Cookies,再传到服务器上给 Python 脚本吃。

但 Cookies 是会过期的。这意味着每隔一段时间,我就得手动抓一次 Cookies 上传。

最终方案:Docker 化的 Web 浏览器#

最终发现Dockers hub上已经有现成的 Firefox 和 Edge 浏览器镜像。

我们可以通过 Docker 跑一个完整的 Firefox 或 Edge 浏览器,并通过 HTML5 的 VNC 技术,把浏览器的画面实时推送到网页上。

这意味着,我可以用极其轻量的资源,在毫无图形界面的 Linux 服务器上,获得一个可以通过网页随时随地访问的“虚拟浏览器”

部署过程 (基于 1Panel)#

在 1Panel 面板中,整个部署过程异常丝滑:

  1. 打开 1Panel,进入 容器 -> 编排 -> 创建编排
  2. 填入以下 docker-compose.yml 配置:
version: '3'
services:
  edge:
    image: jlesage/edge
    container_name: bing-rewards
    restart: unless-stopped
    ports:
      - "<port>:5800" # 映射到宿主机的访问端口
    volumes:
      - /opt/1panel/local/edge:/config:rw # 持久化配置
    environment:
      - LANG=zh_CN.UTF-8 # 中文界面
    shm_size: "1gb" # 给足共享内存,防止崩溃
yaml
  1. 点击启动!
  2. 在浏览器输入 http://服务器IP:5800访问

在这个容器化的浏览器里,像往常一样打开 Bing 登录账号,安装 Tampermonkey 插件,一切行云流水,没有任何反爬阻碍。

终极改造:让脚本成为真正的“全自动收割机”#

浏览器有了,脚本也装了。但原来的脚本有一个缺陷:必须要手动点击菜单才能开始运行。 既然是挂机,我当然希望它能够每天自动开始,完全不需要我的干预。

为了让它能够真正“无人值守”,我对原版的 JavaScript 脚本进行了深度改造,加入了时间检测机制日志记录功能

核心改造代码片段#

1. 自动唤醒机制 我加入了一段守护循环,只要检测到过了早上 6:00,并且今天还没运行过,脚本就会自动把计数器归零并开始执行。

2. 积分抓取与可视化日志 光跑完不行,我还想知道它到底拿了多少分。我加入了 DOM 元素抓取功能,在任务开始前记录初始积分,结束后记录最终积分,并利用 Blob 自动生成一个精美的 HTML 日志页面。

成果验收与结语#

现在,我的方案完美运转: 那个跑在 Docker 里的浏览器常年挂在后台,停留在 Bing 的首页。每天清晨 6 点,脚本自动启动,自己翻找热门词汇,模拟人类习惯进行滑动和搜索,并在触发风控阈值前聪明地暂停休息。

当我下课或者闲暇时,只需连上我的 Tailscale 虚拟局域网,打开手机浏览器访问 http://服务器内网IP:5800。映入眼帘的不是枯燥的代码报错,而是一个排版精美、记录着详细积分收益的日志页面.

附:完整脚本代码#

最终 JS 脚本完整代码

使用 1Panel + Docker 部署全自动 Bing Rewards 积分脚本
https://kylaan.cn/blog/bingrewards/rewards
Author Kylaan
Published at 2026年2月21日
Comment seems to stuck. Try to refresh?✨