利用python实现Gitee Pages定时自动部署/自动签到

本文最后更新于:2020年3月12日 晚上

一: 前期准备

1.1 基础环境

  1. python3 + selenium + chrome浏览器。
    如果有不懂的可以查阅selenium-python中文文档
  2. chrome->设置->关于chrome->查看版本(我的版本是 80.0.3987.106(正式版本) (64 位))。
  3. 需要下载跟你的chrome版本一致的ChromeDriver可执行驱动
    下载完解压放在python根目录(即跟python.exe放在一起)。
    如果上面的ChromeDriver网址打不开,可以使用ChromeDriver淘宝镜像
  4. 最好有一台云主机,没有的话需要自己的电脑设定定时开机,定时任务,定时关机。

1.2 安装环境

  1. 安装python3,不懂的请查阅我的相关blog文。
  2. 打开windows命令行,安装selenium
    pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 获取cookie

首先登录gitee的Gitee Pages服务界面;

点击网页地址栏左边的小锁标志 -> 选择Cookie;

右边弹出的窗口中展开gitee.com -> 展开Cookie -> 点击名为gitee-session-n的项目 -> 下面的内容后面就是你的cookie;

记得要全部复制进去,替换掉下面源码的my_cookie里面的内容。

二: 代码

2.1 源码

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.chrome.options import Options

# 将你的cookie内容替换掉下面的内容
my_cookie = {'domain': '.gitee.com', 'httpOnly': True, 'name': 'gitee-session-n', 'path': '/', 'secure': False,
'value': '内容'}

# 实例化一个启动参数对象
options = Options()

# 设置启动浏览器时窗口最大化运行
# options.add_argument('--start-maximized')

# 设置无界面模式运行浏览器
options.add_argument('-headless')

# 不加载图片, 提升速度
prefs = {"profile.managed_default_content_settings.images": 2}
options.add_experimental_option("prefs", prefs)

# 打开浏览器
print('Launch browser')
driver = webdriver.Chrome(chrome_options=options)

# 删除缓存
print('Delete cookies')
driver.delete_all_cookies()

# 访问网页
print('Visit website')
# 这里链接改为你的码云部署页面的链接
driver.get("https://gitee.com/此处改为你的ID/此处改为你的ID/pages")
time.sleep(5)

# 加载cookie
print('Add cookie')
driver.add_cookie(my_cookie)

# 刷新
print('Refresh')
driver.refresh()
time.sleep(5)

# 点击更新按钮--通过xpath确定点击位置
driver.find_element_by_xpath('//*[@id="pages-branch"]/div[7]').click()
time.sleep(3)

# 确认更新提示框--这个函数的作用是确认提示框
Alert(driver).accept()

# 等待40秒更新
time.sleep(40)

# 这个print其实没事什么用,如果真的要测试脚本是否运行成功,可以用try来抛出异常
print("success")

# 脚本运行成功,退出浏览器
driver.quit()

# 写上更新日志
# 我这里是写在D盘
fp = open("D:\log.txt", "a+")
# linux写在/home
# fp = open("/home/temp/log.log", "a+")
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
fp.write("auto update time:{0}\n".format(now_time))
fp.close()

把源码黏贴到gitee.py文件内,备用。

2.2 注意事项

  • html的id属性、xpath可以通过在chrome的网页里面按F12 -> 选择一个元素进行检查(快捷键Ctrl + Shift + C)查看,如图就是百度一下的div块元素属性。
    CopyXPath

  • python selenium模块的具体函数使用方法请参考官方文档。

  • 编写自动签到脚本也差不多同样的道理。

三: 添加定时任务自动部署

3.1 Windows主机

  1. 登录windows云主机,复制gitee.py到D盘根目录。
  2. 云主机内->右键我的电脑->管理->工具->任务计划程序->创建基本任务…添加任务每天执行一次,实在不会的请百度
  3. 在自己电脑上的话也可以设置定时开关机,并把如下代码添加到hexo一键上传部署脚本的后面,每次定时git push后自动在gitee的pages界面部署。
1
2
3
4
5
6
7
8
@echo off

d:

python gitee.py
echo "等待更新完成过后再关闭窗口"
timeout /t 180
rem 上面的代码是等待3分钟。

3.2 Linux主机

  1. 登录Linux云主机,复制gitee.py/home/temp/目录。
  2. 添加Linux计划任务
    crontab -e
  3. 选择1选项nano编辑,光标拉到最后面,复制如下代码;
  4. 10 6 * * * /home/temp/gitee.py start

说明:

  • crontab表达式在线生成
  • 延迟0~1小时的话,直接在py或者sh文件中利用sleep及random命令设置。
  • crontab -l查看当前已经保存的计划任务。

四: 参考文献

enjoy!