大数据 SpringApplication codeigniter animation webforms Fries GMU jquery绑定click事件 oracle删除字段sql matlab定义空矩阵 cad怎么重复上一次命令 mysql自连接 javaweb是前端还是后端 idea格式化代码设置 mysql删除存储过程 oracle存储过程返回值 python加注释 python基础教程免费 java开发 java删除数组元素 java多线程教程 java中map 嵌入式开发教程 getelementbyid flash基础 虚拟打印机安装 电子商城系统 jlabel 汉仪文黑 软件龙头股 asp编程 工程地质手册 文件分割 qq浏览器手机版 ps平面广告设计教程 vc运行库合集 ipad怎么清理内存垃圾 女圣骑 xr卡槽 ps涂抹工具快捷键
当前位置: 首页 > 学习教程  > python

健康系统自动上报(Python+selenium+腾讯云服务器Centos7.6)——全网最详细的服务器部署指南

2021/2/8 17:46:00 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

健康系统自动上报(Pythonselenium腾讯云服务器Centos7.6) 文章目录前言1. 实现方法的选择1. 利用腾讯云函数requests模块解决。2. 利用selenium服务器/腾讯云函数实现。2. 安装库3. 下载谷歌浏览器和驱动4. 脚本功能5. 完整代码6. 浏览器设置7. 程序流程…

健康系统自动上报(Python+selenium+腾讯云服务器Centos7.6)

文章目录

  • 前言
  • 1. 实现方法的选择
    • 1. 利用腾讯云函数+requests模块解决。
    • 2. 利用selenium+服务器/腾讯云函数实现。
  • 2. 安装库
  • 3. 下载谷歌浏览器和驱动
  • 4. 脚本功能
  • 5. 完整代码
  • 6. 浏览器设置
  • 7. 程序流程图
  • 8. 邮件服务
  • 9. Selenium元素定位
  • 10. 云服务器上运行
    • 1. 安装selenium库
    • 2. 安装谷歌及驱动
    • 3. 编辑程序
    • 4. 测试程序
    • 5. 添加定时任务


前言

本着学习交流的目的,最近写起了自动打卡程序。当然啊,如果真的有发烧、感冒等其他情况,还是要自己上报呀,听从学校安排。实现原理实际上也不难,selenium其实就是模拟人工点击而已,Python的selenium库包含一些找到网页中的元素的函数,和一些填充信息、模拟点击的函数等。然后云服务器用于定时运行程序,每天0:01自动打卡。程序设置了较多异常处理机制,所以基本不会漏打卡。因为我在完成这个小项目的过程中遇到了许多bug,最后虽然一一解决了,但是过程真的是一波三折,所以在这里写个CSDN博客,希望对大家有所帮助,避免踩坑。


1. 实现方法的选择

1. 利用腾讯云函数+requests模块解决。

        腾讯云函数简单说就是腾讯给你出服务器,让你可以跑你自己的程序,目前支持python、node、php、java、golang,写这种小程序就用python再舒服不过了。使用直接在腾讯云中注册然后产品中找到云函数,每月能够免费运行100万次,自己用也是绰绰有余。
       requests模块主要用到了post函数,用于给远程服务器发送自己这边的健康信息。实际上,浏览器和学校远程服务器的交互过程就是发包的过程,浏览器做的事情无非是把带有data表单数据和基本的headers请求头的包发给服务器罢了,因此,我们只要伪装成浏览器,并且知道了headers请求头信息和data表单数据的发送格式,就可以让程序来模拟发包了,服务器收到发送的包后,会以为你已经打卡了,并发回响应。
       当然了,从标题可以看出,我最后是没有选择这一方案,原因是我对抓包和源码分析不太了解,而且受限于打卡系统的打卡时间和次数限制,无法做很多测试,所以就放弃了这一方案。但是,值得一提的是,这一方案是比较”聪明“的,下面我要介绍的是比较憨的方法,但是非常实用,也很容易实现。
这一方法相关的博客也有很多,这里放一个参考。
链接:腾讯云函数实现自动每日健康打卡

