0%

健康信息定时上报

前言

因为前面刚写过实验室安全考试系统自动答题脚本,而本文的健康信息定时上报也是用到了selenium模块,而且确实是每天都要在系统里上报健康信息,所以写了本文这么一个脚本,仅作为学习技术、学习知识记录之用,请勿滥用。

思路

其实也就是用到了python的selenium模块,模拟浏览器登录网站点击按钮实现上报功能,然后把脚本放到服务器上,再设置一个定时任务,每天7点运行一次这个python脚本。其实应该也可以抓上报时的请求包然后分析分析,然后用python定时提交请求,这条路我没试😗

代码
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
#!/usr/bin/env python
# -*- codeing = utf-8 -*-
# @Time : 2020/11/03
# @Author : loadding...
# @File : health_report.py
# @Software : jupyter

from selenium import webdriver
import getpass
import time

if __name__=='__main__':
url='https://e-report.neu.edu.cn/notes/create'
#统一身份认证登录
#username=input('请输入学号:')
#password=input('请输入密码:')
#password=getpass.getpass('请输入密码:')

#设置自己的学号、密码,运行时要修改成自己的学号密码
username='*******'
password='*************'

#在linux环境下运行,添加以下代码
ch_options=webdriver.ChromeOptions()
#为Chrome配置无头模式
ch_options.add_argument("--headless")
ch_options.add_argument("--no-sandbox")
ch_options.add_argument("--disable-gpu")
ch_options.add_argument("--disable-dev-shm-usage")
#设置之后的
dr=webdriver.Chrome(chrome_options=ch_options)
dr.get(url)
#设置用户名和密码
dr.find_element_by_id('un').send_keys(username)
dr.find_element_by_id('pd').send_keys(password)
#点击提交登录
dr.find_element_by_id('index_login_btn').click()
#根据当前页面url来判断是否登录成功
if 'https://pass.neu.edu.cn/tpass/login' in dr.current_url:
print("用户名或密码错误!请重新登录!!!")

#点击本人上报
dr.find_element_by_xpath('//*[@id="app"]/main/div/form/div[1]/table/tbody/tr/td[1]/div/div/div/label[1]/span[1]/span').click()
#点完本人上报后才会出来无变化这个按钮选项,所以先等1秒,否则容易没等到出来就执行了点击无变化按钮操作,最终导致出错
time.sleep(1)
#点击正常
dr.find_element_by_xpath('//*[@id="app"]/main/div/form/div[3]/div[2]/table/tbody/tr[1]/td/div/div/div/label[1]/span[1]/span').click()
#page_source=dr.page_source
#tree=etree.HTML(page_source)
#print(page_source)
#点击无变化
#???怎么突然好使了,试了好久都是点击不了,我还纳闷呢,giao
#点击无变化按钮有时好使有时不好使,经测试确实是因为代码执行太快导致没有出现无变化按钮时就已经执行了点击操作,这个坑排了好久,哈哈哈
dr.find_element_by_xpath('//*[@id="app"]/main/div/form/div[4]/div[2]/table/tbody/tr[1]/td/div/div/div/label[1]/span[1]/span').click()
#点击提交
dr.find_element_by_xpath('//*[@id="app"]/main/div/form/div[6]/button').click()
report_time=time.asctime( time.localtime(time.time()) )
print(report_time+':健康上报成功!!!')

定时任务

把本地写好并测试完成后的python脚本放到服务器上,因为使用了selenium模块,所以linux服务器上还需要配置环境(chrome、chromedriver、selenium等),具体参考我的另一篇文章linux下使用selenium模块

然后再服务器上使用crontab设置定时执行python程序

crontab常用命令:

  1. 查询当前系统用户设置了哪些执行任务:crontab -l
  2. 清空当前系统用户设置的所有任务:crontab -r
  3. 编辑和设置当前系统用户要自动执行的任务:crontab -e
  4. 检查crontab任务执行日志:cat /var/log/cron

在linux服务器上执行crontab -e,然后在弹出的vim编辑界面最后添加下面这行定时任务(每天早上7点执行health_report.py文件把结果存到report.log文件中)

1
2
0 7 * * * python3 /home/lighthouse/python_workspace/health_report.py >> /home/lighthouse/python_workspace/report.
log

查看定时任务列表,可以看到定时任务已经添加成功了

image-20201104085221486

经第二天测试,确实是成功自动上报健康信息了🙃

------------- THE END! THANKS! -------------