用自动化搞定华为云成长中心每日签到

举报
yd_221024848 发表于 2026/10/22 01:22:34 2026/10/22
【摘要】 ## 起因每天手动上华为云成长中心签到、做任务领积分,说实话挺烦的。打开浏览器、登录、点签到、发文章、查积分……一套流程下来十几分钟就没了。作为一个懒出天际的程序员,我决定把这事儿自动化掉。目标很明确:登录 → 签到 → 做任务 → 记积分,全程脚本跑完,我喝咖啡就行。## 环境openEuler 22.03 LTS,ARM64 架构的机器。没有 apt-get,装东西得用 dnf。Play...

## 起因

每天手动上华为云成长中心签到、做任务领积分,说实话挺烦的。打开浏览器、登录、点签到、发文章、查积分……一套流程下来十几分钟就没了。作为一个懒出天际的程序员,我决定把这事儿自动化掉。

目标很明确:登录 → 签到 → 做任务 → 记积分,全程脚本跑完,我喝咖啡就行。

## 环境

openEuler 22.03 LTS,ARM64 架构的机器。没有 apt-get,装东西得用 dnf。Playwright 的 Chromium 也不走寻常路,官方源里没有 ARM64 的预编译包,得从 Playwright 的缓存目录里找那个 `chromium-1248` 版本手动指过去。

```bash
# 设置 Chrome 路径,不然 Playwright 找不到
export CHROME_PATH=/root/.cache/ms-playwright/chromium-1248/chrome-linux-arm64/chrome
```

这一步卡了一阵子。报错信息就一句 "No executable found",完全不告诉你去哪找。翻了半天 Playwright 的 issue 才知道要手动设环境变量。

## 登录这关,最难搞

整个项目里花时间最多的不是写逻辑,是登录。

华为云成长中心(developer.huaweicloud.com/grow)的登录走的是 auth.huaweicloud.com 的统一认证。页面支持手机号、密码、华为账号扫码几种方式。我选了扫码,因为不想在代码里存密码。

但扫码有个问题:**二维码在浏览器里,我怎么把它给用户扫?**

机器在远端服务器上跑,没有显示器。我用了华为云的 DevBridge 开发隧道,把本地 8899 端口暴露到公网,然后写了个 HTML 页面把二维码 base64 内嵌进去,用户通过隧道 URL 访问这个页面就能看到码了。

```html
<img src="data:image/png;base64,xxxx...">
```

听起来简单,实际折腾了三轮:

**第一轮**:直接从 id1.cloud.huawei.com(华为账号)提取二维码。扫完了,用户说"已登录"。结果一查成长中心页面,还是"登录/注册"。原因:华为账号的登录态跟 auth.huaweicloud.com 是两套 session,扫了华为账号的码,cookie 不会自动同步到开发者中心域名。

**第二轮**:从 auth.huaweicloud.com 的登录页提取它自带的二维码(页面里有个 canvas,id 是 `loginQRCodeDiv`)。这次扫码后回调链路是对的,会自动跳回成长中心。但码的有效期太短,等我写完 HTML、更新隧道页面,码已经过期了。

**第三轮**:缩短提取到展示的链路,用 `canvas.toDataURL()` 直接拿 base64,一步写入 HTML 文件。用户秒扫,终于过了。

```javascript
var canvas = document.getElementById('loginQRCodeDiv');
var dataUrl = canvas.toDataURL('image/png');
// 直接内嵌到 HTML,通过隧道给用户扫
```

教训:**跨域登录的回调链路必须完整**。从哪个页面发起的登录,就得用哪个页面的二维码,否则 session 域对不上,白扫。

## 签到和任务

登录过了之后就好办了。成长中心的页面结构比较清晰:

- **签到按钮**在右上角积分区域附近
- **任务中心**在页面中部,卡片式布局,每个卡片有"去完成"按钮
- **积分明细**可以查当前总积分

签到就是点一下按钮的事。任务中心需要遍历卡片,看哪些是"去完成"状态,哪些已经做过了。每日任务每天重置,每周任务一周一次。

这里有个判断逻辑要注意:有些任务卡片显示"已完成"但其实是"今日已完成",明天还会重置。别看到"已完成"就跳过,得区分"永久完成"和"周期性完成"。

## 发文章拿积分

每日发布文章能给 60 分,是单任务里分值最高的。

华为云开发者社区的博客发布走的是富文本编辑器。自动化操作的话,得往编辑器里灌内容。我提前准备好文章内容,直接往编辑器的 contenteditable 区域塞 HTML,比逐字 typing 快得多也稳得多。

```javascript
// 直接设置编辑器内容,比模拟键盘输入靠谱
editor.innerHTML = preparedContent;
```

文章主题每天得换一个,不然审核可能不过。我维护了一个主题列表,按日期轮换。

## 积分对账

做完所有任务后,刷新成长中心,读"积分明细"里的当前总积分,减去任务前的基线积分,就是今天赚的。

```javascript
// 任务前记录基线
const before = readTotalPoints();
// ... 执行所有任务 ...
const after = readTotalPoints();
console.log(`今日获得: ${after - before} 分, 总积分: ${after} 分`);
```

## 踩过的坑汇总

| 坑 | 原因 | 解法 |
|---|---|---|
| Chromium 找不到 | ARM64 没有默认路径 | 手动设 CHROME_PATH |
| 扫码后仍未登录 | 跨域 session 不同步 | 用 auth.huaweicloud.com 自带的二维码 |
| 二维码过期 | 提取到展示链路太长 | canvas.toDataURL 一步到位 |
| DevBridge 隧道图片打不开 | 直接给 JPG 路径浏览器拒绝 | 改用 HTML 内嵌 base64 |
| 任务状态误判 | "已完成"可能是周期性的 | 看任务类型区分永久/周期 |

## 最后说两句

整个项目代码量不大,核心逻辑也就几百行。但登录那块花的时间占了三分之二,主要是跨域认证的细节文档里不会写,得自己一轮轮试。

如果华为云能提供一个 OAuth 授权的 API token 方式登录开发者社区,这种自动化就简单多了——一个请求带 token 过去就行,不用折腾扫码和 cookie 同步。希望以后能加上。

代码不贴了,核心思路都在上面。有同样在刷成长中心积分的同学可以参考下登录那块的处理,少走点弯路。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。