
影刀RPA新手教程农业电商自动化完全指南——农产品平台上架、订单处理与物流跟踪我老家的亲戚做农产品电商在拼多多、淘宝、抖音三个平台卖家乡的脐橙和红薯粉。最忙的季节每天接几百单一家人从早到晚趴在电脑前回复客服、打单发货、更新库存。我过年回去看到这状况花了两天时间用影刀RPA给他们搭了一套自动化流程接单、打单、发物流信息、库存同步全都自动化了。第二天他告诉我“这个软件比请两个员工还管用。”这篇文章就以农产品电商的完整运营流程为案例主线从商品上架到订单处理到物流跟踪带你系统掌握影刀RPA。一、认识影刀与安装上影刀官网下载社区版安装包双击安装。装完记得装浏览器插件。农产品电商常用的是拼多多商家后台、淘宝千牛、抖音商家后台都是网页系统所有操作都依赖浏览器插件。我第一个坑千牛后台登录后影刀浏览器插件自动获取的网页对象找不到千牛的页面。原因是千牛有自己的独立窗口不是常规浏览器标签页。解决办法是用获取已打开的网页对象指令通过窗口标题匹配来找千牛的窗口。二、元素定位四合一XPath CSS 正则电商后台的页面结构左侧导航菜单 中间数据表格 右侧操作面板。元素密集需要精准定位。// 定位发布商品按钮 //button[contains(text(),发布商品)] // 定位商品标题输入框 //input[placeholder请输入商品标题] // 定位价格输入框 //input[classprice-input] // 定位库存输入框数量 //input[namestock] // 定位订单列表的每一行 //table[classorder-table]//tr[contains(class,order-row)] // 定位待发货状态的订单 //td[contains(text(),待发货)]/parent::tr // 按订单号定位 //td[contains(text(),240624001)]/parent::tr/* CSS等价定位 */button:contains(发布商品)input[placeholder*商品标题] input.price-input input[namestock] tr.order-rowtr:has(td:contains(待发货))大部分电商后台用CSS就够了但要找包含待发货文本那一行这种需求CSS的:has()部分浏览器不支持还是得用XPath。正则处理电商数据importre# 提取订单金额text实付金额¥39.90amountre.search(r¥([\d.]),text).group(1)# 39.90# 提取手机号text收货人张三 13812345678phonere.search(r1[3-9]\d{9},text).group()# 从商品标题提取规格title正宗赣南脐橙 5斤装 中果 新鲜水果包邮specre.search(r(\d斤装),title).group(1)# 5斤装# 提取快递单号text申通快递7730123456789tracking_nore.search(r(\d{12,15}),text).group(1)我当时在提取规格时掉过一个坑有的商品标题写5斤装有的写5斤/箱还有的写净重5斤。正则如果只匹配5斤装就会漏掉后两种。改成r(\d)斤只匹配数字斤部分三种都能抓到。三、变量与数据类型拼多多店群自动化报活动上架# 数字——价格、库存、订单数unit_price39.90stock500total_orders0# 字符串——商品信息product_title正宗赣南脐橙 5斤装 中果 新鲜水果包邮tracking_no7730123456789# 列表——批量订单orders[{订单号:240624001,商品:脐橙5斤装,数量:2,金额:79.80},{订单号:240624002,商品:红薯粉3斤装,数量:1,金额:29.90}]# 字典——商品完整信息product{标题:product_title,类目:生鲜水果 橙类,价格:39.90,库存:500,规格:5斤装,运费模板:全国包邮,主图路径:D:\\商品图片\\脐橙主图.jpg,详情图路径:D:\\商品图片\\脐橙详情.jpg}# JSON——API对接respjson.loads(response.text)order_listresp[data][orderList]四、流程控制# For循环——批量上架商品productsload_product_list_from_excel(商品上架清单.xlsx)forproductinproducts:# 打开发布页面web.find(#publishBtn).click()# 填写商品信息fill_product_form(product)# 提交web.find(#submitBtn).click()time.sleep(2)# 相似元素循环——遍历待发货订单order_rowsweb.find_all(tr.order-row)forrowinorder_rows:statusrow.find(td.order-status).textifstatus待发货:order_norow.find(td.order-no).text buyer_inforow.find(td.buyer-info).text to_ship.append({订单号:order_no,买家:buyer_info})# While循环——翻页处理全部订单whileTrue:process_current_page_orders()# 判断是否有下一页try:next_btnweb.find(li.next-page:not(.disabled))next_btn.click()time.sleep(2)except:break# 没有下一页了# 异常处理——防止个别商品上架失败中断流程try:fill_product_form(product)web.find(#submitBtn).click()exceptExceptionase:print(f商品{product[标题]}上架失败{e})failed_products.append(product)continue五、网页自动化等待策略电商后台数据加载慢是常态。用等待元素出现而不是固定等待能适应网络波动。我的实践经验等订单表格出现设置为15秒超时等详情弹窗出现设置10秒超时。弹窗处理电商后台的弹窗很密集登录过期弹窗、活动推荐弹窗、系统公告弹窗、确认发货弹窗。建议写一个通用的弹窗关闭函数defclose_all_popups():close_selectors[div.popup-close,button.dialog-close,span.close-icon,div.announcement-modal .close-btn]forselectorinclose_selectors:try:btnweb.find(selector,timeout2)ifbtn.exists():btn.click()print(f关闭弹窗{selector})except:continue翻页处理待发货订单可能有很多页用class判断最后一页next_btnweb.find(li.pagination-next)class_attrnext_btn.get_attribute(class)ifdisabledinclass_attr:# 最后一页print(已到最后一页)break六、数据处理# Excel——读取商品上架清单importopenpyxl wbopenpyxl.load_workbook(商品上架清单.xlsx)wswb.active products[]forrowinrange(2,ws.max_row1):products.append({标题:ws.cell(row,1).value,类目:ws.cell(row,2).value,价格:ws.cell(row,3).value,库存:ws.cell(row,4).value,规格:ws.cell(row,5).value,主图路径:ws.cell(row,6).value,详情图路径:ws.cell(row,7).value})# 写入订单发货汇总wb_outopenpyxl.Workbook()ws_outwb_out.active ws_out.append([订单号,商品,买家,快递公司,快递单号,发货时间])fororderinshipped_orders:ws_out.append([order[订单号],order[商品],order[买家],order[快递],order[单号],order[发货时间]])wb_out.save(发货记录_20240624.xlsx)# 数据库——订单历史存储importsqlite3 connsqlite3.connect(farm_shop.db)cursorconn.cursor()cursor.execute(CREATE TABLE IF NOT EXISTS orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, order_no TEXT UNIQUE, product TEXT, buyer TEXT, amount REAL, status TEXT, shipped_at TEXT, tracking_no TEXT ))cursor.executemany(INSERT OR IGNORE INTO orders VALUES (NULL, ?, ?, ?, ?, ?, ?, ?),batch_orders)conn.commit()conn.close()数据库五个报错database is lockedSQLite单写锁加WAL模式或重试、no such column字段名打错了、UNIQUE constraint failed改用INSERT OR IGNORE、out of memory数据太大分批插入、disk I/O error磁盘满了。七、鼠标键盘图像自动化商品主图上传在有些平台上不能用元素定位驱动安全限制用图像识别键盘输入代替# 点击上传图片区域image.click(上传图片区域.png)# 在弹出的文件对话框中输入图片路径keyboard.send_keys(D:\\商品图片\\脐橙主图.jpg)keyboard.send_keys({ENTER})# 等待上传完成图片出现image.wait_appear(上传成功标识.png,timeout30)图像识别的锚点九位置左上、中上、右上、左中、正中、右中、左下、中下、右下。灵活偏移可以定位到图片区域的任何位置# 点击图片中心偏右80像素处image.click(上传区域.png,offset_x80,offset_y0)八、进阶技能HTTP请求直连电商平台APIimportrequests# 拼多多开放平台API获取订单列表headers{Content-Type:application/json,client-id:your_client_id,access-token:your_access_token}params{order_status:WAIT_SHIP,page:1,page_size:50}resprequests.post(https://open-api.pinduoduo.com/order/list,jsonparams,headersheaders)ordersresp.json()OCR——识别快递面单上的单号textocr.recognize(快递面单照片.png)tracking_nore.search(r\d{12,15},text).group()Python自定义函数——物流跟踪defcheck_logistics_status(tracking_no,express_company):查询快递物流状态api_mapping{申通:https://api.sto.cn/track,圆通:https://api.yto.net.cn/track,中通:https://api.zto.com/track}api_urlapi_mapping.get(express_company)ifnotapi_url:return未支持该快递公司resprequests.get(api_url,params{no:tracking_no})returnresp.json().get(status,未知)九、平台实战拼多多批量发货流程TEMU店群矩阵自动化运营核价报活动每天自动登录拼多多商家后台 → 进入订单管理 → 筛选待发货订单 → 逐条获取收件人信息 → 调用打单软件API自动打印快递面单 → 在后台填入快递单号批量发货。库存同步每个店铺卖出去一件自动从总库存里减掉一件。每天凌晨同步一次三个平台的实际库存数防止超卖。农产品不像标品能随时补货超卖意味着发不出货要赔钱。这两个流程帮我亲戚家每个月省了200多个小时的人工最关键的是再也没出现过错发、漏发、超卖的情况。十、系统联动# 飞书消息——新订单提醒webhookhttps://open.feishu.cn/open-apis/bot/v2/hook/xxxmsg{msg_type:text,content:{text:f新订单{order[商品]}×{order[数量]}金额{order[金额]}元}}requests.post(webhook,jsonmsg)# 飞书多维表格——库存监控看板lark_base.update_record(tblStock,record_id,{当前库存:new_stock,更新时间:datetime.now().strftime(%Y-%m-%d %H:%M)})# 短信通知买家已发货# 调用云片网等短信APIsend_sms(phoneorder[手机号],contentf您的订单{order_no}已发货{express_company}{tracking_no})十一、工程化规范主流程_每日电商运营 ├── 子流程_登录各平台参数平台名称、账号密码 ├── 子流程_订单处理参数日期范围 ├── 子流程_批量发货参数订单列表 ├── 子流程_库存同步参数平台 └── 子流程_物流跟踪参数快递单号列表调试经验电商流程最怕发货发重了。我的做法是在流程里加一个已发货检查——插入快递单号前先检查该订单是否已有单号有就跳过。命名规范order_no_list列表、ORDER_STATUS_SHIPPED状态常量、productPrice金额。版本选择农产品个体户用社区版免费足够小型电商团队用创业版定时运行电商公司用企业版对接开放平台API。十二、速查表与常见报错报错原因方案商品发布失败必填字段没填逐一检查所有必填项图片上传超时图片太大或网络慢压缩图片到1M以下发货重复没有检查是否已发货发货前加状态检查库存不一致多平台不同步设置统一库存缓存登录过期Cookie失效定时重新登录反爬限制操作太频繁加延时模拟人工节奏农业电商不比城市电商很多时候是一个人管三四个平台手工根本管不过来。把重复性的事情交给RPA人去做选品、定价、营销这些真正需要动脑子的事。RPA在农产品电商里的应用价值被严重低估了实际用起来比招两个客服还靠谱——毕竟程序不会请假、不会算错账、不会漏发。home.linyan.cloud 上有更多行业落地方案可以参考。#影刀RPA #RPA教程 #农业电商 #农产品上架 #订单自动化作者林焱