学习自简书https://www.jianshu.com/p/6460df84a099,但是gitee页面中获取一些dom的方式有所变化,所以更新如下
1.新建文件夹
npm init -y
npm i -s puppeteer@1.8.0
package.json设置如下
{
"dependencies": {
"puppeteer": "1.8.0"
},
"name": "git-update-pages",
"bin": {
"git-update-pages": "index.js"
}
}
2.新建index.js
#! /usr/bin/env node
// 此处安装版本为 1.8.0
const puppeteer = require("puppeteer")
// 主要原理在于使用xpath获取html页面dom元素,脚本代替小手自动触发点击事件
async function giteeUpdate() {
const browser = await puppeteer.launch({
// 此处可以使用 false 有头模式进行调试, 调试完注释即可
headless: false
})
const page = await browser.newPage()
await page.goto("https://gitee.com/login")
// 1. 获取账号input,自动输入
let accountElements = await page.$x('//*[@id="user_login"]')
// 🚨需要设置为自己的gitee账户🚨
await accountElements[0].type("自己的gitee账户")
// 2. 获取密码input,自动输入
let pwdElements = await page.$x('//*[@id="user_password"]')
// 🚨需要设置自己的gitee密码🚨
await pwdElements[0].type("自己的gitee密码")
// 3. 获取登录按钮,触发点击事件
let loginButtons = await page.$x('//*[@class="git-login-form-fields"]/div[4]/input')
await loginButtons[0].click()
// 4. 等待登录成功
await page.waitFor(1000)
// 🚨需要设置自己的gitee pages页面🚨
await page.goto("https://gitee.com/你的用户名/你的仓库名/pages")
// 5. 监听触发的确认弹框,并点击确认
await page.on("dialog", async dialog => {
console.log("确认更新")
dialog.accept()
})
// 6. 点击更新按钮,并弹出确认弹窗
let updateButtons = await page.$x('//*[@id="pages-branch"]/div[6]');
await updateButtons[0].click()
//7. 轮询并确认是否更新完毕
while (true) {
await page.waitFor(15000);
try {
// 获取更新状态标签
deploying = await page.$x('//*[@id="pages_deploying"]')
if (deploying.length > 0) {
console.log("更新中...")
} else {
console.log("更新完毕")
break
}
} catch (error) {
break
}
}
await page.waitFor(500)
// 8.更新完毕,关闭浏览器
browser.close()
}
giteeUpdate()
3.本地使用该npm包
项目根目录运行命令
npm link
现在就可以本地使用git-update-pages命令了,想自定义命令名的话在package.json中自行修改bin字段即可