Closers 发表于 2020-2-16 21:38

[python] 利用python实现自动签到及Gitee Pages自动部署

本帖最后由 Closers 于 2020-2-16 22:06 编辑

## 一: 前期准备

本教程只适用于没有图片登录验证码的网站。

### 1.1 基础环境

1. python3 + selenium + chrome浏览器。
   如果有不懂的可以查阅(https://python-selenium-zh.readthedocs.io/zh_CN/latest/)
2. chrome->设置->关于chrome->查看版本(我的版本是 80.0.3987.106(正式版本) (64 位))。
3. 需要下载跟你的chrome版本一致的(http://chromedriver.storage.googleapis.com/index.html)
   下载完解压放在python根目录(即跟python.exe放在一起)。
4. 最好有一台云主机,没有的话需要自己的电脑设定定时开机,定时任务,定时关机。

### 1.2 安装环境

1. 安装python3,不懂的请查阅https://www.runoob.com/python3/python3-install.html。
2. 打开windows命令行,安装selenium
   `pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple`

## 二: 代码

### 2.1 源码

```py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.common.alert import Alert

# 模拟浏览器打开到gitee登录界面
driver = webdriver.Chrome()
driver.get('https://gitee.com/login')
# 将窗口最大化
driver.maximize_window()
time.sleep(2)

# 输入账号--通过html的id属性定位输入位置--改为你的账号
user_login = driver.find_element_by_id('user_login')
user_login.send_keys("此处改为你的账号")
# 输入密码--通过html的id属性定位输入位置--改为你的密码
driver.find_element_by_id('user_password').send_keys("此处改为你的密码")
# 点击登录按钮--通过xpath确定点击位置
driver.find_element_by_xpath(
    '/html/body/div/div/div/div/div/div/form/div/div/div/div/input').click()

time.sleep(2)

# 切换到gitee pages界面--改为you_gitee_id
driver.get('https://gitee.com/此处改为you_gitee_id/此处改为you_gitee_id/pages')
# 点击更新按钮--通过xpath确定点击位置
driver.find_element_by_xpath('/html/body/div/div/div/div/div/form/div').click()
# 确认更新提示框--这个函数的作用是确认提示框
Alert(driver).accept()

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

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

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

# 写上更新日志
# 我这里是写在D盘,可以改为自己喜欢的目录
fp = open("D:\log.txt", "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块元素属性。
!(https://closer_laps.coding.net/p/picture/d/picture/git/raw/master/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/Python/CopyFullXPath.png)

- python selenium模块的具体函数使用方法请参考官方文档。
- 编写自动签到脚本也差不多同样的道理。

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

```bat
@echo off

d:

python gitee.py

echo "等待更新完成再关闭窗口... ..."

timeout /t 300
rem 上面的代码是等待三分钟。

```

1. 编写windows批处理脚本,代码如上。注意编码要是windows特有的GBK编码,否则会有乱码,保存为`gitee.bat`。
2. 登录云主机,复制`gitee.py`、`gitee.bat`到D盘根目录。
3. 云主机内->右键我的电脑->管理->工具->任务计划程序->创建基本任务...添加任务每天执行一次,实在不会的请[百度](https://jingyan.baidu.com/article/154b463130041128ca8f41c7.html)
4. 在自己电脑上的话也可以把上述部署代码添加到(https://8hn9w5.coding-pages.com/2020/02/15/hexo/hexo%E4%B8%80%E9%94%AE%E4%B8%8A%E4%BC%A0%E9%83%A8%E7%BD%B2%E8%84%9A%E6%9C%AC%E7%9A%84%E6%9E%84%E5%BB%BA/)的后面,每次git push后自动在gitee的pages界面部署。

## 四: 参考文献

- https://python-selenium-zh.readthedocs.io/zh_CN/latest/
- https://blog.csdn.net/ydydyd00/article/details/80882183
- https://jingyan.baidu.com/article/154b463130041128ca8f41c7.html

**enjoy.**

yike911 发表于 2020-2-16 22:01

sungold 发表于 2020-2-16 22:20

学习了,谢谢分享

暗夜协奏者 发表于 2020-2-16 22:30

其实可以添加发送邮件模块来告知是否签到成功,我这两天也写了一个

星期八的鹏先生 发表于 2020-2-17 18:22

膜拜,学会了用在这几天网络课签到

zucker 发表于 2020-2-17 22:31

你要改成print(找个签到成功的显示,比如连续签到x天,才表示成功了)

okki 发表于 2020-3-5 03:22

在 云服务器window2012上安装python3.7 来测试,代码没有跑起来。
不知道是不是环境没设置好?

jydcb003 发表于 2020-3-5 12:17

思路有了,不知道云服务器如何部署

wxdx110 发表于 2020-3-5 18:42

感谢感谢

yelidewo 发表于 2020-4-21 21:27

暗夜协奏者 发表于 2020-2-16 22:30
其实可以添加发送邮件模块来告知是否签到成功,我这两天也写了一个

大佬能否分享下你的签到网..
页: [1]
查看完整版本: [python] 利用python实现自动签到及Gitee Pages自动部署