

做电商代运营,手里多家店铺的商品都是从一家"母店"复制过去的。每次给新店上品,都要挂店内分类——不回去查母店这个商品原来挂哪个分类,凭感觉挂错类目,流量和搜索全受影响。我的目标很明确:把母店全字段商品表导出成本地数据库,以后跨店复制直接查库推断分类,不用反复回母店翻。
工具是 WorkBuddy——它驱动 Edge 走完整浏览器自动化,我全程只在旁边看。这篇文章记录整个实操过程,重点是把踩过的坑完整摊开,都是真金白银的时间换来的。
以熊大(电商店铺管理系统)为例,导出入口在左侧:商品管理 → 商品导出下拉 → 本店商品导出,页面是 /se/item/item_export/index.jsp。
流程本身不复杂:
/se/item/item_export/list.jsp),等任务状态变成「已完成」。听起来半小时搞定?我折腾了整整一夜。
第一个坑最诡异。我把三个表 98 个字段全部勾上(见图1),提交导出,任务显示"已完成"——点开记录,导出数 100 个,321 行,还挂着「错误信息」。715 个商品的店,只导出了 100 个。
我做了三轮降级测试:去掉 SKU 交易信息表,挂;再去掉图片类字段,还挂。每次都是整整齐齐的第 100 个。这个整数太典型了——是接口限流,不是偶发错误。导出记录页的错误信息点开只有一句 "unknown error.",没有任何字段级提示,只能自己试。
结论:图片、划线价、商智流量类字段会触发京东接口限流,全选必挂。
解法是精选字段:只留 16 个核心字段——商品维度(商品 ID、商品名称、店铺分类、京东四级分类、品牌、货号、商品状态、京东价)+ SKU 维度(SKU ID、SKU 编码、SKU 名称、库存、价格、颜色、尺码、sku 属性)。这次 40 秒导完 715 个商品、3097 行,一次成功(见图3 两条失败记录和最后一条成功记录的对比)。
第二个坑是自动化的经典陷阱。点「开始导出」后页面会弹 Bootstrap 模态框(填写文件名称)。我的脚本用 el.offsetParent 判断模态框是否可见——对话框明明弹在屏幕上,脚本永远判定"不可见",来回空跑十几轮。
排查半天恍然大悟:Bootstrap 模态框是 position: fixed 定位,fixed 元素的 offsetParent 永远返回 null。可见性判断必须换成:
const visible = m.classList.contains('in') || m.classList.contains('show')
|| getComputedStyle(m).display !== 'none';改完之后对话框链路一次打通。这类坑文档里不会写,只有被 fixed 定位毒打过的人才记得。
第三个坑是逻辑陷阱。字段页有"勾选记忆"——上次提交时选了哪些字段,下次打开页面还是那些。我做降级重试时,天真地以为"不点交易信息表就是不要它",结果三次失败全部带着交易信息字段——因为它本来就已经是全选状态躺在那里。
"跳过不点"和"显式取消"是两回事。 每一轮重试都必须先把三张表全部清空(取消全选),再按当轮清单精确勾选,不能偷懒。
第四个坑在最后一步。记录页的「下载文件」按钮,源码是:
onclick="window.open('/se/item_export/download?taskId=xxx&sign=xxx')"window.open 开的是新标签页,Playwright 的 page.expect_download() 在页面级根本捕获不到,干等超时。
解法:不点按钮,直接从 onclick 里提取 URL,用 Playwright 的 context.request.get(url) 请求下载——request 共享浏览器 cookie,HTTP 200 直接落盘,比模拟点击稳得多。
最终拿到 1.3MB 的 xls,715 个商品、3097 行 SKU、19 列全字段,解析入库后:
复盘这一夜,五个坑分两类:两类是平台限制(字段限流、勾选记忆、window.open 下载),一类是自动化通病(fixed 定位的可见性判断)。平台限制只能绕——精选字段、显式清空、提取 URL 直下;自动化通病可以防——判断元素可见性,永远别只依赖 offsetParent。
WorkBuddy 在整个过程里承担的是"执行者":所有点击、轮询、降级重试、下载解析都是它驱动 Edge 完成的,我要做的只是在每个坑出现时判断原因、改策略。一夜五个坑,人做判断,AI 做苦力——这个分工我觉得挺值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。