0%

解决 gitee page 无法自动更新

众所周知,国内 GitHub 的加载速度不太理想,而大多数开发者会使用 Github 的 Github Page 功能搭建博客,因此博客的访问速度也会受到影响。为了解决访问速度的问题,我们将博客转移到了 gitee 中( OSChina 旗下 git 平台)

1. 问题:使用 hexo 部署到 gitee 后,博客页面并没有更新

  • 原因: gitee page 只有付费版才能自动更新,免费版只能手动点击 “设置” 中的更新按钮

2. 自动化解决方案

  • 使用 puppeteer 操作浏览器进行更新按钮点击。

3. 源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// 此处安装版本为 1.8.0
const puppeteer = require('puppeteer');

async function giteeUpdate() {
const browser = await puppeteer.launch({
// 此处可以使用 false 有头模式进行调试, 调试完注释即可
headless: false,
});
const page = await browser.newPage();
await page.goto('https://gitee.com/login');
// 1. 选中账号控件
let accountElements = await page.$x('//*[@id="user_login"]') // 此处使用 xpath 寻找控件,下同
// 2. 填入账号
await accountElements[0].type('你的 gitee 账户')
// 3. 选中密码控件
let pwdElements = await page.$x('//*[@id="user_password"]')
// 4. 填入密码
await pwdElements[0].type('你的 gitee 密码')
// 5. 点击登录
let loginButtons = await page.$x('//*[@id="new_user"]/div[2]/div/div/div[4]/input')
await loginButtons[0].click()
// 6. 等待登录成功
await page.waitFor(1000)
await page.goto('你的 gitee page 更新按钮页面'); // 比如: https://gitee.com/yang0033/hexo-blog/pages
// 7.1. 监听步骤 7 中触发的确认弹框,并点击确认
await page.on('dialog', async dialog => {
console.log('确认更新')
dialog.accept();
})
// 7. 点击更新按钮,并弹出确认弹窗
let updateButtons = await page.$x('//*[@id="pages-branch"]/div[7]')
await updateButtons[0].click()
// 8. 轮询并确认是否更新完毕
while (true) {
await page.waitFor(2000)
try {
// 8.1 获取更新状态标签
deploying = await page.$x('//*[@id="pages_deploying"]')
if (deploying.length > 0) {
console.log('更新中...')
} else {
console.log('更新完毕')
break;
}
} catch (error) {
break;
}
}
await page.waitFor(500);
// 10.更新完毕,关闭浏览器
browser.close();
}

giteeUpdate();

欢迎关注我的其它发布渠道