最近在业务办公区域对接需求的时候,发现了一位漂亮妹子的「苦恼」,简单来说就是她每天都得花一个多小时的时间去将整理好的数据录入到系统中。
为什么是苦恼?
在进入正题前想聊下这位漂亮妹子「不要想多了,只是聊聊漂亮妹子的工作」,这位妹子虽然苦恼,但她做这样的事情已经一年多了,可谓毅力可嘉,有时候我就会觉得很奇怪,为什么不向产品提个需求,要求系统能支持批量导入的功能呢?
和漂亮妹子聊了下,原来曾几何时是提过类似的需求的,但因为优先级,上级重视度等等一系列问题,最后就不了了之了。
漂亮妹子一开始还比较有怨言的,久而久之也就麻木了,最后成为了一种习惯...
老实讲,对于这样的工作状态很不好,当你的工作逐步趋向于重复性操作时,你将很可能被替代。
于是,为了拯救这位漂亮妹子,利用pyhton搞了个脚本,能够自动读取excel中的数据提交表单,完成录入的操作,还提高了手动录入的准确性。
妹子惊呆了,奶茶双手奉上。
一些思路
其实类似这种录入系统,重复工作的场景真的有很多,有时候真的觉得很麻烦,尤其是遇到一些交互比较差,等待时间比较长的系统。
类似这种需求,基本上分这几个步骤:
- 分析页面
- 模拟登录
- 组装表单数据
- 循环提交
当然,你同时也要具备一些技能和知识:
- python「以python举例,其他语言也可以实现」
- http 协议
- chrome调试「以chrome举例,其他浏览器也可以」
具体实现
由于是公司的系统,不太方便贴源码,这里记录下开发过程中的一些重点和坑。
首先是页面分析,这个就不多说了,利用好强大的Chrome
就可以了。
这里重点说说模拟登录,往往这里是比较坑的,虽然内网系统相对来说比较简单,但还是碰到两种常用的登录校验模式。
一种是服务端会生成一个uuid
的state
,在提交登录时会校验传入的与服务端生成的是否一致。
这个时候你就要分析页面,通常会将state
放在页面中
这样就比较容易了,利用python的Requests
和BeautifulSoup
来抓取并实现登录
session_requests=requests.session()
result=session_requests.get(login_url,headers=header)
tree=bs4.BeautifulSoup(result.text,'lxml')
state=tree.findAll('input',attrs={'name':'state'})[0]['value']
另一种是在登录时,前端将密码加密,加密后再进行提交,一开始没注意,坑了我一把,于是将这段代码翻译成python的写法
image#密码加密
def deal_password(pwd):
key='asdrft745'
keylength=10
code=''
i=0
for item in pwd:
keyindex=i%keylength
code=code+chr(ord(item)^ord(key[keyindex:keyindex+1]))
i=i+1
bytesString = code.encode(encoding="utf-8")
return base64.b64encode(bytesString)
当你顺利模拟登录成功后,其实就已经成功过一大半了,后面无非就是组装数据,然后利用强大的Requests
调用接口提交就可以了。
由于表单各不相同,代码也没什么好贴的,主要确认好接口数据格式,是form-data
的,还是json
的,做好相应的转换即可。
另外还是要伪造下header
的,尤其是User-Agent
,避免被误杀,或者被公司安全组查。
最后请求频次也需要注意下,千万不要用力过猛,把系统给搞挂了「虽然这种情况很少」。
最后的最后,贴下自己用到的模块,都是比较常用的,网上也有一大堆的说明教程,有兴趣的同学可以自行实战下,创新工作,告别重复劳动。
image
网友评论