ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

影刀RPA深度实战:抖音小店卖家后台自动化运营与直播数据采集

影刀RPA深度实战:抖音小店卖家后台自动化运营与直播数据采集

影刀RPA深度实战:抖音小店卖家后台自动化运营与直播数据采集

作者:林焱
标签:#影刀RPA #抖音小店 #抖店运营 #直播数据 #达人带货 #订单批量处理


开篇:抖店后台的运营负担有多重

抖音小店的特殊性在于它是"内容驱动"的电商,卖家每天要处理的不只是商品和订单,还要跟进直播数据、达人带货效果、短视频挂车数据。我帮过一个做美妆的抖店卖家,他们运营团队每天下午4点到凌晨2点直播,结束后还要整理一堆数据——光是对账就要两个小时。

本文与常见的"抖音内容采集"文章不同,聚焦在抖店卖家后台(seller.douyin.com)的操作自动化:商品管理、订单处理、直播数据导出、达人合作监控。这是卖家视角,不是采集数据视角。


一、抖店后台登录与权限说明

1.1 账号体系

抖店后台使用抖音账号登录,但权限分级非常复杂:

  • 主账号(店主):所有权限
  • 运营子账号:无财务权限,无法提现
  • 客服子账号:只能处理订单和回复评论

如果你用影刀做自动化,强烈建议用专门的运营子账号,不要用主账号,避免因为操作失误影响主账号安全。

importjsonimportosdefsave_douyin_session(page,account_name='main'):""" 保存抖店后台登录会话 关键Cookie: - passport_csrf_token: CSRF防护 - ttwid: 抖音会话标识 - odin_tt: 登录态主要凭证 - passport_auth_status: 认证状态 注意:抖音安全性很高,Cookie有效期约3天 账号在异地IP登录会触发二次验证 建议固定一个IP做自动化,不要频繁切换 """cookies=page.get_cookies()dy_cookies=[cforcincookiesifany(dinc.get('domain','')fordin['.douyin.com','.bytedance.com','.byted.org'])]save_path=f'C:/RPA_Data/douyin_{account_name}_session.json'os.makedirs(os.path.dirname(save_path),exist_ok=True)withopen(save_path,'w',encoding='utf-8')asf:json.dump(dy_cookies,f,ensure_ascii=False,indent=2)print(f"抖店会话已保存,账号:{account_name},Cookie数:{len(dy_cookies)}")returnTruedefverify_shop_login(page):""" 验证抖店后台是否已登录 检查是否能访问订单管理页 """page.goto('https://seller.douyin.com/ecom/orders/')page.wait_for_load_state('networkidle')# 如果跳转到登录页或出现登录按钮,说明未登录if'login'inpage.urlor'passport'inpage.url:returnFalse# 检查订单页面标志性元素order_title=page.query_selector('.order-page-title, [data-testid="order-list"]')returnbool(order_title)

二、商品批量管理

2.1 商品状态批量修改

defbatch_update_product_status(page,product_ids,action='on_sale'):""" 批量修改商品状态 action参数: - 'on_sale' : 上架 - 'off_sale' : 下架 - 'delete' : 删除(不可逆!谨慎使用) 抖店商品管理URL: https://seller.douyin.com/ecom/product/management/ XPath关键节点: //div[@data-testid='product-list-item'] : 商品列表每行 //input[@type='checkbox'][@data-product-id] : 商品选择框 //button[contains(@class,'batch-action')] : 批量操作按钮 """page.goto('https://seller.douyin.com/ecom/product/management/')page.wait_for_load_state('networkidle')# 筛选对应商品(搜索商品ID)search_input=page.query_selector('.search-input input, input[placeholder*="商品"]')success_count=0failed_ids=[]# 每次处理一批(最多50个)batch_size=50foriinrange(0,len(product_ids),batch_size):batch=product_ids[i:i+batch_size]# 选择商品selected_count=0forpidinbatch:checkbox=page.query_selector(f'input[data-product-id="{pid}"]')ifcheckbox:ifnotcheckbox.is_checked():checkbox.click()selected_count+=1else:failed_ids.append(pid)ifselected_count==0:continue# 点击批量操作按钮batch_btn=page.query_selector('.batch-operation-btn, button:has-text("批量操作")')ifbatch_btn:batch_btn.click()page.wait_for_timeout(500)# 选择操作类型action_map={'on_sale':'上架','off_sale':'下架','delete':'删除'}action_text=action_map.get(action,'上架')action_option=page.query_selector(f'.dropdown-menu li:has-text("{action_text}")')ifaction_option:action_option.click()page.wait_for_timeout(1000)# 确认弹窗(删除操作会弹出确认框)confirm_btn=page.query_selector('.modal-confirm button:has-text("确认")')ifconfirm_btn:confirm_btn.click()page.wait_for_load_state('networkidle')success_count+=selected_countprint(f"批次{i//batch_size+1}:{action_text}{selected_count}个商品")page.wait_for_timeout(2000)print(f"批量{action_map.get(action)}完成:成功{success_count}个,失败{len(failed_ids)}个")returnsuccess_count,failed_ids

