影刀RPA 供应链数据自动化:采购询价与订单跟踪
作者:林焱
一、什么情况用影刀处理供应链
供应链工作的核心痛点是信息分散——采购员每天要登十几个供应商平台查报价,要在ERP里手动更新订单状态,要从物流平台复制追踪信息粘贴到Excel。每个动作都只需要5分钟,但加起来一天3小时都在"搬运数据"。
影刀RPA最适合做的供应链自动化:
- 批量询价:自动登录多家供应商平台,搜索同一物料,采集价格数据后整理对比表
- 订单状态同步:从ERP读取订单号,批量去物流平台查状态,回填到ERP
- 到货提醒:每小时自动检查一次是否有新的物流更新,有则推送钉钉
二、实战一:多供应商批量询价
店群矩阵自动化突破运营极限!
场景
每周一上午,采购员要在3个供应商平台(A平台、B平台、C平台)分别查询20个物料的价格,汇总到Excel做比价。
影刀流程设计
Step 1:准备询价清单
【读取Excel】 文件路径:C:\采购\本周询价清单.xlsx 输出变量:物料列表 # 包含字段:物料编号、物料名称、规格、数量Step 2:对每个供应商平台循环操作
suppliers=[{'name':'A供应商','url':'https://supplier-a.com','search_selector':'#search-input'},{'name':'B供应商','url':'https://supplier-b.com','search_selector':'.search-box input'},{'name':'C供应商','url':'https://supplier-c.com','search_selector':'input[name="keyword"]'},]price_results=[]forsupplierinsuppliers:yingdao.open_url(supplier['url'])yingdao.wait_for_element(supplier['search_selector'])formaterialin物料列表:# 搜索物料search_box=yingdao.find_element(supplier['search_selector'])search_box.clear()search_box.send_keys(material['物料名称'])yingdao.find_element('.search-btn').click()yingdao.wait_for_element('.product-list')# 抓取第一条结果的价格try:price=yingdao.find_element('.product-price').text unit=yingdao.find_element('.product-unit').textexcept:price='未找到'unit='-'price_results.append({'供应商':supplier['name'],'物料编号':material['物料编号'],'物料名称':material['物料名称'],'报价':price,'单位':unit,'查询时间':datetime.now().strftime('%Y-%m-%d %H:%M')})yingdao.wait(0.8)# 礼貌性延时Step 3:生成比价表并发送
importpandasaspd df=pd.DataFrame(price_results)# 透视:行=物料,列=供应商,值=报价pivot=df.pivot_table(index=['物料编号','物料名称'],columns='供应商',values='报价',aggfunc='first')pivot.to_excel('C:\\采购\\比价表.xlsx')【发送邮件】 收件人:caigou@company.com 主题:本周询价比价表_${今日日期} 正文:已完成 ${len(物料列表)} 个物料的询价,请查收比价表  附件:C:\采购\比价表.xlsx三、实战二:订单状态批量回填
Step 1:从ERP导出待跟踪订单
【打开网页】URL:http://erp.company.com/purchase/orders 【等待元素出现】选择器:table#order-table 【导出表格数据】输出变量:订单列表 # 筛选状态="在途"的订单,包含:订单号、物流单号、供应商Step 2:查询快递状态
importrequestsfororderin订单列表:tracking_no=order['物流单号']# 调用快递100 APIresp=requests.get('https://api.kuaidi100.com/query',params={'num':tracking_no,'key':'你的API_KEY'})data=resp.json()ifdata['status']=='200':latest_status=data['data'][0]['context']# 最新物流描述order['当前状态']=latest_status order['是否到货']='已签收'inlatest_statuselse:order['当前状态']='查询失败'order['是否到货']=FalseStep 3:回填ERP并发送到货通知
temu店群自动化报活动案例
# 对已到货的订单在ERP中更新状态arrived_orders=[oforoin订单列表ifo['是否到货']]fororderinarrived_orders:yingdao.open_url(f"http://erp.company.com/purchase/orders/{order['订单号']}/edit")yingdao.find_element('#status-select').select_by_text('已到货')yingdao.find_element('#arrival-date').send_keys(today)yingdao.find_element('#save-btn').click()如果 len(arrived_orders) > 0: 【发送钉钉消息】 内容:今日到货提醒:以下 ${len(arrived_orders)} 个订单已到货,请安排验收...四、踩坑记录
坑1:供应商平台反爬严厉
询价脚本要加随机延时(0.5-2秒),模拟人工操作节奏。某些平台需要先登录再询价,要把登录状态保持好(Cookie方案)。
坑2:物料名称不标准导致搜索失败
各供应商平台对同一物料叫法不同(“304不锈钢螺栓M8"和"不锈钢螺丝M8×20”)。解决方案:在询价清单里为每个供应商单独维护一列"搜索关键词",而不是用统一名称搜索。
坑3:快递API有查询频率限制
快递100免费版限1秒1次,500条订单要至少8分钟。用time.sleep(1.2)加一点余量,避免触发429错误。
坑4:ERP"已签收"状态不等于业务验收完成
订单到货后还需要质检,不要直接在ERP里把状态改成"结束",只改到"已到货",等质检确认后由采购员手动关单。这条要写在流程注释里。
适用人群:制造业采购员、贸易公司跟单员、供应链运营
难度:⭐⭐⭐(需要熟悉ERP系统和快递API)