眾所周知的原因,國內 GitHub 的加載速度不太理想,而大多數開發者會使用 Github 的 Github Page 功能搭建博客,因此博客的訪問速度也會受到影響。為了解決訪問速度的問題,我們將博客轉移到了 gitee 中( OSChina 旗下 git 平臺)
1. 問題:使用 hexo 部署到 gitee 后,博客頁面并沒有更新
- 原因: gitee page 只有付費版才能自動更新,免費版只能手動點擊 “設置” 中的更新按鈕
2. 自動化解決方案
- 使用 puppeteer 操作瀏覽器進行更新按鈕點擊。
3. 源碼如下:
// 此處安裝版本為 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();