三、订单批量处理

3.1 订单数据批量导出

fromdatetimeimportdatetime,timedeltadefexport_orders_by_date(page,date_from,date_to,order_status='all'):""" 按日期范围导出抖店订单数据 order_status参数(抖店订单状态): - 'all' : 全部订单 - 'waiting_pay' : 待付款 - 'waiting_ship' : 待发货 - 'shipped' : 已发货 - 'completed' : 已完成 - 'cancelled' : 已取消 - 'refund' : 退款中 抖店订单导出: 进入"订单管理" → "导出订单" → 设置日期范围 → 下载 注意:单次导出上限5000条,超过需分段导出 """page.goto('https://seller.douyin.com/ecom/orders/')page.wait_for_load_state('networkidle')# 切换订单状态标签status_tab_map={'waiting_ship':'待发货','shipped':'已发货','completed':'已完成','refund':'退款/售后'}iforder_statusinstatus_tab_map:tab_text=status_tab_map[order_status]tab=page.query_selector(f'.order-status-tab:has-text("{tab_text}")')iftab:tab.click()page.wait_for_timeout(1000)# 点击导出按钮export_btn=page.query_selector('button:has-text("导出"), .export-btn')ifnotexport_btn:print("未找到导出按钮")returnNoneexport_btn.click()page.wait_for_timeout(1000)# 设置导出日期范围date_inputs=page.query_selector_all('.date-range-picker input')iflen(date_inputs)>=2:date_inputs[0].triple_click()date_inputs[0].type(date_from)date_inputs[1].triple_click()date_inputs[1].type(date_to)page.keyboard.press('Enter')page.wait_for_timeout(500)# 确认导出confirm_export=page.query_selector('.export-modal button:has-text("确认导出")')ifconfirm_export:confirm_export.click()page.wait_for_timeout(3000)# 等待下载完成print("导出任务已提交,等待文件就绪...")importtimeforattemptinrange(30):time.sleep(3)download_link=page.query_selector('.download-ready a, .export-download-btn')ifdownload_link:href=download_link.get_attribute('href')print(f"订单导出文件就绪:{href}")returnhrefprint("导出超时,请进入'导出记录'手动下载")returnNonereturnNone

3.2 批量发货(从WMS/ERP读取物流信息)