2. 利用selenium+服务器/腾讯云函数实现。

        前面说了,这个方法无非是模拟了人工打卡。我们知道,我们打卡的时候,首先找到输入框/待选按钮,然后往里面输入信息或者点击。selenium模块也是这个思路,首先根据元素的身份信息找到你想要点击/输入的元素(身份信息可以右击—>检查—>元素 中查看),然后调用selenium的click(),send_keys()函数进行模拟点击/输入。值得一提的是,这一方法是用Python程序去控制浏览器的操作,会有交互界面,可以直观地看出进行到哪一步了,每一步是否成功,非常友好。当然,为了更加地自动化,打卡不能只部署在本地计算机上,还必须部署到云服务器上,并设置定时任务,彻底实现每日自动打卡。而且,本程序更有贴心的打卡结果推送服务,不管打卡失败还是成功,都会邮件告知用户。
注意本地调试的时候才进行2-9步骤,如果希望马上能在服务器上部署上打卡程序的,建议跳过这些步骤直接到10. 云服务器上运行

2. 安装库

打开cmd命令行界面,直接输入以下代码:

pip install selenium

下图是安装完的selenium库的信息,输入以下代码,验证安装成功。

pip show selenium

已经安装好的selenium库

3. 下载谷歌浏览器和驱动

下载谷歌浏览器的过程就不写了,主要说说谷歌浏览器的驱动,chromedriver.exe的下载。
其实也没啥好说的,注意和google浏览器的版本匹配就行,不然会报错,丢一个驱动下载链接,windows对应win32。
链接:http://chromedriver.storage.googleapis.com/index.html

谷歌版本信息
chromedriver版本win32
可以看到,我的驱动路径是:D:\Program Files\chromedriver_win32\chromedriver.exe

4. 脚本功能

首先在登录页面登录,然后打开健康系统,填入健康信息,点击提交,再点击确认,提交完成。之后会再次检测是否已提交,并通过邮件告知用户打卡结果。

5. 完整代码

代码如下:

# -*- coding: utf8 -*
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
import time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
##################### 用户信息 #########################
#如需增减人数,请直接修改usernames,passwords,names,receivers字段
usernames = ["XXX","XXX","XXX"]#学号
passwords = ["XXX","XXX","XXX"]#智慧理工密码
names = ['XXX','XXX','XXX']#用户姓名(用于推送给用户)
receivers = ['XXX@qq.com','XXX@qq.com','XXX@qq.com'] # 收件人邮箱,可设置为QQ邮箱或者其他邮箱,发送的邮件可能会进入用户垃圾箱
Errors = [1]*len(usernames)#记录异常
Clocked = [0]*len(usernames)#记录打卡情况
######################################################

############## 浏览器设置  #####################
url = "http://ids.njust.edu.cn/authserver/login?service=http%3A%2F%2Fehall.njust.edu.cn%2Flogin%3Fservice%3Dhttp%3A%2F%2Fehall.njust.edu.cn%2Fnew%2Findex.html"#智慧理工登录网址
chrome_options = Options()
#因为在云服务器上运行,去除可视界面,如需显示可视界面,将下面6行代码注释掉
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('window-size=1920x3000')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
chrome_options.add_argument('--headless')
###############################################

################### 发邮件.h ###################
mail_host = "smtp.qq.com"  # 设置qq服务器
mail_user = "XXX@qq.com"  # 发送人邮箱
mail_pass = "XXX"  # 授权码,注意是授权码,非QQ密码,如何获取授权码,请参阅https://jingyan.baidu.com/article/ac6a9a5eb439f36b653eacc0.html
sender = 'XXX@qq.com' # 发件人邮箱,注意和mail_user一致
####################################################
test_times = 1 #打卡失败后重复次数=test_times+1=2
#test(driver)功能:测试系统是否还能填写
def test(driver):
    try:
        # 页面加载前先等待最大20s,每0.5s检测一次是否已经可以定位到元素,若可以,跳过等待,程序继续进行
        # 点击搜索框,进入新页面
        WebDriverWait(driver, 20 , 0.5).until(
            EC.presence_of_element_located((By.ID,"ampHeaderSearchResult"))
        ).click()
        # 鼠标悬停到向”理“报平安按钮上,加载出选项然后点击
        above = WebDriverWait(driver,30,0.5).until(
            EC.presence_of_element_located((By.XPATH,'//*[@id="ampServiceCenterSearchApps"]/div[6]/div/div[22]/div[2]/div[2]/div[2]/div[1]'))
        )
        time.sleep(2)
        ActionChains(driver).move_to_element(above).perform()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="ampServiceCenterSearchApps"]/div[6]/div/div[22]/div[2]/div[1]/span').click()
        time.sleep(2)
        #获取当前浏览器标签数
        num = driver.window_handles
        #如果浏览器新打卡了标签页,转换到最新打开的标签页,否则会默认在原来标签页,导致元素搜索失败
        driver.switch_to.window(num[len(num)-1])
        WebDriverWait(driver,30,0.5).until(
            EC.element_to_be_clickable((By.XPATH,'//*[@id="V1_CTRL173"]'))
        )
        return 1
    except:
        return 0
