开发专题
人工智能AI
机器学习ML
深度学习DL
关于大模型的一些基础内容
一些人工智能的架构图
使用ollama在本地启动运行大语言模型
在本地部署sd使用AI生图功能
AIGC入门教程
队列
RabbitMQ消息队列
redis+mq实现秒杀功能
非结构化存储OSS
使用minio进行数据存储
非结构化文档在线预览
使用kkfileView实现在线文档预览
OnlyOffice实现文档在线编辑
全文搜索
Elasticsearch构建全文搜索系统
windowns下使用Logstash7.6.2同步Mysql数据到ElasticSearch,并使用kibana进行检索
工作流Flowable应用
Flowable基础入门知识
Springboot+mybatisplus+flowable6.5.0 开发房产审批模块
人脸识别
虹软人脸识别应用
人脸识别基础入门知识
WebSocket在线聊天
Springboot+WebSocket+redis实现在线客服系统
WebSocket基础入门
信创产业
领域驱动DDD
定时任务quartz
流媒体
流媒体服务LALMAX的部署安装与使用
使用go2rtc+webrtc-streamer在网页上播放rtsp 的摄像头视频
RPA数字员工
使用盘匠设计器进行RPA项目的开发
RPA开发过程中的一些经验之谈
本文档使用 MrDoc 发布
-
+
首页
RPA开发过程中的一些经验之谈
## RPA发送HTTP请求和文件下载 RPA开发过程中,经常遇到先查询,再下载表格的场景 常规的的RPA做法是,使用鼠标点击 获取界面上的元素,然后 选择日期或填写日期,点击 查询按钮,然后再点导出全部。 但是这种方法我发现太低效了,因为现在大部分的信息系统 ,都是前后端分离的开发方式,完全可以 拿到 token信息,然后 发送ajax请求 获取查询结果 ,或者通过python 发送http的post请求下载表格。 封装一个js方法,先拿token值 ,再发送ajax请求: ~~~ (function($) { $.ajaxWithToken = function(options) { // 添加默认配置项,如URL、请求类型等 options = $.extend({}, { url: '', type: 'GET', dataType: 'json', headers: { 'Authorization': 'Bearer ' + getToken() } }, options); // 调用原生的jQuery.ajax方法发送请求 return $.ajax(options); }; }(jQuery)) // 辅助函数:获取存储在localStorage中的Token function getToken() { var store = localStorage.getItem('store'); // 解析 JSON 字符串成为 JavaScript 对象 const data = JSON.parse(store); // 获取 token 的值 const token = data.token; // 输出 token console.log(token); return token; } var firstFileId = '' // 再导 $.ajaxWithToken({ url: 'http://test.com/api', type: 'POST', timeout : 1200000, dataType:'json', async: false, contentType: "application/json", success: function(response) { console.log(response); firstFileId = response.queryPagingResult.pageDataList.list[0].fileId; }, error: function(xhr, status, error) { console.error('Error:', error); } }); ~~~ 使用python发送http请求下载文件: ~~~ import requests # 文件下载的目标 URL url = 'https://api.test.com/exportAll' # 设置 Authorization Header headers = { 'Authorization': ''+TOKEN+'', # 替换为你的 token 'Content-Type': 'application/json' # 如果需要指定 Content-Type } # POST 请求的 JSON 参数 json_data = { "orderExportModel": "6", "factEnTimeStart": None, "factEnTimeEnd": None } # 发送 POST 请求并下载文件 response = requests.post(url, headers=headers, json=json_data, stream=True) # 检查响应状态码是否为成功 if response.status_code == 200: # 指定保存文件的路径 file_path = BASE + r'\订单查询.xls' # 替换为你想保存的文件名 # 使用流式下载大文件 with open(file_path, 'wb') as file: for chunk in response.iter_content(chunk_size=8192): if chunk: # 过滤掉保持连接的空 chunk file.write(chunk) print(f"文件已成功下载到: {file_path}") else: print(f"请求失败,状态码: {response.status_code}") print(f"响应内容: {response.text}") ~~~ ## PANDAS的使用 在rpa开发过程中,很多涉及表格的处理,会面会大量的用到pandas这个库 所以pandas的库使用的熟练度也是直接影响到开发的效率,不过好在现在有通义和deepseek这种大模型,让他们帮我们写pandas代码,可以让我们更快的学会一些pandas技巧。 比如下面这段代码的规则 校验部分就是通义帮写的,我给通义的提示词是: > 我想扩充一条规则 的校验,就是《订单查询.xls》这个表里面有一列 :乘车人数,是z列,这一列都是数字,如果乘车人数=1,那么 df['不合规'] = 是, 但是乘车人数大于1的话,继续 检查 I列:用车人,用车人的3组内容示例: 张三,李四 张三,李四 张三,我要判断 这个乘车人名称里是否有 逗号,如果不存在逗号, 那么继续判断 AA列:用车备注,如果用车备注中 存在 “等2人”、“等3人”、“等4人”的字样,也算合规,设置df['不合规'] = 否,否则就是不合规,df['不合规'] = 是 ~~~ import pandas as pd # 读取Excel文件 df = pd.read_excel(BASE + "\\订单查询.xls") # 筛选订单状态 df = df[(df['订单状态'] == '已完成') & ((df['用车事由'] == '商务活动') | (df['用车事由'] == '公务接待'))] # 初始化不合规列,默认值为 "否" df['不合规'] = "否" # 规则校验 for index, row in df.iterrows(): # 获取乘车人数 passenger_count = row['乘车人数'] if passenger_count == 1: # 如果乘车人数为1,则直接标记为不合规 df.at[index, '不合规'] = "是" else: # 检查用车人列(I列)是否有逗号 passengers = str(row['用车人']) # 防止空值导致报错 if ',' not in passengers: # 如果没有逗号,继续检查用车备注列(AA列) remarks = str(row['用车备注']) # 防止空值导致报错 # 使用模糊匹配,检查是否包含 "等2人"、"等3人"、"等4人" 等关键字 if any(f"等{i}人" in remarks for i in range(2, 10)): # 匹配 "等2人" 到 "等4人" # 如果备注中存在指定字样,标记为合规 df.at[index, '不合规'] = "否" else: # 否则标记为不合规 df.at[index, '不合规'] = "是" # 将结果保存到新的Excel文件 df.to_excel(BASE + "\\订单查询.xlsx", index=False) ~~~ 上面这段代码中的 : ~~~ if any(f"等{i}人" in remarks for i in range(2, 10)): # 匹配 "等2人" 到 "等4人" ~~~ 是点睛之笔。 使用正则实现相同的效果: ~~~ import pandas as pd import re # 读取Excel文件 df = pd.read_excel(BASE + "\\订单查询.xls") # 筛选订单状态 df = df[(df['订单状态'] == '已完成') & ((df['用车事由'] == '商务活动') | (df['用车事由'] == '公务接待'))] # 初始化不合规列,默认值为 "否" df['不合规'] = "否" # 定义正则表达式模式,匹配 "等2人" 到 "等4人" pattern = re.compile(r".*等[2-4]人.*") # 匹配任意内容后跟 "等2人" 到 "等4人" 再跟任意内容 # 规则校验 for index, row in df.iterrows(): # 获取乘车人数 passenger_count = row['乘车人数'] if passenger_count == 1: # 如果乘车人数为1,则直接标记为不合规 df.at[index, '不合规'] = "是" else: # 检查用车人列(I列)是否有逗号 passengers = str(row['用车人']) # 防止空值导致报错 if ',' not in passengers: # 如果没有逗号,继续检查用车备注列(AA列) remarks = str(row['用车备注']) # 防止空值导致报错 # 使用正则表达式进行模糊匹配 if pattern.match(remarks): # 如果备注中存在指定字样,标记为合规 df.at[index, '不合规'] = "否" else: # 否则标记为不合规 df.at[index, '不合规'] = "是" # 将结果保存到新的Excel文件 df.to_excel(BASE + "\\订单查询.xlsx", index=False) ~~~ 抽空可以细品一下。
superadmin
2025年4月13日 22:53
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码