defbatch_ship_orders(page,shipping_data):""" 批量上传物流信息 shipping_data格式: [ {'order_id': 'xxx', 'tracking': '123456789', 'carrier_code': 'YTO'}, ... ] 抖店支持的物流公司代码(常用): - YTO: 圆通速递 - ZTO: 中通快递 - STO: 申通快递 - EMS: 中国邮政EMS - SF: 顺丰速运 - JD: 京东物流 - YUNDA: 韵达快递 - BESTEX: 百世快递 最佳实践:用抖店开放平台API批量发货更稳定 API文档:https://op.jinritemai.com/docs/guide-docs/14/50 但需要申请开发者资质 """importcsvimporttempfileimportos# 方法一:通过导入CSV批量发货(推荐,效率更高)# 创建临时CSV文件temp_csv=tempfile.NamedTemporaryFile(mode='w',suffix='.csv',delete=False,encoding='utf-8-sig',newline='')writer=csv.writer(temp_csv)# 抖店批量发货CSV格式(以下列顺序为准)writer.writerow(['订单编号','物流公司','物流单号'])foriteminshipping_data:writer.writerow([item['order_id'],item['carrier_code'],item['tracking']])temp_csv.close()csv_path=temp_csv.name# 进入批量发货页面page.goto('https://seller.douyin.com/ecom/orders/batch-ship/')page.wait_for_load_state('networkidle')# 上传CSV文件file_input=page.query_selector('input[type="file"][accept=".csv"]')iffile_input:file_input.set_input_files(csv_path)page.wait_for_timeout(3000)# 确认上传import_btn=page.query_selector('button:has-text("开始导入"), button:has-text("确认导入")')ifimport_btn:import_btn.click()page.wait_for_load_state('networkidle')# 检查导入结果result_elem=page.query_selector('.import-result')ifresult_elem:result_text=result_elem.inner_text()print(f"批量发货结果:{result_text}")# 清理临时文件os.unlink(csv_path)returnTrue

四、直播数据采集

4.1 直播场次数据汇总

defcollect_live_room_data(page,days=7):""" 采集最近N天的直播场次数据 抖店直播数据入口: 数据中心 → 直播数据 → 直播场次列表 URL: https://seller.douyin.com/ecom/data/live/ 采集字段: - 开播时间/结束时间 - 观看人数(UV、PV) - 商品点击数 - 成交订单数 - 成交金额(GMV) - 转化率(订单数/点击数) """fromdatetimeimportdatetime,timedelta page.goto('https://seller.douyin.com/ecom/data/live/')page.wait_for_load_state('networkidle')# 设置时间范围end_date=datetime.now()start_date=end_date-timedelta(days=days)date_from_str=start_date.strftime('%Y-%m-%d')date_to_str=end_date.strftime('%Y-%m-%d')# 设置日期筛选器date_inputs=page.query_selector_all('.date-picker input')iflen(date_inputs)>=2:date_inputs[0].triple_click()date_inputs[0].type(date_from_str)date_inputs[1].triple_click()date_inputs[1].type(date_to_str)page.keyboard.press('Enter')page.wait_for_timeout(1500)# 点击查询query_btn=page.query_selector('button:has-text("查询")')ifquery_btn:query_btn.click()page.wait_for_load_state('networkidle')# 采集直播场次列表live_sessions=[]rows=page.query_selector_all('.live-session-table tr:not(:first-child)')forrowinrows:cells=row.query_selector_all('td')iflen(cells)<6:continuetry:session={'start_time':cells[0].inner_text().strip(),'duration':cells[1].inner_text().strip(),# 直播时长'uv':cells[2].inner_text().strip(),# 观看人数'product_clicks':cells[3].inner_text().strip(),# 商品点击数'orders':cells[4].inner_text().strip(),# 成交订单'gmv':cells[5].inner_text().strip(),# 成交金额}# 计算转化率try:clicks=int(session['product_clicks'].replace(',',''))orders=int(session['orders'].replace(',',''))session['conversion_rate']=f"{orders/clicks*100:.1f}%"ifclicks>0else'0%'except:session['conversion_rate']='N/A'live_sessions.append(session)exceptExceptionase:print(f"解析直播场次数据失败:{e}")print(f"采集到{len(live_sessions)}场直播数据")returnlive_sessions

五、达人合作数据监控

5.1 达人带货效果追踪