#test_clocked()函数功能:测试是否打卡/是否打卡成功
def test_clocked(driver,test_times):
    while (test_times >= 0 and test(driver) == 0):
        if (test_times == 0):
            return 0 #表示已打卡
        else:
            test_times = test_times - 1
            driver.implicitly_wait(10) #第二次开始隐式等待10s
            driver.get("http://ehall.njust.edu.cn/new/index.html")
    return 1 #表示未打卡
#多个用户打卡程序
for i in range(len(usernames)):
    try:
        driver = webdriver.Chrome(r'/usr/bin/chromedriver', options=chrome_options)#第一个参数是linux驱动安装位置
        driver.get(url)#登录智慧理工
        time.sleep(2)#为网页加载预留时间,防止还没加载完就搜索元素导致搜索不到

        driver.find_element_by_id("username").send_keys(usernames[i])#通过id识别到账号输入框,并输入账号信息

        driver.find_element_by_id("password").send_keys(passwords[i])#通过id识别到密码输入框,并输入密码

        driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[5]/button').click()#通过xpath路径识别”登录“按钮,并模拟点击

        print("登录成功")
        #首先验证是否已经打过卡了
        if(test_clocked(driver,test_times)==0):
            driver.quit()
            print("对不起",names[i],"已经打过卡了")
            Clocked[i]=1
            try:
                mail_content = names[i]+"已经打过卡了"  # 邮件内容
                message = MIMEText(mail_content, 'plain', 'utf-8')
                message['Subject'] = Header('python发邮件', 'utf-8')  # 邮件主题
                message['From'] = Header("FQB's assistant", 'utf-8')  # 发件人昵称
                message['To'] = Header("我是收件人", 'utf-8')  # 收件人昵称
                smtp = smtplib.SMTP_SSL(mail_host)  # SMTP_SSL默认使用465端口
                smtp.login(mail_user, mail_pass)
                smtp.sendmail(sender, receivers[i], message.as_string())  # 发送邮件
                print(names[i],"邮件发送成功")
            except smtplib.SMTPException:
                print("Error: 无法发送邮件")
                Errors[i] = 0
            continue#直接为下一个用户开始打卡
        #打卡程序,此时位于向“理”报平安界面,下述程序的动作仅填写页面中用户需要填写的项,不填写已经默认填写的项
        driver.find_element_by_xpath('//*[@id="V1_CTRL173"]').click()#点击,弹出下拉列表
        time.sleep(2)
        s = Select(driver.find_element_by_xpath('//*[@id="V1_CTRL173"]'))#选择下拉列表37.0
        s.select_by_value("37.0")
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="V1_CTRL109"]').click()#选择是否出现发热或呼吸道感染症状,选项为否
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="V1_CTRL126"]').click()#选择是否处于隔离状态,选项为“否”
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="V1_CTRL179"]').click()#选择所在地是否为中高风险地区,选项为“否”
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="V1_CTRL183"]').click()#选择所在地是否为中高风险地区所在设区市的其他地区,选项为“否”
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="V1_CTRL142"]').click()#勾选承诺
        time.sleep(2)
        driver.find_element_by_xpath('//div[@class="btns"]/ul[@class="btn_group btn_toEnd"]/li/a[contains(@id,"infoplus_action")]/nobr').click()#点击提交按钮
        time.sleep(5)
        driver.find_element_by_xpath('//button[@class="dialog_button default fr"]').click()#点击“好”,完成提交
        #通过重新登录->判断是否还能填写,来判断是否打卡成功,为保险起见,设置了循环2次登录
        if(test_clocked(driver,test_times)==0):
            print(names[i],"打卡成功")
            try:
                mail_content = names[i] + "打卡成功!"  # 邮件内容
                Clocked[i]=1
                message = MIMEText(mail_content, 'plain', 'utf-8')
                message['Subject'] = Header('python发邮件', 'utf-8')  # 邮件主题
                message['From'] = Header("FQB's assistant", 'utf-8')  # 发件人昵称
                message['To'] = Header("我是收件人", 'utf-8')  # 收件人昵称
                smtp = smtplib.SMTP_SSL(mail_host)  # SMTP_SSL默认使用465端口
                smtp.login(mail_user, mail_pass)
                smtp.sendmail(sender, receivers[i], message.as_string())  # 发送邮件
                print(names[i], "邮件发送成功")
            except smtplib.SMTPException:
                print("Error: 无法发送邮件")
                Errors[i]=0
        else:
            try:
                mail_content = names[i] + "打卡失败!请手动打卡"  # 邮件内容
                Clocked[i] = 0
                message = MIMEText(mail_content, 'plain', 'utf-8')
                message['Subject'] = Header('python发邮件', 'utf-8')  # 邮件主题
                message['From'] = Header("FQB's assistant", 'utf-8')  # 发件人昵称
                message['To'] = Header("我是收件人", 'utf-8')  # 收件人昵称
                smtp = smtplib.SMTP_SSL(mail_host)  # SMTP_SSL默认使用465端口
                smtp.login(mail_user, mail_pass)
                smtp.sendmail(sender, receivers[i], message.as_string())  # 发送邮件
                print(names[i], "邮件发送成功")
            except smtplib.SMTPException:
                print("Error: 无法发送邮件")
                Errors[i] = 0
    except:
        try:
            mail_content = names[i] + "打卡失败!请手动打卡"  # 邮件内容
            Clocked[i] = 0
            message = MIMEText(mail_content, 'plain', 'utf-8')
            message['Subject'] = Header('python发邮件', 'utf-8')  # 邮件主题
            message['From'] = Header("FQB's assistant", 'utf-8')  # 发件人昵称
            message['To'] = Header("我是收件人", 'utf-8')  # 收件人昵称
            smtp = smtplib.SMTP_SSL(mail_host)  # SMTP_SSL默认使用465端口
            smtp.login(mail_user, mail_pass)
            smtp.sendmail(sender, receivers[i], message.as_string())  # 发送邮件
            print(names[i], "邮件发送成功")
        except smtplib.SMTPException:
            print("Error: 无法发送邮件")
            Errors[i] = 0
    finally:
        driver.quit()
