对物流相关业务使用 rpa 技术 poc 阶段工作总结
具体工作分为两个流程:
1, 快递查询
具体步骤
登录系统 -> 界面跳转 -> 根据指定过滤条件从系统内筛选数据 -> 导出到 excel 表格 -> 对表格进行处理(添加新列,转换日期格式)-> 根据表格数据到对应快递网站查询物流状态 -> 抓取网站信息 -> 回填入 execel 表格 -> 过滤出满足客户需求的表格数据插入到另一张表 -> 发送邮件
本阶段难点:
1,将 excel 文件另存到指定目录下(该问题已解决,方法有待优化):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190815110421253.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxODY0OTcx,size_16,color_FFFFFF,t_7012, 时间格式转换(已解决)
def time_style_change(stroridate):
#将fedex的签收时间转化的函数 转化后的格式 'YYYY-MM-DD hh-mm'
listdate = stroridate.split(' ')
strdate = listdate[1]
strtime = listdate[3]
listdate = strdate.split('/')
print(listdate)
strdate = listdate[2] + '-'+ listdate[0] + '-' +listdate[1]
print(strdate)
print(strtime)
strdate = strdate + ' '+ strtime + ':00'
return strdate
2,快递发货
具体步骤
登录系统 -> 界面跳转 -> 网页抓取所需要的数据 -> 筛选数据是否满足条件 (国内件)-> 根据数据递归创建目录 -> 下载附件 -> 制作信封 -> 登录指定快递网站 -> 填写收货人与货物信息 -> 生成运单号 -> 根据模板生成 execl 表格 -> 回填系统 -> 生成 outlook 邮件文件并保存到本地
本阶段难点:
1,判断是否为国内件
def isinternal(dict_temp):
'''
判断是否时国内件
'''
if dict_temp['国家'] == '中国' or dict_temp['国家'] == 'China':
return True
print(dict_temp['收货人'],'收货人')
for ch in dict_temp['收货人']:
if u'\u4e00' <= ch <= u'\u9fff':
return True
return False
2,创建指定目录下编号最大的文件夹
def getdirname(dirpath,invoice_num):
'''
返回并创建最新的文件夹
'''
list_dirname = os.listdir(dirpath)
print(list_dirname)
list_dirname = sorted(list_dirname,reverse=True)
print(list_dirname)
print(list_dirname[0])
list_num = re.findall(r"\d+",list_dirname[0])
max_num = int(list_num[0])
print(max_num)
max_num += 1
today = time.strftime("%Y%m%d",time.localtime(time.time()))
max_num = str(max_num).rjust(3,'0')
dirname = str(max_num) + ' shipment ' + today
final_dirpath = os.path.join(dirpath,dirname)
print(final_dirpath)
return [final_dirpath,str(max_num)]
3, 自写滑动验证码,这里验证码滑块的偏移量是写死的,有时滑动验证的偏移量固定在某个范围内就可以搞定,不一定非要使用 ocr,这里测试成功率为 70%,优势就是免费,快,占用空间小,次数无限
123
import os
import re
import time
from ctypes import *
from ctypes.wintypes import *
from shutil import copyfile
import pandas as pd
import xlwt
import xlrd
from xlutils.copy import copy
def imouse_drag(x1, y1, x2, y2,button='left',speed=10):
# (x1,y1),(x2,y2)分别表示:鼠标移动的初末坐标点
try:
dll = windll.LoadLibrary("../Com.Isearch.Func.AutoIt/AutoItX3.dll")
# 对象为:本地的一个动态链接库文件
return dll.AU3_MouseClickDrag(button,x1,y1,x2,y2,speed)
# 使用鼠标点击拖动方法
except Exception as e:
raise e
4,指定范围内单元格添加边框
def execl__add_border(src,dst,len_data):
data = xlrd.open_workbook(src,formatting_info=True) #formatting_info复制单元格格式
w = copy(data)
borders = xlwt.Borders()
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle()
style.borders = borders
sheet1 = data.sheet_by_index(0)
for i in range(len_data):
x = i + 9
for j in range(14):
sheet_data = sheet1.cell(x, j).value
print(sheet_data)
w.get_sheet(0).write(x,j, sheet_data,style)
j+=1
i+=1
w.save(dst)
5,outlook 邮件正文添加超链接,使用快捷键搞定
123
6. 拷贝指定 execl 表格数据与格式插入到邮件正文
总结
本次开发总体而言比较成功,项目提前完工,效果客户也比较满意,但项目中也存在许多问题,具体如下:
1, 因为是边确认需求边开发(流程二非常复杂,不可能一下说清楚还都记住细节),前期写的很多代码后期都没用,前期考虑的很多问题后期都发现不需要解决
2,流程二比较复杂而且工期较紧,所以功能模块的拆分不够细化,后期投入生产需要代码重构
3,poc 阶段遇到一个 css 拾取的问题,鼠标不能准确点击到超链接,至今仍未解决,生产过程中可能要直接获取 href 来解决该问题。
留名,
为什么有些图片显示不了呢
难道是偶然事件