针对公司考勤管理系统实现的自动签到脚本,实现很简陋,将就着用吧。至少请假再也不用调休了:)
为什么选择python
极简主义,简单就是最好的。
开发环境搭建
- 安装python,在官网下载对应版本(https://www.python.org/)
这里选择python2.7版本,也可以是python3.5 - 安装requests模块
目前最新版本的python都集成了pip工具,用pip工具安装非常方便。进入python安装目录下的scripts目录,pip工具在此目录下,运行命令行执行
pip install requests
当然也可以使用python原生工具集urllib,urllib2。同样是处理http请求,只是requests更好用一些。
具体实现
工具目的主要是充当http客户端,模拟登录签到和签出流程
-
登录
利用requests模块的post方法,在此之前我们需要分析考勤网站登录网页的html,抽取需要的参数数据,具体方法如下:
1.在google浏览器打开考勤系统网址,按F12并刷新网页,选择network,在name列表框选择第一项的url,右边点击headers子选项。Request以及Reponse信息都可以查看到
2.我们所需要的是Request Headers以及Form Data字段信息,简单粗暴全部照着拷贝了。
post方法代码如下:
def postLogin(session):
headers={
'Host':host,
'Origin':origin,
'Referer':referer,
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
formData={}
formData['username'] = username
formData['password'] = password
session.post(loginUrl, data=formData,headers=headers,)
- 签到和签出
这里所谓的签到和签出也都是调用post方法发送Http请求,重点在于对目标网址的报文解析,具体参考登录过程中的google浏览器debug方法。签到与签出唯一不一样的就是请求的url地址不同。
def postSave(session, url):
return session.post(url)
checkin_resp = postSave(s, url)
print checkin_resp
checkout_resp = postSave(s, url)
print checkout_resp
这里防止多次签到和签出是通过时间来区分的
工具打包和使用
- 利用PyInstaller简单的编译exe
安装PyInstaller:
pip install pyinstaller
国内网络比较慢,因为这种方式最直接简单。如果安装过程中报错,就是网络断连,重新执行命令。
打包命令也很简单:
pyinstaller -F D:/workspace/python/om/om.py
- 工具的使用
在windows系统下利用任务计划程序设置定时任务,工具需要传递两个参数,用户名和密码。按照签到签出的时间设置两个任务,每天定时执行,具体设置定时任务的方法不在这里说明,具体操作步骤参照百度说明。