#最后一步,通过serve酱通知某个用户打卡详情,格式XXX1 打卡成功 邮件发送成功 XXX2 打卡成功 邮件发送成功 XXX3 打卡成功 邮件发送成功
try:
    driver = webdriver.Chrome(r'/usr/bin/chromedriver', options=chrome_options)
    states_clocked = ["打卡失败","打卡成功"]
    states = ["邮件发送失败","邮件发送成功"]
    print("已经将打卡统计信息发给FQB")
    #如何使用serve酱为自己推送消息:http://sc.ftqq.com/3.version,请修改下面的链接,下面的链接只是示例
    url_vx = "https://sc.ftqq.com/SCU157098T204c342f4bb7d4db05fb3ae1fcb1fcb86017bebf171dc.send?text="
    for i in range(len(usernames)):
        url_vx = url_vx + " " + names[i] + " " + states_clocked[Clocked[i]] + " " + states[Errors[i]]
    driver.get(url_vx)
except :
    print("Error: 无法推送微信消息")

以上是最终部署在服务器上的python代码,注释比较详细,应该都能看懂。但是,实际过程中,我是先在Pycharm上调试,没问题了才部署到云服务器上的。

6. 浏览器设置

第三大节已经在本地计算机上装好谷歌和对应的驱动了。现在对浏览器设置进行说明:
一开始本地调试的时候,为了方便观察程序运行过程,未屏蔽可视界面,即底下6行是被注释掉的。

url = "http://ids.njust.edu.cn/authserver/login?service=http%3A%2F%2Fehall.njust.edu.cn%2Flogin%3Fservice%3Dhttp%3A%2F%2Fehall.njust.edu.cn%2Fnew%2Findex.html"#智慧理工登录网址
chrome_options = Options()
#因为在云服务器上运行,去除可视界面,如需显示可视界面,将下面6行代码注释掉
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('window-size=1920x3000')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
chrome_options.add_argument('--headless')

