0 声明(本着学习的态度进行了以下开发)
“关于自动健康打卡运行程序,放在下面了,里面涉及到技术内容很少,其中就是包含一个自动化程序的调用和HTML中element的定位。声明:本程序和经验仅供技术交流使用,任何人不得将其用于非法用途;同时,软件属于测试版本,自己还需多多留意,除技术问题,本人不对其他问题进行解释和负责。”——一份来自开发程序猿的声明
// An highlighted block
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 10 19:12:33 2021
@author: zhiyang
"""
# =============================================================================
# 运行前准备
# 1.准备一个浏览器,Chrome,或者FireFox,本程序以Chrome为例
# 2.在网上下载相应版本的浏览器驱动Chromedriver,并放在Chrome相同的文件夹下
# 3.将Chromedriver的路径添加至计算机用户变量Path中
# 4.python中需要导入指定库selenium(自动化测试框架)、json(采用config.json配置文件导入用户信息时用到)、time(计时器
# 5.在用户数据处填写自己的信息
# =============================================================================
from selenium import webdriver
import time
import json
import yagmail
#1 健康上报用户数据
#1.1 本人学号
#1.2 健康系统密码
#1.3 健康上报网址
uid='**********'
upw='*******'
url='https://jksb.v.zzu.edu.cn/vls6sss/zzujksb.dll/first0?fun2=a'
#2 开启浏览器
def openChrome():#可以设置无头浏览器,不弹出浏览器,后台运行
option=webdriver.ChromeOptions()
option.add_argument('disable-infobars')
option.add_argument("--headerless")
driver=webdriver.Chrome(options=option)
return driver
def operate_jksb(driver):
driver.get(url)
time.sleep(1)#加载网址之后,等待1s
elem_user=driver.find_element_by_name('uid')
elem_user.send_keys(uid)#传入账号
elem_password=driver.find_element_by_name('upw')
elem_password.send_keys(upw)#传入密码
#自动登录进入系统
login=driver.find_element_by_name('smbtn')
login.click()
#page1页面信息提交
driver.switch_to_frame('zzj_top_6s')#切换浏览器的作用域
page1_button=driver.find_element_by_xpath('//*[@id="bak_0"]/div[13]/div[5]/div[4]')
page1_button.click()
time.sleep(1)
driver.switch_to_default_content()#切换回默认作用域
#page2页面信息提交-点击提交表格
driver.switch_to_frame('zzj_top_6s')#切换浏览器的作用域
#page2_button=driver.find_element_by_xpath('//*[@id="bak_0"]/div[11]/div[4]')版本一的提交按钮位置
page2_button=driver.find_element_by_xpath('//*[@id="bak_0"]/div[7]/div[2]/div[2]/div[6]/div[4]')
page2_button.click()
driver.switch_to_default_content()#切换回默认作用域
#page3确认上报弹窗
driver.switch_to_frame('zzj_top_6s')#切换浏览器的作用域
page3_button=driver.find_element_by_xpath('//*[@id="bak_0"]/div[2]/div[2]/div[4]/div[2]')
page3_button.click()
driver.switch_to_default_content()#切换回默认作用域
#退出浏览器
driver.quit()
print("自动填报完成!")
#3 打卡通知的Email用户
SB="********@**.com"
def EmailToSB(sb):
# 1、准备用于发送邮件的邮箱,此处password是邮箱的授权码
username = "********163.com"
password = "***********"
# 2、创建SMTP对象
yag = yagmail.SMTP(user=username, password=password, host="smtp.163.com")
# 3、准备要发送的内容
content = [
"已完成健康上报!"
]
# 4、发送邮件
yag.send(to=sb, subject="测试邮件", contents=content)
# 5、关闭连接
yag.close()
#4 主函数
if __name__ == '__main__':
driver=openChrome()
operate_jksb(driver)
EmailToSB(SB)
1 首先安装Chrome浏览器
1.1 方法一(自己动手丰衣足食)
利用任意一款浏览器(360、Microsoft Edge、FireFox)自行从网上下载进行安装,建议使用goole搜索提供的(需要科学上网),国内一些网站也有提供,但是注意甄别一些假冒的软件。
1.2 方法二(不劳而获简单便捷)
文件夹中我已经给出Chrome的安装程序,双击点击安装(谷歌提供的在线安装服务)
因为程序里面自动化测试框架选用的是Chrome,如果你有需求可以看对应源码更改响应浏览器,如FireFox。
2 配置浏览器驱动程序及路径
如果你在上面采用的是方法一,具体如下面步骤1-2。如果采用方法二,直接跳到步骤3。
2.1 步骤1
请通过浏览器【帮助】-【关于google Chrome】查看浏览器版本,下载相应版本的Chromedriver。
【传送门1】驱动源地址
【传送门2】 镜像地址
2.2 步骤2
根据自己的浏览器版本下载对应的驱动,是一个压缩包,根据上面chrome 87.0.4280.141,应采用87.0.4280.88,有其他版本的下载相应的chromedriver即可。
将下载的压缩包解压,得到一个chromedriver文件。
2.3 步骤3
(1)然后右键单击桌面的谷歌浏览器图标,选在【打开文件所在的位置】,将刚才chromedriver文件复制进来。
(2)复制该文件路径,如下图;
(3)将路径添加至计算机用户变量path中,如下图;
操作:打开【我的电脑】-【计算机】-【属性】
出现“系统”对话框,点击【高级系统设置】-【环境变量】-‘用户变量’【编辑】
将刚才复制的路径粘贴到最后,注意要与前面一个路径用英文分号隔开,如下图:
点击【确定】-‘环境变量’【确定】,关闭其他对话框,重启电脑(也可以不用重启,有时候路径加载不被认可)。
3 构建自己的提醒邮箱
用记事本打开“健康打卡.cfg”文件,根据提示填写自己登录信息。
提醒邮箱的设置,以163为例,qq邮箱同理:
登录163邮箱,点击【设置】-【POP3/SMTP/IMAP】
点击开启之后得到授权码,妥善保存,如下图所示:
复制此授权码,填写至指定位置:
待发送的邮箱地址,就是谁可以接到你的打卡成功通知:
(1)你可以写与上面相同的邮箱,手机上使用邮箱app登录相同的邮箱来接收通知是否打卡成功;
(2)你可以写自己的qq邮箱,利用手机qq可以来接收通知是否打卡成功;
(3)你可以写你对象的邮箱,每天向Ta报备你的健康(本single dog觉得此功能多余);
(4)你可以写你老师的邮箱,每天一封向他汇报健康打卡情况(此建议纯属开玩笑,如有人当真,后果自负!)。
检查自己的账户信息和邮箱信息,保存.cfg文件。(注:要保证.cfg和.exe文件在同一个文件夹下)
此时,运行准备已经完成,可以双击.exe文件执行打卡操作。
4 启用Windows定时任务,实现自动打卡
点击windows搜索(电脑左下角的放大镜)“计算机管理”,在任务计划程序库中可查看正在准备的程序。
点击【创建基本任务】,填写名称(必填)和描述(非必填),点击【下一步】
任务触发器,选择【每天】,点击【下一步】
开始时间,根据自己习惯进行设定,应确保在电脑开启的时间段内,点击【下一步】
选择【启动程序】,点击【下一步】
点击【浏览】,选择EXE文件;随后,将程序路径去掉“\程序名.exe”复制粘贴放到起始于中,<以下图为例子,【起始于】中应填写<“C:\Users\57102\Desktop\健康打卡_v1\健康打卡_v1”>
点击【下一步】
点击【完成】,创建任务完成。
在【任务计划程序库】中查看自己的任务是否准备就绪。
关闭【计算机管理】。
到此,完成全部操作,可以让电脑代替自己定时进行上报打卡了~
如有更好的建议,或者在测试过程中遇到问题的,请及时与我联系,QQ:571023600。
问题反馈日志:
2021年1月13日
问题描述:有同学将自动打卡程序定时启动时间设置为每天的0:02,但是出现了打卡异常情况;
问题原因:可能是打卡系统的服务器时间与我们本地计算机时间存在差异,系统服务器时间比本地计算机时间提前两分钟,如果设置0:02的话,很容易与系统更新时间发生冲突,导致打卡失败;
解决方法:避免两分钟的时间差,将自动启动时间更改到每天0:02分之后,即可避免出错。