影刀RPA实操指南:TEMU店铺登录态检测与商品状态自动筛选
影刀RPA实操指南:TEMU店铺登录态检测与商品状态自动筛选
TEMU卖家中心的页面结构跟国内电商完全不同——全是英文界面、组件懒加载、状态筛选没有固定class。用影刀RPA自动化TEMU操作时,登录态检测和商品状态筛选是两个最容易卡住的环节。
TEMU后台是React渲染的单页应用,元素是动态生成的,传统XPath直接写死大概率抓不到。
我也是第一次做TEMU自动化时被坑惨了——流程跑到一半,页面跳回登录页,但URL完全没变。后面所有操作在登录页上乱点,数据全乱了。下面这套检测方法经过30+店铺验证,稳定可靠。
TEMU登录态检测
问题:URL不变但已登出
TEMU卖家中心https://seller.kuajingmaihuo.com用了一个很坑的设计——登出时做客户端重定向,浏览器地址栏不更新。影刀RPA判断页面加载完成时,实际看到的已经是登录页。
方法:检测页面中的特定导航元素
在影刀RPA流程中,不要检测URL,要检测一个登录后才会出现的元素。
操作步骤:
拼多多店群自动化上架方案
在影刀RPA元素库中,打开TEMU卖家中心首页(记得先手动登录)
点击「捕获元素」按钮(元素库面板左上角的瞄准镜图标)
鼠标悬停在左侧导航栏的「商品管理」菜单上
点击捕获,命名为
TEMU_导航_商品管理在属性面板检查捕获到的XPath
推荐的检测元素:
-- 方案一:检测左侧导航菜单项(最稳定) //div[contains(@class,'menu')]//span[contains(text(),'商品管理')] -- 登录后才出现,未登录时不存在 -- 方案二:检测店铺名称区域 //div[contains(@class,'shop-info')]//span -- 顶部店铺名称区域,登录后显示店铺名 -- 方案三:检测iframe壳(TEMU部分页面内嵌iframe) //iframe[contains(@src,'seller')] -- 如果页面是iframe结构,先切换到iframe再检测内部元素流程中的检测逻辑
[等待网页元素出现] → 目标元素: TEMU_导航_商品管理 → 超时时间: 8秒 → 等待类型: 元素可见 [如果] 上一步超时: → [Python脚本] 记录日志"TEMU已登出,准备重新登录" → [子流程] TEMU_自动登录 → [等待] 3秒 → 重新[等待网页元素出现] [否则] 继续后续流程...自动登录子流程
TEMU登录比较特殊,用的是手机验证码登录。如果你做的是多账号管理,建议每个店铺配一个独立手机号,用接码平台自动获取验证码。
在影刀RPA中,登录子流程结构:
子流程:TEMU_自动登录 ├── [打开网页] → TEMU卖家登录页,独立窗口模式 ├── [填写网页输入框(按XPath)] → 手机号输入框 ├── [点击网页元素] → 点击「获取验证码」按钮 ├── [等待] → 5秒(等待验证码到达) ├── [Python脚本] → 调用接码平台API获取验证码 ├── [填写网页输入框] → 填入验证码 ├── [点击网页元素] → 点击「登录」按钮 └── [等待网页元素出现] → 等待导航菜单加载完成# 调用接码平台获取TEMU验证码(示例:以某接码平台API为例)importrequests,time api_key=flow.get_variable("sms_api_key")phone=flow.get_variable("temu_phone")# 获取最新短信url=f"https://api.sms-platform.com/v1/sms/latest"headers={"Authorization":f"Bearer{api_key}"}params={"phone":phone,"project":"temu"}# 最多重试5次(验证码可能延迟到达)foriinrange(5):resp=requests.get(url,headers=headers,params=params,timeout=10)data=resp.json()ifdata.get("code")==0anddata.get("sms"):# 提取6位数字验证码importrematch=re.search(r'\d{6}',data["sms"]["content"])ifmatch:code=match.group()flow.set_variable("verify_code",code)print(f"验证码获取成功:{code}")breakprint(f"第{i+1}次尝试,验证码未到达,等待5秒...")time.sleep(5)商品状态自动筛选
TEMU的商品管理页面把所有状态放在一个下拉筛选器里——在售、已下架、审核中、违规下架等等。影刀RPA操作这个筛选器需要精准定位。
筛选器XPath定位
TEMU商品列表页的筛选器在每个列标题中。点击「商品状态」列标题旁的下拉箭头展开筛选菜单:
-- 第一步:点击「商品状态」列标题的下拉箭头 //div[contains(@class,'ant-table-column-title')]//span[text()='商品状态']/ancestor::div[contains(@class,'ant-table-column')]//span[contains(@class,'ant-dropdown-trigger')] -- 第二步:在下拉菜单中点击具体状态值  //div[contains(@class,'ant-dropdown') and not(contains(@class,'ant-dropdown-hidden'))]//span[text()='在售'] -- 注意:必须加 not(contains(@class,'hidden')),否则匹配到隐藏的多余菜单多状态批量筛选流程
做TEMU商品巡检时,需要分别筛选不同状态的商品并导出数据:
# 批量遍历多个商品状态,逐个筛选并导出importtime status_list=["在售","已下架","审核中","违规下架"]base_url="https://seller.kuajingmaihuo.com/product/list"forstatusinstatus_list:print(f"====== 开始筛选状态:{status}======")# 1. 点击筛选下拉(通过影刀指令)# 此处为伪代码表示流程逻辑,实际用影刀点击指令操作flow.click_element("状态筛选下拉菜单")time.sleep(1)# 等下拉菜单展开# 2. 点击目标状态flow.click_text(status)# 点击文字匹配的状态选项time.sleep(2)# 等列表刷新# 3. 等待数据加载flow.wait_element_appear("商品列表第一行",timeout=10)# 4. 导出当前筛选结果flow.click_element("导出按钮")time.sleep(3)# 5. 将导出文件保存到对应文件夹# 文件会下载到默认下载目录,后续用文件处理指令移动print(f"状态「{status}」数据导出完成")商品列表中提取数据的XPath
TEMU店群如何管理运营?
TEMU商品列表是Ant Design的Table组件渲染的,结构固定:
-- 获取表格所有行(tbody中的所有tr) //table[contains(@class,'ant-table')]//tbody//tr[contains(@class,'ant-table-row')] -- 获取第一行第一列(商品ID) //table[contains(@class,'ant-table')]//tbody//tr[1]//td[1] -- 获取第一行商品标题 //table[contains(@class,'ant-table')]//tbody//tr[1]//td[contains(@class,'product-title')]//span -- 获取所有商品的SKU编码(第N列,看实际表格结构) //table[contains(@class,'ant-table')]//tbody//tr//td[3] -- 获取所有商品的审核状态(通常是倒数第二列) //table[contains(@class,'ant-table')]//tbody//tr//td[contains(@class,'status-column')]//span这里很容易踩坑:TEMU页面的表格列顺序会因为屏幕宽度动态变化。建议用列标题文字匹配列索引,而不是写死第几列:
# 根据列标题定位列索引,再提取该列数据defget_column_index(header_text):"""根据表头文字获取列索引"""# 示例:找到「审核状态」是第几列headers=flow.get_table_headers()# 获取所有表头fori,hinenumerate(headers):ifheader_textinh:returni+1# XPath列号从1开始return-1翻页与全量数据采集
TEMU商品列表默认每页20条,需要翻页采集全部数据:
# 翻页采集全部商品数据importtime page=1max_pages=50# 安全上限,防止无限循环whilepage<=max_pages:print(f"正在采集第{page}页...")# 采集当前页数据(调用影刀抓取指令)flow.capture_current_page_data()# 检测是否有下一页# 方法:检查「下一页」按钮是否可点击(没有disabled属性)next_btn_xpath='//li[contains(@class,"ant-pagination-next") and not(contains(@class,"ant-pagination-disabled"))]'ifflow.element_exists(next_btn_xpath):flow.click_element(next_btn_xpath)time.sleep(2)# 等页面加载page+=1else:print("已到达最后一页")break常见问题/易错速查
| 问题 | 原因 | 解决 |
|---|---|---|
| 登录态检测失败但手动看页面是登录的 | TEMU用了iframe或Shadow DOM嵌套 | 打开浏览器开发者工具(F12),检查目标元素是否在iframe内 |
| 筛选下拉菜单点击无反应 | Ant Design的下拉菜单挂载在body下而非表格组件内 | XPath从//body开始写,不要限定在表格范围内 |
| 表格数据抓取为空 | 表格是虚拟滚动的,DOM中只有可见行 | 先滚动到底部让数据加载完,或改用翻页模式 |
| 导出按钮点击无效 | TEMU导出是异步的,点击后页面发请求等响应 | 等待2-3秒后再检测下载目录是否有新文件 |
| 翻页后元素定位失败 | 翻页后DOM重新渲染,之前的元素引用失效 | 每次翻页后重新获取元素引用 |
推荐资源
- Ant Design Table组件文档——理解TEMU后台表格的渲染机制,写XPath更精准
- Chrome DevTools的「元素」面板——在TEMU页面上右键「检查」,观察真实的DOM结构
- 影刀RPA元素库的「智能录制」功能——点击元素库面板上的「录制」按钮,手动操作一遍,会自动生成步骤
#影刀RPA #RPA自动化 #TEMU #跨境电商 #商品管理 #登录态检测 #数据采集
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。