7. 程序流程图

Created with Raphaël 2.2.0 开始 登录智慧理工 登录向”理“报平安 是否已经打卡? 邮件通知用户已经打过卡了 队列中是否还有用户? 切换用户 推送所有用户的打卡结果与邮件发送状态给某个用户 填写健康信息并上传 打卡后验证是否打卡成功? 邮件通知用户打卡成功 邮件通知用户打卡失败 yes no yes no yes no

8. 邮件服务

参考了下述文章:有一点需要注意,授权码不等于QQ密码。用Python发送给别人的邮件可能会被放到垃圾箱中。
Linux上Python3使用smtp发送邮件

9. Selenium元素定位

Python的Selenium库提供了很多定位元素的方法,可以用元素的id,class,name,绝对路径,相对路径等身份信息来定位到元素。一般鼠标移到想要寻找的元素上,后面右击—>检查—>元素,就出现一大堆网页源码,会有一块明显变色的区域,这块区域就说明了元素的身份信息,如图中输入框的id=“username”,name=“username”。找到元素信息后,我们就可以用driver.find_element_by_id(“username”)函数来定位元素,send_keys(“XXX”)来向元素中输入XXX内容。

示例
当然,这只是最简单的搜索,当网页中的元素是隐藏的,或者是动态变化的,定位它就非常困难了,一般不直接看源码,而是通过一些辅助工具:
火狐浏览器:老版本(FirePath, FireBug), 新版本(Chropath, Try XPath, xPath Finder) | 审查元素>选中元素>右键菜单
谷歌浏览器:Chropath, XPath Helper(应用商店插件) | 审查元素>选中元素>右键菜单
我选用的就是XPath Helper插件,具体使用方法可以自行百度。建议搭配一些基本的Xpath定位知识使用效果更佳。下面是关于selenium元素定位用法很好的一篇文章
Selenium必须掌握的元素定位方法
XpathHelper

10. 云服务器上运行

关于服务器,我一开始尝试了腾讯云函数,结果上传了谷歌浏览器和驱动之后,代码还是运行报错,网上也没相关的信息。考虑到谷歌浏览器和对应的驱动都是exe文件,可能云函数只提供函数运行服务,无法运行浏览器,导致报错。
然后,我就转而使用云服务器来运行程序,并通过crontab命令来定时运行。
我用的云服务器是腾讯云服务器:
腾讯云产品体验,选择“轻量应用服务器”
因为windows系统占用空间过大,我选择的是linux系统,因为是第一次接触linux,在使用过程中确实遇到了很多麻烦,不过关于linux的使用方法,遇到的各种坑,别人也都遇到过,网上一查就能查到解决办法的。
根据腾讯云服务器的帮助文档 使用远程登录软件登录 Linux 实例
登录到putty终端后如图所示,有一点需要注意,输入密码时候是不显示的,按enter执行。

Putty登录后的界面
小知识①:光标选中即复制,鼠标右键单击即粘贴。
复制
小知识②:vim xxx.py 表示编辑xxx.py文件(没有则新建)进入vim界面后,如下所示,按i可以插入字符。按ESC退出插入字符模式,再按shift+Q,输入小写的x,再按Enter保存并退出,回到命令行界面。
进入vim界面
小知识③:vim界面中直接右击粘贴可能会导致粘贴异常,比如粘贴好多遍,开头多了一行,第一行开头少了一些字符都有可能,不知道是什么原因。反正我是直接粘贴后比对修改了一下。
小知识④:在vim中,按大写的V进入行选模式,可以快速删除代码。
小知识⑤:vim中,光标下移/上移才会显示下方/上方被遮住的代码,直接拉进度条是看不到的。
小知识⑥:按小写的u撤销上一步操作,Ctrl+r恢复上一步被撤销的操作。
小知识⑦:Putty过一段时间就断连了,需要关闭软件重新打开。
这些都是我遇到后百度的,所以有不懂的直接百度就行。
前面补充了很多小知识,下面对环境进行配置

1. 安装selenium库

使用下述命令,

pip3 install selenium

安装后可以运行下述代码,查看安装的版本信息

pip3 show selenium

2. 安装谷歌及驱动

1. 谷歌浏览器的安装

在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo

cd /etc/yum.repos.d/
vim google-chrome.repo

在新打开的vim界面,按i插入如下代码

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

