常用命令
网上关于采用 Gitee Pages+Hexo+next 搭建博客的文章非常多,在此不进行详细叙述了,只列举几个后续写博客经常要用到的命令
创建新博客
$hexo new "博客名称"
本地运行服务器
$hexo server
$hexo s
删除已有的静态文件
$hexo clean
生成静态文件
$hexo generate
$hexo g
部署项目到 gitee
$hexo deploy
$hexo d
通过 python 完成博客自动化提交和部署
主要介绍如何通过 python 完成博客的自动化提交和部署
通过 os 库执行命令 def upload_gitee():
# 1、进入博客根目录 os.chdir(blog_path)
# 2、上传到gitee command = "hexo clean"
os.system(command)
command = "hexo g"
os.system(command)
command = "hexo d"
os.system(command)
os.system() 函数等同于在终端中手动执行命令,所以只要可以手动执行的部分 os.system() 函数都可以完成。
windows 和 linux 系统中都有自己的批处理文件,例如 windows 的 bat 和 linux 的 bash,都可以完成多命令的执行,但是如果还有更复杂的功能,交给 python 来完成会更方便
通过 selenium 完成 gitee pages 自动部署
将项目部署到 gitee 之后,gitee pages 并不会自动更新,需要手动点击"更新"按钮,为了达到自动化的目的,可以同 selenium 去完成这一系列操作。
def deploy_gitee():
# 1、进入脚本根目录 os.chdir(current_path)
print(f">>> 切换到{os.getcwd()}")
# 模拟浏览器打开到gitee登录界面 chrome_options = Options()
# 打开chrome无头浏览器 chrome_options.add_argument('--headless')
chrome_options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://gitee.com/login')
# 将窗口最大化 无头浏览器无法最大化,需要在配置中设置窗口大小 # driver.maximize_window() driver.implicitly_wait(10)
username_element = driver.find_element_by_id("user_login")
username_element.send_keys("bye-oldtime")
password_element = driver.find_element_by_id("user_password")
password_element.send_keys("huyanping1994")
# 在开发者工具中可以通过$("")测试css选择器 $x("")测试xpath选择器 login_btn = driver.find_element_by_xpath("//form[@data-control='password']//input[@name='commit']")
login_btn.click()
sleep(1)
# 进入pages部署页 driver.get("https://gitee.com/bye-oldtime/bye-oldtime/pages")
update_deploy_btn = driver.find_element_by_class_name("update_deploy")
update_deploy_btn.click()
deploy_alert = driver.switch_to.alert
deploy_alert.accept()
driver.save_screenshot(f"deploy_result_{time()}.png")
driver.quit()
因为 selenium 在执行过程中,需要打开浏览器,并且为了能够定位元素要将浏览器最大化,为了实现更加智能化,采用无头浏览器完成这些操作。同时为了查看任务执行结果,也为了在出现错误时更好的排查问题,可以在执行所有的操作完成之后,保存界面截图。
最后通过调用这两个方法就可以完成博客的自动化上传和部署了。
写在最后
其实很多需要人工执行的任务都可以交由程序去执行,例如
命令行的执行,可以考虑 python 或者 bash
对于一些功能上的操作,如果该功能提供了接口访问,可以直接通过接口操作,例如 gitee 对于仓库的操作提供了自己的 open api,通过 token 就可以直接调用这些接口
对于没有提供接口的功能,我们还可以选择走 UI 自动化,例如上面提到的通过 selenium 模拟界面操作完成 gitee pages 部署
总之,当自己有想法的时候,就可以尝试去做这件事,即使当前没有想到更好或者更高效的方式,也可以先通过已有的技术去实现它,后面随着技术的迭代可以再进行改良和优化。