登录
说明:
用法:在data中加入 loginid userpassword 的(账号密码加密后)值发送请求即可登录 可在网页中抓取(登录有效期:长期)
# 登录OA
def checkLogin():
global OA_session
headers = {'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
'connection': 'keep-alive',
'content-length': '910',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'host': 'oa.en-plus.com.cn:8090',
'origin': 'http://oa.en-plus.com.cn:8090',
'pragma': 'no-cache',
'referer': 'http://oa.en-plus.com.cn:8090/wui/index.html',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'}
data = {'islanguid': '7',
'loginid': '',
'userpassword': '',
'dynamicPassword': '', 'tokenAuthKey': '', 'validatecode': '', 'validateCodeKey': '', 'logintype': '1',
'messages': '', 'isie': 'false', 'appid': '', 'service': ''}
url = 'http://oa.en-plus.com.cn:8090/api/hrm/login/checkLogin'
token_string = ''
response = OA_session.post(url, headers=headers, data=data)
if response.status_code == 200:
data_dict = response.json()
msginfo = data_dict['msg']
print('OA系统:' + msginfo)
else:
print('登录失败')
获取dataKEy
说明:获取单一OA的dataKEy
用法:输入OA流程单号
# 获取单一OA的dataKEy
# 输入流程号
def getQueryResultKey(OA_danhao_num):
global OA_session
url = 'http://oa.en-plus.com.cn:8090/api/workflow/customQuery/getQueryResultKey'
headers = {'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
'connection': 'keep-alive',
'content-length': '440',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'host': 'oa.en-plus.com.cn:8090',
'origin': 'http://oa.en-plus.com.cn:8090',
'pragma': 'no-cache',
'referer': 'http://oa.en-plus.com.cn:8090/wui/index.html',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'}
data = {'operBtnKey': ' batchSubmit', 'workcode': OA_danhao_num, 'belongPathTree': 'true', 'fromwhere': 'queryIndex',
'menuIds': '1,15', 'menuPathIds': '1,15'}
response = OA_session.post(url, headers=headers, data=data)
if response.status_code == 200:
data_text = response.text
data_dict = json.loads(data_text)
sessionkey = data_dict['sessionkey']
else:
sessionkey = '0'
return sessionkey
获取requestid
说明:
用法:输入参数 dataKey
# 获取流程数据
def get_data_response(dataKey):
global OA_session
data_url = 'http://oa.en-plus.com.cn:8090/api/ec/dev/table/datas' # 请求data
dataKey = dataKey
data_headers = {
'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9',
'connection': 'keep-alive',
'content-length': '106',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'host': 'oa.en-plus.com.cn:8090',
'origin': 'http://oa.en-plus.com.cn:8090',
'referer': 'http://oa.en-plus.com.cn:8090/wui/index.html',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'}
data_data = {
'dataKey': dataKey,
'current': '1',
'sortParams': '[]'}
data_response = OA_session.post(data_url, headers=data_headers, data=data_data)
if data_response.status_code == 200:
print('获取流程数据')
data_json_str = data_response.text
shuju_data = json.loads(data_json_str)
data_dict = shuju_data['datas']
requestid = data_dict[0]['requestid']
else:
requestid = '0'
return requestid
获取params
说明:params 包含流程用途内容 以及所有关键参数
用法:传入参数requestid
# 获取params,params 包含流程用途内容 以及所有关键参数
def mainData_main(requestid):
global OA_session
timestamp1 = int(datetime.now().timestamp() * 1000)
timestamp = str(timestamp1)
wupin_datas = {}
data = {}
requestid = requestid
url_1 = ' http://oa.en-plus.com.cn:8090/api/workflow/reqform/loadForm?ispreload=1'
url_2 = '&requestid=' + requestid
url_3 = '&preloadkey=' + timestamp + '×tamp=' + timestamp
url = url_1 + url_2 + url_3
response = OA_session.post(url, data=data)
if response.status_code == 200:
yongtu_data = response.json()
# 获取物品名称所需token
params = yongtu_data['params']
wupin_datas['timestamp'] = timestamp
wupin_datas['params'] = params
wupin_datas['mainData_2'] = None
mainData = yongtu_data['maindata']
if 'field8831' in mainData: # 辅助耗材
mainData_1 = mainData['field8831']
mainData_2 = mainData_1['value']
wupin_datas['mainData_2'] = mainData_2 # 用途
else:
pass
else:
pass
return wupin_datas
获取流程中的物品信息
说明:
用法:传入时间戳 和 params
# 获取物品信息
def wuping_main(timestamp, params):
global OA_session
url = 'http://oa.en-plus.com.cn:8090/api/workflow/reqform/detailData'
wupin_data = [] # 创建列表
try:
requestid = params['requestid']
workflowid = params['workflowid']
nodeid = params['nodeid']
formid = params['formid']
isbill = params['isbill']
f_weaver_belongto_userid = params['f_weaver_belongto_userid']
f_weaver_belongto_usertype = params['f_weaver_belongto_usertype']
authStr = params['authStr']
authSignatureStr = params['authSignatureStr']
signatureSecretKey = params['signatureSecretKey']
signatureAttributesStr = params['signatureAttributesStr']
nodetype = params['nodetype']
isviewonly = params['isviewonly']
isaffirmance = params['isaffirmance']
isshared = params['isshared']
iswfshare = params['iswfshare']
ismode = params['ismode']
modeid = params['modeid']
creater = params['creater']
needconfirm = params['needconfirm']
creatertype = params['creatertype']
requestType = params['requestType']
isSelfAuth = params['isSelfAuth']
isprint = params['isprint']
wfmonitor = params['wfmonitor']
isurger = params['isurger']
intervenorright = params['intervenorright']
selectNextFlow = params['selectNextFlow']
agentType = params['agentType']
agentorByAgentId = params['agentorByAgentId']
layouttype = params['layouttype']
apiResultCacheKey = params['apiResultCacheKey']
reqParams = {"requestid": '', "workflowid": '', "nodeid": '', "formid": '', "isbill": '1',
"f_weaver_belongto_userid": "1240", "f_weaver_belongto_usertype": "0", "authStr": " ",
"authSignatureStr": " ", "signatureSecretKey": "", "signatureAttributesStr": "", "nodetype": "1",
"isviewonly": '0', "isaffirmance": "", "isshared": "0", "iswfshare": "0", "ismode": '2',
"modeid": '11272', "creater": '203', "needconfirm": "", "creatertype": '0', "requestType": '1',
"isSelfAuth": '1', "isprint": "0", "wfmonitor": 'false', "isurger": 'false',
"intervenorright": '0', "selectNextFlow": "0", "agentType": '0', "agentorByAgentId": '-1',
"layouttype": '0', "apiResultCacheKey": '1734491116558'}
reqParams['requestid'] = str(requestid)
reqParams['workflowid'] = str(workflowid)
reqParams['nodeid'] = str(nodeid)
reqParams['formid'] = str(formid)
reqParams['isbill'] = str(isbill)
reqParams['f_weaver_belongto_userid'] = str(f_weaver_belongto_userid)
reqParams['f_weaver_belongto_usertype'] = str(f_weaver_belongto_usertype)
reqParams['authStr'] = str(authStr)
reqParams['authSignatureStr'] = str(authSignatureStr)
reqParams['signatureSecretKey'] = str(signatureSecretKey)
reqParams['signatureAttributesStr'] = str(signatureAttributesStr)
reqParams['nodetype'] = str(nodetype)
reqParams['isviewonly'] = str(isviewonly)
reqParams['isaffirmance'] = str(isaffirmance)
reqParams['isshared'] = str(isshared)
reqParams['iswfshare'] = str(iswfshare)
reqParams['ismode'] = str(ismode)
reqParams['modeid'] = str(modeid)
reqParams['creater'] = str(creater)
reqParams['needconfirm'] = str(needconfirm)
reqParams['creatertype'] = str(creatertype)
reqParams['requestType'] = str(requestType)
reqParams['isSelfAuth'] = str(isSelfAuth)
reqParams['isprint'] = str(isprint)
reqParams['wfmonitor'] = str(wfmonitor)
reqParams['isurger'] = str(isurger)
reqParams['intervenorright'] = str(intervenorright)
reqParams['selectNextFlow'] = str(selectNextFlow)
reqParams['agentType'] = str(agentType)
reqParams['agentorByAgentId'] = str(agentorByAgentId)
reqParams['layouttype'] = str(layouttype)
reqParams['apiResultCacheKey'] = str(apiResultCacheKey)
headers = {'pragma': 'no-cache', 'host': 'oa.en-plus.com.cn:8090',
'Referer': 'http://oa.en-plus.com.cn:8090/spa/workflow/static4form/index.html?_rdm=' + timestamp}
data = {'preloadkey': timestamp, 'requestid': requestid, 'timestamp': timestamp,
'detailmark': 'detail_1,detail_2', 'reqParams': str(reqParams), 'wfTestStr': '',
'f_weaver_belongto_userid': '1240', 'f_weaver_belongto_usertype': '0'}
response = OA_session.post(url, headers=headers, data=data)
if response.status_code == 200:
wupin_text = response.text
wupin_str = json.loads(wupin_text)
detail_1 = wupin_str['detail_1']
rowDatas = detail_1['rowDatas']
wuping_name = '' # 初始化物品值为'无'
wuping_brand = '' # 品牌
wuping_specs = '' # 规格
wuping_num = '' # 数量
wuping_price = '' # 单价
wuping_PerUnit = '' # 单位
wuping_url = '' # 链接
# 遍历所有以 'row_' 开头的键
for key in rowDatas:
if key.startswith('row_'):
row_data = rowDatas[key]
# 检查并处理特定的字段
# 每个都需要判断if
if 'field8835' in row_data: # 耗材名称
wuping_name = row_data['field8835']['value']
if 'field8836' in row_data: # 耗材品牌
wuping_brand = row_data['field8836']['value']
if 'field8837' in row_data: # 耗材规格
wuping_specs = row_data['field8837']['value']
if 'field8838' in row_data: # 耗材数量
wuping_num = row_data['field8838']['value']
if 'field8839' in row_data: # 耗材单价
wuping_price = row_data['field8839']['value']
if 'field14776' in row_data: # 耗材单位
wuping_PerUnit = row_data['field14776']['value']
if 'field14639' in row_data: # 耗材链接
wuping_url = row_data['field14639']['value']
else:
pass
# 将处理后的值存储到 wupin 字典中,使用 '物品X' 作为键
# 这里使用 key.split('_')[1] 来获取 row_X 中的 X,并转换为整数后加1作为物品序号
# item_index = int(key.split('_')[1])+1 # 因为是从1开始计数,所以加1
# 方便后面遍历这里名称不做区分
wupin = {} # 创建字典
wupin[f'物品名称'] = wuping_name # 物品名称
wupin[f'品牌'] = wuping_brand # 品牌
wupin[f'规格'] = wuping_specs # 规格
wupin[f'数量'] = wuping_num # 数量
wupin[f'单价'] = wuping_price # 单价
wupin[f'单位'] = wuping_PerUnit # 单位
wupin[f'链接'] = wuping_url # 链接
wupin_data.append(wupin)
else:
pass
else:
print('获取物品错误2')
# 返回物品字典
except Exception as e:
print('获取物品错误1')
return wupin_data
获取ECR技术技改 附件下载链接
说明:
用法:传入参数 requestid
#OA流程 ECR技术技改 内容获取
def get_ECR_file_name_load_link(requestid):
global OA_session
timestamp1 = int(datetime.now().timestamp() * 1000)
timestamp = str(timestamp1)
data_url = 'http://oa.en-plus.com.cn:8090/api/workflow/reqform/loadForm' # 请求流程
date_name_link ={}
data_headers = {
'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9',
'connection': 'keep-alive',
'content-length': '65',
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
'host': 'oa.en-plus.com.cn:8090',
'origin': 'http://oa.en-plus.com.cn:8090',
'referer': 'http://oa.en-plus.com.cn:8090/spa/workflow/static4form/index.html?_rdm='+timestamp,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'}
data_data = {
'requestid': requestid,
'preloadkey': timestamp,
'timestamp': timestamp}
data_response = OA_session.post(data_url, headers=data_headers, data=data_data)
if data_response.status_code == 200:
data_json_str = data_response.text
shuju_data = json.loads(data_json_str)
data_dict = shuju_data['maindata']
date_name_link = data_dict['field7320']['specialobj']['filedatas']
# for item in date_name_link:
# filename = item['filename']
# loadlink = item['loadlink']
# print(f"名称{filename},链接{loadlink}")
else:
print('请求错误')
return date_name_link
评论已关闭