之后按ESC退出插入字符模式,再按shift+Q,输入小写的x,再按Enter保存并退出,回到命令行界面。
安装google chrome浏览器:

 yum -y install google-chrome-stable

Google官方源可能在中国无法使用,导致安装失败或者在国内无法更新,可以添加以下参数来安装(不过我没添加,安装成功了):

yum -y install google-chrome-stable --nogpgcheck

在命令行界面输入代码,查看安装的谷歌的版本信息

google-chrome --version

查看谷歌版本信息
可以看到,下载的谷歌是最新版。
建立一个软连接方便使用,我对应的路径是/usr/bin/google-chrome

which google-chrome
ln -s 第一行命令找到的路径 /bin/chrome

解决root用户不能运行chrome:

vim /opt/google/chrome/google-chrome

按方向键,将光标移至底部,将最后一行改写为:

exec -a "$0" "$HERE/chrome" "$@" --no-sandbox $HOME

2. 谷歌浏览器驱动的安装
访问:https://npm.taobao.org/mirrors/chromedriver
下载对应谷歌版本的驱动,因为是88.0.4324.146,选择88.0.4324.96版本的linux版下载即可,已经为你们获取到了下载链接,输入下述代码即可下载

wget https://npm.taobao.org/mirrors/chromedriver/88.0.4324.96/chromedriver_linux64.zip

下载完成后输入下述代码安装zip解压软件

yum -y install zip

安装完成后运行下述命令解压

unzip chromedriver_linux64.zip

移动到/usr/bin目录下

sudo mv chromedriver /usr/bin

测试谷歌驱动是否安装

chromedriver --version

测试谷歌驱动是否正确安装
结果显示已经安装,且版本正确。
至此,服务器环境都配好了。下一步我们要开始弄代码了。

3. 编辑程序

在命令行界面,输入下面代码:

vim test.py

然后将上述代码粘贴到vim里面:
首先,在vim界面输入i,进入插入模式,然后复制代码(注意修改个人信息),然后在光标位置右击,粘贴,千万注意比对一下,可能有错——vim界面中直接右击粘贴可能会导致粘贴异常,比如粘贴好多遍(注意光标下移看看,盲猜粘贴了三遍),开头多了一行,第一行开头少了一些字符都有可能,不知道是什么原因。反正我是直接粘贴后比对修改了一下。
最后确认无误后,按ESC退出插入字符模式,再按shift+Q,输入小写的x,再按Enter保存并退出,回到命令行界面。如需再次修改,只需再次输入上述代码即可,即vim test.py(可能跳出选项,就选E选项,对文本进行编辑)

4. 测试程序

在命令行界面,输入

python3 test.py

运行test.py程序,如果显示,就说明运行成功。同时,邮件会发送到你的邮箱,注意可能在垃圾箱,记得取出来,之后应该就不会再进入垃圾箱了。(这是一个用户情况下的打印信息。)

登录成功
对不起 XXX 已经打过卡了
XXX 邮件发送成功 
...
...

如果有bug说明代码没改对,我贴上去的代码是经过我测试可以运行的,如果有bug,说明你改错了。可以注释掉except及其程序,并将try注释掉,记得将try下面的代码缩进改一下。这样的话,程序会报错,提示你问题出在什么地方,然后对着错误提示百度搜索就行。

5. 添加定时任务

如果程序运行没问题了,之后就是添加定时任务,来实现自动化打卡的最后一步。
在命令行界面输入

crontab -e

进入vim界面,往里面输入

*/3 * * * * /usr/bin/python3 /root/test.py

即在里面加一个任务,从左到右依次表示分、时、日、月、周
这段代码的意思是在 任何时任何日月周,每隔3分钟,用路径/usr/bin下的python3运行/root/路径下的test.py文件。
然后再输入下面命令重启一下crond服务

service crond restart

然后关闭Putty(当然也可以不关)。
检验一下,每隔3分钟是否真的定时发送邮件给你了。如果是的,那么测试成功。
之后,修改定时任务

1 0 * * * /usr/bin/python3 /root/test.py

设置为每天0:01自动打卡,再次重启一下crond。
至此大功告成,等着每天自动打卡就行。
贴一个原理性的链接
Linux-Centos 用crontab定时运行python脚本详细步骤


本文链接: http://www.dtmao.cc/news_show_2000382.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?