Ubuntu下利用python实现自动打卡系统全过程

Ubuntu下利用python实现自动打卡系统全过程

系统版本:Debian or Ubuntu
Python版本:3.xx以上
实现功能:1.能自动打卡并定时启动;2.截图保存打卡信息;3.发送邮件通知。
因为学校规定要求每天打卡,博主人懒又经常忘记打卡导致辅导员经常在大群里@我,属实尴尬。故干脆把吃灰的香橙派H616(无桌面版Ubuntu sever镜像)拿来挂打卡脚本。欸,舒服了。

1.安装python环境和用到的包

先安装 pip3工具 和相应的库

sudo apt install -y python3-pip  python3-dev python3-setuptools libxml2-dev libxslt1-dev 

因为网页上有中文所以需要安装中文字库,否则截图里会有乱码

sudo apt-get -y install fontconfig xfonts-utils

也可以手动添加字库

再安装python包

pip3 install wheel selenium pillow yagmail 

这里是selenium和chrom_driver安装教程链接
根据板子选择需要下载什么版本的
新建chrominum文件,把下载下来的.deb文件都复制进去

 cd ./chromium/
sudo dpkg -i *.deb

我在安装时出现包依赖错误:dpkg: error processing package ***(–install): dependency problems - leaving unconfigured
解决方案:sudo apt install -f
在安装pillow时会出现很多错误比如:The headers or library files could not be found for jpeg
解决方案: sudo apt-get install libjpeg-dev zlib1g-dev
pillow库的依赖很多还会有其他错误,奇奇怪怪的错误挨着百度就好了

2.码代码

整体流程框图

输入账户密码等
读取config.json获取用户信息
进入网站
登入打卡页面
填写各种信息和验证码
提交打卡结果并截图
1.打卡模块

挑重点讲讲将这个验证码识别吧。我尝试过本地的tessocr-OCR文本识别率感人,验证码纯随便。想用Opencv又感觉太浪费了。所以就去百度申请了一个ocr的api,免费的,有几千调用次数。欸,白嫖就很舒服了。还有个小难点,这个验证码无法直接扒取,只能通过截图保存。因此,需要在整张页面中做一个自适定位并截取的工作。
附代码:

def Analyze_code(screen_shot,chrom_driver):
    element = chrom_driver.find_element_by_xpath('//*[@id="app"]/div/div[3]/div[7]/div/img') #找验证码图片
    #print(element.location)                # 打印元素坐标
    #print(element.size)                    # 打印元素大小
    left = element.location['x']
    top = element.location['y']/2 #这里要除以2,不知道为啥得到的y轴像素有问题
    right = element.location['x'] + element.size['width']
    bottom = element.location['y'] + element.size['height']
    image = Image.open(screen_shot)
    cropped = image.crop((left, top, right, bottom))
    cropped.save('pil_cut_thor.png')
    #调用tesserocr的image_to_text()方法,传入image对象完成识别
    # cropped = image.crop(( 720-200, 2400-300,720,2400-180))  # (left, upper, right, lower)
    # cropped.save("pil_cut_thor.png")
    time.sleep(0.2)

    '''
    #本地识别
    #新建Image对象
    #调用tesserocr的image_to_text()方法,传入image对象完成识别
    check = Image.open("pil_cut_thor.png")
    time.sleep(0.2)
    result = tesserocr.image_to_text(check)
    print(result)
    return result
    '''
    #在线识别
    # 二进制方式打开图片文件
    f = open("pil_cut_thor.png", 'rb')
    img = base64.b64encode(f.read())
    params = {"image":img}
    access_token = '自己申请’
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
        response_json = json.dumps(response.json())  #解析json
        raw_check_num = json.loads(response_json)['words_result'][0]['words']
        check_num  = raw_check_num.replace( " ","")
        print("验证码为:"+check_num)
        return check_num
2.邮件发送模块

去email网站申请一个邮箱,并开通SMTP服务

import yagmail  # 邮件发送模块
import time

#通过邮件将新生成的文件发送到自己的邮箱
def send_email(user_name,email,staus):
    yag = yagmail.SMTP(user='你的邮箱',password='密码',host='主域名)
    t = time.localtime()
    send_time=time.strftime("%Y-%m-%d %H:%M:%S",t)
    contents = [user_name+'同学你好,你在'+send_time+'打卡'+staus[0]+'('+staus[1]+'),截图已经上传到附件,请查收']
    contents = contents + [staus[2]]
    yag.send(email, '请查看'+user_name+'的打卡结果', contents)
    print('------邮件发送成功啦!')
3.定时启动

这里直接百度cron 或者 crontab,网上有更详细的教程,这里只做简单记录
这里是可供参考的教程
首先编辑定时任务列表

sudo crontab -e

第一次使用会让你选择编辑器,我这里选vim,大家随意。
在文件中添加

0 9 * * * /home/orangepi/auto_test/test.py >> /home/orangepi/auto_test/test.log 2>&1

每天上午9点执行我的test.py脚本,并打印日志文件
注意自己板子上的时区。而且crontab执行脚本不会进入脚本所在路径,所以有文件操作的地方需要注意路径问题,即相对路径会操作失败,需要转换成绝对路径。:

orangepi@orangepizero2: timedatectl set-timezone Asia/Shanghai
orangepi@orangepizero2: date -R
Wed, 12 May 2021 13:47:56 +0800
absolutepath=os.path.dirname(os.path.abspath(__file__))+'/'

效果图展示

运行的界面
在这里插入图片描述

保存的截图
在这里插入图片描述
收到的邮件
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值