defmonitor_influencer_performance(page,days=30):""" 监控达人带货效果 抖店达人数据入口: 达人管理 → 合作达人 → 带货效果 URL: https://seller.douyin.com/ecom/talent/management/ 关键指标: - 达人昵称/粉丝数 - 带货视频/直播场次 - 总成交笔数 - 总成交金额(GMV) - 平均客单价 - 退款率 """page.goto('https://seller.douyin.com/ecom/talent/management/')page.wait_for_load_state('networkidle')influencer_data=[]# 采集达人列表talent_rows=page.query_selector_all('.talent-table-row, .influencer-item')forrowintalent_rows:try:# 达人基本信息name_elem=row.query_selector('.talent-name, .nickname')fans_elem=row.query_selector('.fans-count, .follower-count')# 带货数据orders_elem=row.query_selector('.order-count, .sale-orders')gmv_elem=row.query_selector('.gmv-value, .sale-amount')refund_elem=row.query_selector('.refund-rate')influencer={'name':name_elem.inner_text().strip()ifname_elemelse'','fans':fans_elem.inner_text().strip()iffans_elemelse'','total_orders':orders_elem.inner_text().strip()iforders_elemelse'0','total_gmv':gmv_elem.inner_text().strip()ifgmv_elemelse'0','refund_rate':refund_elem.inner_text().strip()ifrefund_elemelse'0%',}# 计算平均客单价try:importre gmv_num=float(re.sub(r'[^\d.]','',influencer['total_gmv']))orders_num=float(re.sub(r'[^\d.]','',influencer['total_orders']))influencer['avg_order_value']=round(gmv_num/orders_num,2)iforders_num>0else0except:influencer['avg_order_value']=0influencer_data.append(influencer)exceptExceptionase:print(f"解析达人数据失败:{e}")# 按GMV排序influencer_data.sort(key=lambdax:float(x['total_gmv'].replace('万','0000').replace(',','').replace('元','')or'0'),reverse=True)print(f"共监控{len(influencer_data)}位达人")returninfluencer_datadefgenerate_influencer_report(influencer_data,save_path):""" 生成达人带货效果报告并保存 """importcsvwithopen(save_path,'w',newline='',encoding='utf-8-sig')asf:fieldnames=['达人昵称','粉丝数','成交笔数','成交金额(GMV)','平均客单价','退款率']writer=csv.DictWriter(f,fieldnames=fieldnames)writer.writeheader()foritemininfluencer_data:writer.writerow({'达人昵称':item['name'],'粉丝数':item['fans'],'成交笔数':item['total_orders'],'成交金额(GMV)':item['total_gmv'],'平均客单价':f"¥{item['avg_order_value']}",'退款率':item['refund_rate']})print(f"达人报告已保存至:{save_path}")returnsave_path

六、常见问题速查

现象原因解决方式
进入抖店后台时频繁弹出"风险验证"弹窗影刀浏览器指纹被识别为异常设备在影刀的浏览器启动参数中添加--disable-blink-features=AutomationControlled;固定IP不频繁切换
直播数据页面显示"暂无数据"但确实有直播记录日期筛选器格式错误,或直播数据延迟(通常延迟12-24小时)检查日期格式为YYYY-MM-DD;次日再查当天数据
批量发货CSV导入后提示"格式错误"CSV中有中文引号、全角逗号或BOM问题保存CSV时用encoding='utf-8-sig';确认列顺序与抖店模板完全一致

| 达人数据页面只能看到合作中的达人 | 已终止合作的达人默认不显示 | 切换到"全部达人"标签;或在筛选器中去掉"合作中"的限制 |
| 商品批量下架后前台仍然显示 | 抖音前台有CDN缓存,延迟约30分钟 | 等待30分钟后再确认;如超过2小时未更新,检查下架操作是否真正执行成功 |
| 自动化操作时页面自动刷新、数据被清空 | 抖店后台在长时间未操作后会自动刷新会话 | 每30分钟在页面上执行一次无害的鼠标移动操作(“保活”);或缩短单次运行时间 |


七、推荐资源

  • 抖店开放平台(op.jinritemai.com):官方API,批量发货/商品管理比页面操作稳定10倍,强烈推荐有开发资质的卖家申请
  • 抖店卖家学堂:school.jinritemai.com,后台功能更新最快能在这里找到说明
  • 影刀社区"抖音小店"板块:搜索"发货自动化",有同行分享的完整流程
  • 飞书多维表格:配合影刀把直播数据写入飞书,团队成员实时查看,比Excel共享更方便

抖店后台的更新频率在所有电商平台中是最高的,平均2-3周就有UI改动。我的建议是:把XPath选择器单独放在一个配置文件里,改版时只需更新这个文件,不用重写整个流程。这个习惯帮我省了很多时间。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进