【编程实践】每日JK打卡程序操作说明

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分之后,即可避免出错。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值