专栏文章 通过 python 完成博客自动化提交和部署

几勺奶酪 · 2020年12月19日 · 1063 次阅读

常用命令

网上关于采用 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 在执行过程中,需要打开浏览器,并且为了能够定位元素要将浏览器最大化,为了实现更加智能化,采用无头浏览器完成这些操作。同时为了查看任务执行结果,也为了在出现错误时更好的排查问题,可以在执行所有的操作完成之后,保存界面截图。

最后通过调用这两个方法就可以完成博客的自动化上传和部署了。

写在最后

其实很多需要人工执行的任务都可以交由程序去执行,例如

  1. 命令行的执行,可以考虑 python 或者 bash
  2. 对于一些功能上的操作,如果该功能提供了接口访问,可以直接通过接口操作,例如 gitee 对于仓库的操作提供了自己的 open api,通过 token 就可以直接调用这些接口
  3. 对于没有提供接口的功能,我们还可以选择走 UI 自动化,例如上面提到的通过 selenium 模拟界面操作完成 gitee pages 部署

总之,当自己有想法的时候,就可以尝试去做这件事,即使当前没有想到更好或者更高效的方式,也可以先通过已有的技术去实现它,后面随着技术的迭代可以再进行改良和优化。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册