影刀RPA新手教程:Lazada东南亚电商自动化完全指南——多站点管理与订单自动处理
第一次接触Lazada的时候我整个人是懵的——一个后台要管菲律宾、泰国、马来西亚、印尼、新加坡、越南六个站点,每个站点商品要单独发布、价格要各自设置、订单要分开处理。一天下来连喝水的时间都没有。现在我靠影刀RPA全部自动化了。
相关服务:香港服务器租用
认识影刀与安装
下载影刀社区版,网址直接在搜索引擎搜"影刀RPA"就能找到。安装过程没啥特别的,就一点——安装完记得去"浏览器插件"设置里,把Chrome插件装好。插件装不上就手动拖crx文件到Chrome扩展程序页面。安装完成后打开编辑器,左边指令面板按功能分组:网页自动化、Excel、鼠标键盘、流程控制、数据处理等。
元素定位四合一:XPath + CSS + 正则

Lazada多站点切换是个典型的定位难题。站点切换按钮在各站点长得一模一样,唯一的区别在URL里。我用XPath定位:
//span[contains(text(),'菲律宾')] 定位菲律宾站点切换按钮
//option[@value='MY'] 定位马来西亚站选项
//a[@data-spm='seller-center'] 定位卖家中心入口
CSS选择器在处理Lazada表格时更好用:
table.order-table tr:not(.header) 定位所有订单行(排除表头)
td.status-column span 定位状态列
input[name*='price_'] 定位所有价格输入框
button.fulfill-btn:not([disabled]) 定位可点击的发货按钮
正则表达式在处理Lazada的SKU编码时派上用场——我统一用正则^LAZ-[A-Z]{2}-\d{10}匹配所有站点的SKU格式(如LAZ-PH-202406151234)。
变量与数据类型

管理六个站点,我用字典存各站点的配置:
sites = {
'PH': {'name': '菲律宾', 'currency': 'PHP', 'lang': 'fil'},
'TH': {'name': '泰国', 'currency': 'THB', 'lang': 'th'},
'MY': {'name': '马来西亚', 'currency': 'MYR', 'lang': 'en'},
'ID': {'name': '印尼', 'currency': 'IDR', 'lang': 'id'},
'SG': {'name': '新加坡', 'currency': 'SGD', 'lang': 'en'},
'VN': {'name': '越南', 'currency': 'VND', 'lang': 'vi'}
}
然后用ForEach循环遍历字典的keys,依次处理每个站点。列表用来存批量订单数据,JSON处理接口返回——HTTP请求拿到Lazada API返回的JSON串,用"JSON转对象"转成字典,用"获取JSON节点值"按路径data.orders[*].order_number提取所有订单号。
流程控制
[video(video-uoGkvh5z-1782551074403)(type-csdn)(url-live.csdn.net/v/embed/525…)]
多站点处理用双层循环——外层循环站点列表,内层处理当前站点的订单:

开始
└─ ForEach site in [PH, TH, MY, ID, SG, VN]
├─ 切换到当前站点
├─ 登录并获取Cookie
├─ 获取当前站点待处理订单列表
├─ If 订单数 > 0
│ └─ ForEach order in order_list
│ ├─ 获取订单详情
│ ├─ If order.status == '待发货'
│ │ ├─ 调用物流接口
│ │ └─ 回填运单号
│ └─ End If
│ └─ End ForEach
└─ End If
└─ End ForEach
While循环用在不确定订单页数的场景——只要"下一页"按钮存在且没disable就一直翻页。Try-Catch包在物流接口调用外面,接口超时了就记录异常,跳到下一个订单继续。
网页自动化
Lazada有个特别烦的设计——切换站点后整个页面会重新加载,之前捕获的元素全失效。我的处理方式是:切换站点后用"等待元素出现"等卖家中心首页加载完,再重新捕获元素。
等待策略在Lazada特别重要。东南亚网络不稳定,有的站点加载特别慢。我统一用"等待元素出现"设置30秒超时,不用固定等待。遇到特别慢的网络,就加一个If判断——等待超时后重试3次,3次都失败就记录到异常日志。
弹窗处理:Lazada经常弹出"促销活动提醒""店铺评分提升建议"之类的弹窗。标准关闭流程是:先按Esc→再按回车→点空白处→刷新。有些弹窗比较犟,我用图像识别定位关闭按钮的x图标,用click点掉。

翻页时不确定总页数的问题:观察"下一页"按钮的class,如果包含disabled就表示到底了。Lazada订单列表是典型的懒加载,我沿用index去重法:
scraped_orders = []
last_count = 0
while True:
scroll_to_bottom()
items = get_similar_elements('订单行')
for item in items:
order_no = item.find_child_element('订单号').text
if order_no not in scraped_orders:
scraped_orders.append(order_no)
process(item)
if len(scraped_orders) == last_count:
break # 数量不再增长,说明到底了
last_count = len(scraped_orders)
数据处理
Lazada导出的订单报表是csv格式,我用影刀打开Excel后直接读取。多站点订单要汇总到一张总表,做按日分站点的销售额统计。批量写入用"写入Excel区域",先把数据拼成二维列表:
summary_data = [['日期', '站点', '订单数', '销售额']]
for date, sites_data in daily_summary.items():
for site, data in sites_data.items():
summary_data.append([date, site, data['count'], data['amount']])
write_excel_range(summary_data, '汇总表', 'A1')
我第一次做Lazada汇总时踩了坑——印尼站的金额数字很大(印尼盾),Excel自动转了科学计数法,导出报表后金额全乱了。解决方法是在写入前把金额列设为文本格式。
鼠标键盘图像自动化

