前言
3号下午刚处理完工作,就看到蚂蚁在群里发了个单子,简单看了一下需求,与我之前处理过的一个项目有几分相似,便给接了下来,今天项目交付了,在这里分享一下。
项目总体情况
软件:Pycharm
环境: Python 3.7.9(考虑到客户可能会有不同操作系统,为了兼容性考虑)
技术库: requests、pandas、Pyqt5等(详见依赖文件)
需求分析
通过对客户需求文档分析和与沟通,大致有以下几个需求:
-
根据“单号归属”批量向3个接口提交数据
-
需要一个GUI操作界面
-
支持不同的业务员登录
总的来说就是一个POST数据提交和GUI开发。
项目实施
1.Post提交
这一块主要用到的就是爬虫技术,万年不变的步骤,都是先分析网页。
1.1登录
通过抓包发现,密码是明文,难度就降低了一半,然后用正确的密码再分析登录成功后的返回。
`def login(self, username: str, password: str): """ 登录 """ url = "http://cloud.tiamaes.com:11349/erp/portal.bootstrap/SSOLoginAction/login.do" data = { "_tp_data": '{"parameters":{"userName":' + username + ',"pwd":' + password + '},"rowsets":{},"headers":{},"requestComponent":"0"}' } data = parse.urlencode(data).replace("+", "") resp = requests.post(url, headers=self.headers, data=data, verify=False) self.IDENTIFIER = resp.json()["headers"]["IDENTIFIER"] return self.IDENTIFIER`
发现登录成功后会返回一个“IDENTIFIER”参数,值是加密字符串,这样就很明显,光看字面意思都知道这个肯定有用,所以先记录下来。
1.2接口分析
由于我用的是测试账号,这个账号提交的数据都要删掉,为了不给别人注入太多的无效数据,这里就不再实际录入,以业务代码来说明。
- 获取车辆信息
通过分析发现,虽然客户给了一部分车辆的信息,但是还有多缺失的信息,需要自己补充。通过抓包发现,在输入车辆编号以后,会发起一个Ajax请求,表单里其他信息就是Ajax请求返回的数据。
`def get_car_details(self, car_no: str, IDENTIFIER: str): """ 获取车辆信息 """ # print(self.IDENTIFIER) url =