加班系统一直是qs班的特色,但是每次都得输验证码不免有些麻烦,有时候还会发生忘报加班的情况。。。在一个月前我就嚷嚷着要把自动报加班程序写出来,今天花了几乎一天的时间(不知道之后节约的时间有没有这么多^_^),把它写出来了。
关于验证码的处理,本来想在本地实现的,利用PIL和tesseract库,但咱们这个验证码好像有点强(分辨率太低了。。。),好几个程序都没跑出来,那就用API吧,一开始用的showapi,一个不知名的网站,准确率倒是挺高,但免费用20次后就得交钱了,好像是74¥/1000次来着吧(这尼玛还不如手动报呢。。),于是就选择了百度的API,它没有专门做验证码识别的,便用的它的文字识别模块,效果也还行,平均3-4次就可以准确识别了。
至于怎样实现定时运行程序,就不得不提到一个黑科技--计划任务了,可以让计算机自动运行某一个程序或脚本,触发时间、出发条件、重复次数都可以设置(全方位满足你的要求),win+R 输入taskschd.msc 就可以把它召出来。
代码如下,需要的可以拿去,至于百度API的key就用我这个吧,反正每天500次用也用不完。
(py3,好久没写py了,dalao勿喷,基本不需要安装其他库,把data中的3个值改成你的就可以了,pos为助学室和学习室二选一)
url 填网址
#! -*- coding:utf-8 -*-
import requests
import base64
import json
import os
url = 'XXXX'
api_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
headers = {
'Cookie': 'PHPSESSID=0ln5qt5q76jn3tnsjpvtdflnm7',
}
data = {
'name': 'XXX',
'pwd': 'XXX',
'pos': 'XXX',
}
api_headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
api_body = {
'access_token':'24.ffd9855886b54a0011db066779c5b45d.2592000.1533459868.282335-11500055',
'language_type': 'ENG'
}
print(u'这是自动报加班的程序')
while True:
try:
#获得验证码
image = requests.get(url+'image.php',headers=headers).content
api_body['image']=base64.b64encode(image)
#调用baidu-api
res = requests.post(api_url,headers=api_headers,data=api_body).content
res=json.loads(res)
if(len(res['words_result'])==0):
continue
data['code']=res['words_result'][0]['words']
print(data['code'])
#发起加班请求
response = requests.post(url+'post.php',headers=headers,data=data)
res=response.text[84:100].split('\'')[0]
print(res)
# 不断重复直到报上
if res==u'你已经报过加班':
print(u'报加班成功!')
break
except:
print(u'报加班失败!')
break
os.system("pause")
把它放到任何一个位置,再列入计划任务项,就可以每天准时运行了(当然需要联网的,还需要开机状态),我定的是每天9:30报,那么问题来了,忘了取消加班怎么办。^_^!
=||======>
以梦为马,以行为剑,怀着最炽热的心,披荆斩棘,勇往直前!