影刀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[namekeyword]},]price_results[]forsupplierinsuppliers:yingdao.open_url(supplier[url])yingdao.wait_for_element(supplier[search_selector])formaterialin物料列表:# 搜索物料search_boxyingdao.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:priceyingdao.find_element(.product-price).text unityingdao.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 dfpd.DataFrame(price_results)# 透视行物料列供应商值报价pivotdf.pivot_table(index[物料编号,物料名称],columns供应商,values报价,aggfuncfirst)pivot.to_excel(C:\\采购\\比价表.xlsx)【发送邮件】 收件人caigoucompany.com 主题本周询价比价表_${今日日期} 正文已完成 ${len(物料列表)} 个物料的询价请查收比价表 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9e91d4a493124a5cbcbe240c2e09d7d8.png#pic_center) 附件C:\采购\比价表.xlsx三、实战二订单状态批量回填Step 1从ERP导出待跟踪订单【打开网页】URLhttp://erp.company.com/purchase/orders 【等待元素出现】选择器table#order-table 【导出表格数据】输出变量订单列表 # 筛选状态在途的订单包含订单号、物流单号、供应商Step 2查询快递状态importrequestsfororderin订单列表:tracking_noorder[物流单号]# 调用快递100 APIresprequests.get(https://api.kuaidi100.com/query,params{num:tracking_no,key:你的API_KEY})dataresp.json()ifdata[status]200:latest_statusdata[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(fhttp://erp.company.com/purchase/orders/{order[订单号]}/edit)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a24ab79bd69b4dbba1de51ddeb8349d3.png#pic_center)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错误。坑4ERP已签收状态不等于业务验收完成订单到货后还需要质检不要直接在ERP里把状态改成结束只改到已到货等质检确认后由采购员手动关单。这条要写在流程注释里。适用人群制造业采购员、贸易公司跟单员、供应链运营难度⭐⭐⭐需要熟悉ERP系统和快递API