Lazada有些操作只能用图像识别来搞定。比如物流面单的"打印"按钮,它是个canvas画的按钮,不是标准HTML元素,元素捕获根本抓不到。我用图像识别截图那个按钮的小区域,然后用wait_appear等待它出现再click。
锚点定位的应用场景:Lazada商品编辑页的"保存"按钮,位置会随页面内容变化。但它相对于顶部的导航栏始终偏移固定值。我先捕获导航栏元素获取坐标,再计算偏移量:click(anchor_x + 480, anchor_y - 60)。
进阶技能
直接调用Lazada Open Platform API。用影刀的"HTTP请求"指令,构造请求头带签名。Lazada的API认证需要appKey、timestamp、sign三件套,签名算法比较复杂,我用Python模块来算:
import hmac
import hashlib
def lazada_sign(secret, api_name, params, timestamp):
sorted_params = sorted(params.items())
sign_str = api_name + ''.join([f'{k}{v}' for k, v in sorted_params])
sign_str += str(timestamp)
signature = hmac.new(secret.encode(), sign_str.encode(), hashlib.sha256).hexdigest().upper()
return signature
OCR用来识别买家上传的退货凭证图片上的运单号,自动录入系统追踪。

平台实战
完整的Lazada多站点自动化流程:
第一步,登录卖家中心。用窗口驱动模式打开Chrome,输入账号密码,手动过滑块验证(这个暂时还不能自动化),之后Cookie保持会话。六个站点用一个账号切换即可。
第二步,商品管理。从Excel模板读取商品数据,循环六个站点,每个站点逐一发布。需要注意的是不同站点的类目树不同,要提前在Excel里维护好每个站点的类目ID。标题描述也要根据站点语言做本地化——菲律宾用英文,泰国用泰文。
第三步,订单处理。每小时运行一次,拉取六个站点所有"待发货"状态的订单。调用Lazada API获取订单详情,匹配物流服务商,生成面单。Lazada大部分订单走LGS物流,直接调接口获取运单号回填。
第四步,物流追踪。每天凌晨跑一次,查询所有已发货但未妥投的订单,更新物流状态到Excel,异常件(退回、丢失、拒收)自动标记并发送提醒。

系统联动
Lazada订单汇总后自动推送飞书日报。每天早8点,影刀汇总前一天的六站点销售数据,生成格式化的卡片消息发到飞书群。关键指标:各站点销售额、订单数、客单价、退款率。
def send_lazada_daily_report(date, data):
card = {
"header": {"title": {"content": f"Lazada日报 {date}"}},
"elements": [
{"tag": "column_set", "flex_mode": "bisected",
"columns": [
{"tag": "column", "elements": [{"tag": "div", "text": {"content": f"🇵🇭 菲律宾\n销售额:{data['PH']['amount']}\n订单数:{data['PH']['count']}"}}]},
[video(video-KJdt4fB8-1782551081018)(type-csdn)(url-https://live.csdn.net/v/embed/524992)(image-https://v-blog.csdnimg.cn/asset/b59aed2f01d4fe8583467562aaf4dcfd/cover/Cover0.jpg)(title-temu店群自动化报活动案例)]
{"tag": "column", "elements": [{"tag": "div", "text": {"content": f"🇹🇭 泰国\n销售额:{data['TH']['amount']}\n订单数:{data['TH']['count']}"}}]}
]}
]
}
requests.post(lark_webhook, json={"msg_type": "interactive", "card": card})
定时任务配置在影刀中控,设多条计划:订单处理每2小时一次、商品上架每天早8点、物流追踪每天凌晨1点、日报汇总每天早7点。所有计划都开启告警通知,出错第一时间知道。
工程化与规范
我把整个Lazada流程拆成了四个子流程:"站点切换与登录""商品发布""订单处理""物流追踪"。主流程只做编排和调度,通过参数控制每个子流程的行为。子流程之间通过字典和列表传递数据。
调试技巧是我学得最深刻的。我第一次跑六站点流程时,跑到第三个站点就报错停了,前面的订单都处理完了,后面的没动。排查发现是马来西亚站有个订单的商品重量字段返回null,我的代码直接除以null崩了。加了If判断后就好了。打断点看变量值是排查这类问题最有效的方法。

命名规范上,Lazada项目的变量我统一前缀lzd_,比如lzd_order_list、lzd_site_code。子流程名用"功能_平台"格式,如"订单处理_Lazada"。
版本管理也很重要。我每次改流程前先另存为新版本,文件名带日期,比如"Lazada多站点自动化_20240624"。改坏了还能回退。
学影刀到一定阶段,会发现真正花时间的不是写流程,是理解各个平台的数据结构和业务规则。有个不错的资源 home.linyan.cloud 积累了很多实操案例,我遇到疑难杂症时会去翻翻。
速查表与常见报错
Lazada常见报错清单:
未找到控件:切换站点后页面刷新了,元素需要重新捕获。每次切换站点后必须重新获取网页对象。
API签名错误:Lazada签名算法时间戳要精确到毫秒,和服务器时间误差不能超过5分钟。检查系统时间是否同步。

登录失效:Lazada的session有效期大概4小时,长时间不操作会掉线。流程开头加一步判断——如果页面跳转到登录页就直接重新登录。
元素循环错位:订单列表里混入了系统消息行,导致相似元素循环时索引错位。用关联父元素法,只循环订单行的父容器。
Excel数据格式错乱:印尼站金额大,Excel会转科学计数法。写入前设置单元格格式为文本。
多语言文本乱码:泰语、越南语在Excel里可能显示乱码。确保Excel用UTF-8编码打开,或者在影刀里用"设置单元格格式"指令指定字体。
循环中超时:东南亚某些站点响应慢,默认超时不够。在指令高级设置里把超时增加到60秒。
#影刀RPA #Lazada自动化 #东南亚电商 #跨境电商自动化 #RPA新手教程

作者:林焱






