🔄 卡若AI 同步 2026-03-10 20:45 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
@@ -1,22 +1,8 @@
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序变现,全链路拆解 #商业模式 #一人公司", "success": true, "status": "reviewing", "message": "纯API投稿成功 (7.2s)", "elapsed_sec": 7.174537897109985, "timestamp": "2026-03-10 14:16:20"}
|
||||
{"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序变现,全链路拆解 #商业模式 #一人公司", "success": true, "status": "published", "message": "发布成功", "screenshot": "/tmp/kuaishou_result.png", "elapsed_sec": 22.87360692024231, "timestamp": "2026-03-10 14:16:36"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "reviewing", "message": "纯API投稿成功 (7.0s)", "elapsed_sec": 6.964767932891846, "timestamp": "2026-03-10 14:17:08"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 33.28828287124634, "timestamp": "2026-03-10 14:17:35"}
|
||||
{"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "published", "message": "发布成功", "screenshot": "/tmp/kuaishou_result.png", "elapsed_sec": 41.6892192363739, "timestamp": "2026-03-10 14:17:43"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/ICU出来一年多 活着要在互联网上留下东西.mp4", "title": "ICU出来一年多,活着就要在互联网上留下东西 #人生感悟 #创业觉醒", "success": true, "status": "published", "message": "页面已重置(发布成功)", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.01875376701355, "timestamp": "2026-03-10 15:00:58"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/MBTI疗愈SOUL 年轻人测MBTI,40到60岁走五行八卦.mp4", "title": "20岁测MBTI,40岁该学五行八卦了 #MBTI #认知觉醒", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 22.772515773773193, "timestamp": "2026-03-10 15:01:24"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序变现,全链路拆解 #商业模式 #一人公司", "success": false, "status": "error", "message": "异常: [Errno 32] Broken pipe", "elapsed_sec": 13.620775938034058, "timestamp": "2026-03-10 15:01:41"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:44"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/初期团队先找两个IS,比钱好使 ENFJ链接人,ENTJ指挥.mp4", "title": "创业初期先找两个IS型人格,比融资好使十倍 #MBTI创业 #团队搭建", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:47"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/刷牙听业务逻辑 Soul切片变现怎么跑.mp4", "title": "刷牙3分钟听完一套变现逻辑 #碎片创业 #副业逻辑", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:50"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/国学易经怎么学 两小时七七八八,召唤作者对话.mp4", "title": "易经两小时学个七七八八,关键是跟古人对话 #国学 #易经入门", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:53"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/广点通能投Soul了,1000曝光6到10块.mp4", "title": "广点通能投Soul了!1000曝光只要6到10块 #广点通 #低成本获客", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:56"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/建立信任不是求来的 卖外挂发邮件三个月拿下德国总代.mp4", "title": "信任不是求来的,发三个月邮件拿下德国总代理 #销售思维 #信任建立", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:59"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/懒人的活法 动作简单有利可图正反馈.mp4", "title": "懒人也能赚钱?动作简单、有利可图、正反馈 #Soul派对 #副业思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:02"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/核心就两个字 筛选。能开派对坚持7天的人再谈.mp4", "title": "核心就两个字:筛选。能坚持7天的人才值得深聊 #筛选思维 #创业认知", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:05"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/睡眠不好?每天放下一件事,做减法.mp4", "title": "睡不好不是太累,是脑子装太多,每天做减法 #做减法 #心理健康", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:08"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/这套体系花了170万,但前端几十块就能参与.mp4", "title": "后端花170万搭体系,前端几十块就能参与 #商业认知 #体系思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:11"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/金融AI获客体系 后端30人沉淀12年,前端丢手机.mp4", "title": "后端30人沉淀12年,前端就丢个手机号 #AI获客 #系统思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:14"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/ICU出来一年多 活着要在互联网上留下东西.mp4", "title": "ICU出来一年多,活着就要在互联网上留下东西 #人生感悟 #创业觉醒", "success": false, "status": "failed", "message": "Playwright: 未找到上传控件", "elapsed_sec": 7.210780143737793, "timestamp": "2026-03-10 15:15:40"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/MBTI疗愈SOUL 年轻人测MBTI,40到60岁走五行八卦.mp4", "title": "20岁测MBTI,40岁该学五行八卦了 #MBTI #认知觉醒", "success": false, "status": "failed", "message": "Playwright: 投稿超时", "screenshot": "/tmp/bilibili_result.png", "elapsed_sec": 312.01766705513, "timestamp": "2026-03-10 15:21:07"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率", "success": true, "status": "reviewing", "message": "纯API投稿成功 (9.6s)", "elapsed_sec": 9.607962131500244, "timestamp": "2026-03-10 15:21:20"}
|
||||
@@ -30,18 +16,9 @@
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/睡眠不好?每天放下一件事,做减法.mp4", "title": "睡不好不是太累,是脑子装太多,每天做减法 #做减法 #心理健康", "success": true, "status": "reviewing", "message": "纯API投稿成功 (3.0s)", "elapsed_sec": 3.016058921813965, "timestamp": "2026-03-10 15:22:18"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/这套体系花了170万,但前端几十块就能参与.mp4", "title": "后端花170万搭体系,前端几十块就能参与 #商业认知 #体系思维", "success": true, "status": "reviewing", "message": "纯API投稿成功 (6.0s)", "elapsed_sec": 5.999068021774292, "timestamp": "2026-03-10 15:22:27"}
|
||||
{"platform": "B站", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/金融AI获客体系 后端30人沉淀12年,前端丢手机.mp4", "title": "后端30人沉淀12年,前端就丢个手机号 #AI获客 #系统思维", "success": true, "status": "reviewing", "message": "纯API投稿成功 (4.1s)", "elapsed_sec": 4.084810972213745, "timestamp": "2026-03-10 15:22:34"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序变现,全链路拆解 #商业模式 #一人公司", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 32.887428998947144, "timestamp": "2026-03-10 15:16:01"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 26.56322979927063, "timestamp": "2026-03-10 15:16:31"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/初期团队先找两个IS,比钱好使 ENFJ链接人,ENTJ指挥.mp4", "title": "创业初期先找两个IS型人格,比融资好使十倍 #MBTI创业 #团队搭建", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.749696016311646, "timestamp": "2026-03-10 15:16:59"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/刷牙听业务逻辑 Soul切片变现怎么跑.mp4", "title": "刷牙3分钟听完一套变现逻辑 #碎片创业 #副业逻辑", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 26.63768172264099, "timestamp": "2026-03-10 15:17:28"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/国学易经怎么学 两小时七七八八,召唤作者对话.mp4", "title": "易经两小时学个七七八八,关键是跟古人对话 #国学 #易经入门", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.36569380760193, "timestamp": "2026-03-10 15:17:56"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/广点通能投Soul了,1000曝光6到10块.mp4", "title": "广点通能投Soul了!1000曝光只要6到10块 #广点通 #低成本获客", "success": true, "status": "published", "message": "发布成功", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 26.281821966171265, "timestamp": "2026-03-10 15:18:25"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/建立信任不是求来的 卖外挂发邮件三个月拿下德国总代.mp4", "title": "信任不是求来的,发三个月邮件拿下德国总代理 #销售思维 #信任建立", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.133503198623657, "timestamp": "2026-03-10 15:18:53"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/懒人的活法 动作简单有利可图正反馈.mp4", "title": "懒人也能赚钱?动作简单、有利可图、正反馈 #Soul派对 #副业思维", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.180255889892578, "timestamp": "2026-03-10 15:19:20"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/核心就两个字 筛选。能开派对坚持7天的人再谈.mp4", "title": "核心就两个字:筛选。能坚持7天的人才值得深聊 #筛选思维 #创业认知", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.98456883430481, "timestamp": "2026-03-10 15:19:47"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/睡眠不好?每天放下一件事,做减法.mp4", "title": "睡不好不是太累,是脑子装太多,每天做减法 #做减法 #心理健康", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.75632905960083, "timestamp": "2026-03-10 15:20:14"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/这套体系花了170万,但前端几十块就能参与.mp4", "title": "后端花170万搭体系,前端几十块就能参与 #商业认知 #体系思维", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 26.305840253829956, "timestamp": "2026-03-10 15:20:43"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/金融AI获客体系 后端30人沉淀12年,前端丢手机.mp4", "title": "后端30人沉淀12年,前端就丢个手机号 #AI获客 #系统思维", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 25.22134518623352, "timestamp": "2026-03-10 15:21:11"}
|
||||
{"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/ICU出来一年多 活着要在互联网上留下东西.mp4", "title": "ICU出来一年多,活着就要在互联网上留下东西 #人生感悟 #创业觉醒", "success": false, "status": "error", "message": "未找到上传控件", "error_code": "NO_UPLOAD_INPUT", "elapsed_sec": 15.876161098480225, "timestamp": "2026-03-10 15:15:44"}
|
||||
{"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/MBTI疗愈SOUL 年轻人测MBTI,40到60岁走五行八卦.mp4", "title": "20岁测MBTI,40岁该学五行八卦了 #MBTI #认知觉醒", "success": true, "status": "published", "message": "发布成功", "screenshot": "/tmp/kuaishou_result.png", "elapsed_sec": 24.485027074813843, "timestamp": "2026-03-10 15:16:12"}
|
||||
{"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/kuaishou_result.png", "elapsed_sec": 26.677134037017822, "timestamp": "2026-03-10 15:16:42"}
|
||||
@@ -75,3 +52,9 @@
|
||||
{"platform": "视频号", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/睡眠不好?每天放下一件事,做减法.mp4", "title": "睡不好不是太累,是脑子装太多,每天做减法 #做减法 #心理健康", "success": true, "status": "reviewing", "message": "API确认,列表未匹配 (未在列表前20条中找到)", "screenshot": "/tmp/channels_ss/睡眠不好?每天放下一件事,做减法_5_verify.png", "elapsed_sec": 32.4734902381897, "timestamp": "2026-03-10 18:19:34"}
|
||||
{"platform": "视频号", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/这套体系花了170万,但前端几十块就能参与.mp4", "title": "后端花170万搭体系,前端几十块就能参与 #商业认知 #体系思维", "success": true, "status": "reviewing", "message": "API确认,列表未匹配 (未在列表前20条中找到)", "screenshot": "/tmp/channels_ss/这套体系花了170万,但前端几十块就能参与_5_verify.png", "elapsed_sec": 34.45086717605591, "timestamp": "2026-03-10 18:20:16"}
|
||||
{"platform": "视频号", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/金融AI获客体系 后端30人沉淀12年,前端丢手机.mp4", "title": "后端30人沉淀12年,前端就丢个手机号 #AI获客 #系统思维", "success": true, "status": "reviewing", "message": "API确认,列表未匹配 (未在列表前20条中找到)", "screenshot": "/tmp/channels_ss/金融AI获客体系 后端30人沉淀12年,前端丢手机_5_verify.png", "elapsed_sec": 3430.994603872299, "timestamp": "2026-03-10 19:17:35"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/MBTI疗愈SOUL 年轻人测MBTI,40到60岁走五行八卦.mp4", "title": "20岁测MBTI,40岁该学五行八卦了 #MBTI #认知觉醒 #小程序 卡若创业派对", "success": false, "status": "failed", "message": "笔记管理页未找到该笔记", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.520015239715576, "timestamp": "2026-03-10 20:38:45"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序转化,全链路拆解 #商业模式 #一人公司 #小程序 卡若创业派对", "success": false, "status": "failed", "message": "笔记管理页未找到该笔记", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.837625741958618, "timestamp": "2026-03-10 20:39:33"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率 #小程序 卡若创业派对", "success": true, "status": "published", "message": "页面已重置(发布成功)", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 24.28143620491028, "timestamp": "2026-03-10 20:40:12"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/初期团队先找两个IS,比钱好使 ENFJ链接人,ENTJ指挥.mp4", "title": "创业初期先找两个IS型人格,比融资好使十倍 #MBTI创业 #团队搭建 #小程序 卡若创业派对", "success": false, "status": "failed", "message": "笔记管理页未找到该笔记", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.95564889907837, "timestamp": "2026-03-10 20:41:00"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/刷牙听业务逻辑 Soul切片变现怎么跑.mp4", "title": "刷牙3分钟听完一套转化逻辑 #碎片创业 #副业逻辑 #小程序 卡若创业派对", "success": false, "status": "failed", "message": "笔记管理页未找到该笔记", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.785672187805176, "timestamp": "2026-03-10 20:41:47"}
|
||||
{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/国学易经怎么学 两小时七七八八,召唤作者对话.mp4", "title": "易经两小时学个七七八八,关键是跟古人对话 #国学 #易经入门 #小程序 卡若创业派对", "success": false, "status": "failed", "message": "笔记管理页未找到该笔记", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.7487850189209, "timestamp": "2026-03-10 20:42:35"}
|
||||
|
||||
101
03_卡木(木)/木叶_视频内容/小红书发布/脚本/xhs_sms_login.py
Normal file
101
03_卡木(木)/木叶_视频内容/小红书发布/脚本/xhs_sms_login.py
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
小红书 SMS 登录 — headless Playwright(无弹窗)
|
||||
用法:
|
||||
python3 xhs_sms_login.py <手机号> <验证码>
|
||||
python3 xhs_sms_login.py <手机号> # 仅发送验证码
|
||||
"""
|
||||
import asyncio
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
from playwright.async_api import async_playwright
|
||||
|
||||
COOKIE_FILE = Path(__file__).parent / "xiaohongshu_storage_state.json"
|
||||
UA = (
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
|
||||
)
|
||||
|
||||
|
||||
async def login(phone: str, code: str = ""):
|
||||
async with async_playwright() as pw:
|
||||
browser = await pw.chromium.launch(
|
||||
headless=True,
|
||||
args=["--disable-blink-features=AutomationControlled"],
|
||||
)
|
||||
ctx = await browser.new_context(
|
||||
user_agent=UA,
|
||||
viewport={"width": 1280, "height": 900},
|
||||
locale="zh-CN",
|
||||
)
|
||||
await ctx.add_init_script(
|
||||
'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'
|
||||
)
|
||||
page = await ctx.new_page()
|
||||
|
||||
print("[1] 打开登录页...")
|
||||
await page.goto(
|
||||
"https://creator.xiaohongshu.com/login", timeout=30000
|
||||
)
|
||||
await asyncio.sleep(5)
|
||||
|
||||
print(f"[2] 填写手机号: {phone[:3]}****{phone[-4:]}")
|
||||
phone_input = page.locator('input[placeholder*="手机号"]').first
|
||||
if await phone_input.count() == 0:
|
||||
phone_input = page.locator('input').nth(1)
|
||||
await phone_input.click()
|
||||
await phone_input.fill(phone)
|
||||
await asyncio.sleep(1)
|
||||
|
||||
if not code:
|
||||
print("[3] 发送验证码...")
|
||||
send_btn = page.locator("text=发送验证码").first
|
||||
await send_btn.click()
|
||||
await asyncio.sleep(2)
|
||||
txt = await page.evaluate("document.body.innerText")
|
||||
if "秒" in txt:
|
||||
print("[✓] 验证码已发送!请查看手机短信后重新运行脚本并带上验证码")
|
||||
await page.screenshot(path="/tmp/xhs_sms_sent.png")
|
||||
await browser.close()
|
||||
return False
|
||||
|
||||
print(f"[3] 填写验证码: {code}")
|
||||
code_input = page.locator('input[placeholder*="验证码"]').first
|
||||
if await code_input.count() == 0:
|
||||
code_input = page.locator("input").nth(2)
|
||||
await code_input.click()
|
||||
await code_input.fill(code)
|
||||
await asyncio.sleep(1)
|
||||
|
||||
print("[4] 点击登录...")
|
||||
login_btn = page.locator('button:has-text("登"), button:has-text("登 录")').first
|
||||
await login_btn.click()
|
||||
await asyncio.sleep(6)
|
||||
|
||||
url = page.url
|
||||
await page.screenshot(path="/tmp/xhs_login_result.png")
|
||||
|
||||
if "login" not in url:
|
||||
print(f"[✓] 登录成功!URL: {url}")
|
||||
await ctx.storage_state(path=str(COOKIE_FILE))
|
||||
cookies = await ctx.cookies()
|
||||
print(f"[✓] 保存了 {len(cookies)} 个 Cookie → {COOKIE_FILE}")
|
||||
await browser.close()
|
||||
return True
|
||||
|
||||
txt = await page.evaluate("document.body.innerText")
|
||||
print(f"[⚠] 登录未成功,URL: {url}")
|
||||
print(f" 页面: {txt[:150]}")
|
||||
await browser.close()
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("用法: python3 xhs_sms_login.py <手机号> [验证码]")
|
||||
sys.exit(1)
|
||||
phone = sys.argv[1]
|
||||
code = sys.argv[2] if len(sys.argv) > 2 else ""
|
||||
ok = asyncio.run(login(phone, code))
|
||||
sys.exit(0 if ok else 1)
|
||||
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
小红书视频发布 - Headless Playwright
|
||||
上传 → 填标题/描述 → 发布。
|
||||
小红书视频发布 v2 — Headless Playwright + 账号预检 + 真实成功验证
|
||||
上传 → 填标题/描述 → 发布 → 笔记管理页验证。
|
||||
"""
|
||||
import asyncio
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
@@ -20,6 +21,31 @@ UA = (
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
|
||||
)
|
||||
|
||||
|
||||
async def pre_check_account() -> tuple[bool, str]:
|
||||
"""发布前账号预检:Cookie 有效性 + 发布权限"""
|
||||
if not COOKIE_FILE.exists():
|
||||
return False, "Cookie 文件不存在"
|
||||
try:
|
||||
with open(COOKIE_FILE) as f:
|
||||
state = json.load(f)
|
||||
cookies = {c["name"]: c["value"] for c in state.get("cookies", [])}
|
||||
cookie_str = "; ".join(f"{k}={v}" for k, v in cookies.items())
|
||||
import httpx
|
||||
resp = httpx.get(
|
||||
"https://creator.xiaohongshu.com/api/galaxy/user/info",
|
||||
headers={"Cookie": cookie_str, "User-Agent": UA,
|
||||
"Referer": "https://creator.xiaohongshu.com/"},
|
||||
timeout=10,
|
||||
)
|
||||
data = resp.json()
|
||||
if data.get("code") == 0:
|
||||
nick = data.get("data", {}).get("nick_name", "?")
|
||||
return True, f"账号正常: {nick}"
|
||||
return False, f"Cookie 已过期: {data.get('msg', '')}"
|
||||
except Exception as e:
|
||||
return False, f"预检异常: {e}"
|
||||
|
||||
TITLES = {
|
||||
"早起不是为了开派对,是不吵老婆睡觉.mp4":
|
||||
"每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记 #小程序 卡若创业派对",
|
||||
@@ -159,11 +185,12 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1,
|
||||
if scheduled_ok:
|
||||
print(f" [定时] 小红书定时发布已设置", flush=True)
|
||||
|
||||
await asyncio.sleep(1)
|
||||
await asyncio.sleep(2)
|
||||
print(" [4] 等待发布按钮启用...", flush=True)
|
||||
pub = page.locator('button:has-text("发布")').first
|
||||
# 等按钮变为可用
|
||||
for wait in range(20):
|
||||
|
||||
pub_selector = 'button.css-k4lp0z, button.publishBtn, button.el-button--danger'
|
||||
pub = page.locator('button:has-text("发布"):not(:has-text("暂存"))').last
|
||||
for wait in range(30):
|
||||
is_disabled = await pub.get_attribute("disabled")
|
||||
if not is_disabled:
|
||||
break
|
||||
@@ -171,31 +198,65 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1,
|
||||
else:
|
||||
print(" [⚠] 发布按钮一直禁用", flush=True)
|
||||
|
||||
await asyncio.sleep(2)
|
||||
print(" [4] 点击发布...", flush=True)
|
||||
await page.evaluate("""document.querySelectorAll('[data-tippy-root],[class*="tooltip"],[class*="popover"],[class*="overlay"]').forEach(e => e.remove())""")
|
||||
await asyncio.sleep(0.3)
|
||||
|
||||
await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
|
||||
await asyncio.sleep(0.5)
|
||||
await pub.scroll_into_view_if_needed()
|
||||
await asyncio.sleep(0.3)
|
||||
await asyncio.sleep(1)
|
||||
|
||||
try:
|
||||
await pub.click(force=True, timeout=5000)
|
||||
except Exception:
|
||||
clicked = await page.evaluate("""() => {
|
||||
const btns = [...document.querySelectorAll('button')];
|
||||
const b = btns.find(e => e.textContent.trim() === '发布' && !e.disabled);
|
||||
if (b) { b.click(); return true; }
|
||||
return false;
|
||||
}""")
|
||||
print(f" [4] JS点击: {'成功' if clicked else '失败'}", flush=True)
|
||||
pre_url = page.url
|
||||
clicked = False
|
||||
|
||||
# 方法1: JS 精准点击红色发布按钮
|
||||
clicked = await page.evaluate("""() => {
|
||||
const btns = [...document.querySelectorAll('button')];
|
||||
const b = btns.filter(e => {
|
||||
const t = e.textContent.trim();
|
||||
const s = getComputedStyle(e);
|
||||
return t === '发布' && !e.disabled &&
|
||||
(s.backgroundColor.includes('255') || s.backgroundColor.includes('rgb(255') ||
|
||||
e.className.includes('red') || e.className.includes('danger') ||
|
||||
e.className.includes('primary'));
|
||||
}).pop();
|
||||
if (b) { b.click(); return true; }
|
||||
const fallback = btns.filter(e => e.textContent.trim() === '发布' && !e.disabled).pop();
|
||||
if (fallback) { fallback.click(); return true; }
|
||||
return false;
|
||||
}""")
|
||||
print(f" [4] JS点击发布: {'成功' if clicked else '失败'}", flush=True)
|
||||
|
||||
if not clicked:
|
||||
try:
|
||||
await pub.click(force=True, timeout=5000)
|
||||
clicked = True
|
||||
print(" [4] Playwright force-click 成功", flush=True)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
await asyncio.sleep(3)
|
||||
confirm = page.locator('button:has-text("确认"), button:has-text("确定")').first
|
||||
if await confirm.count() > 0:
|
||||
await confirm.click(force=True)
|
||||
await asyncio.sleep(3)
|
||||
|
||||
# 处理二次确认弹窗
|
||||
for _ in range(3):
|
||||
confirm = page.locator('button:has-text("确认"), button:has-text("确定"), button:has-text("发布")').last
|
||||
if await confirm.count() > 0 and await confirm.is_visible():
|
||||
txt_btn = (await confirm.text_content() or "").strip()
|
||||
if txt_btn in ("确认", "确定", "发布"):
|
||||
await confirm.click(force=True)
|
||||
print(f" [4] 确认弹窗: 点击了 [{txt_btn}]", flush=True)
|
||||
await asyncio.sleep(2)
|
||||
break
|
||||
|
||||
# 等待页面变化(发布跳转或重置)
|
||||
for _ in range(10):
|
||||
cur_url = page.url
|
||||
cur_txt = await page.evaluate("document.body.innerText")
|
||||
if cur_url != pre_url:
|
||||
break
|
||||
if "发布成功" in cur_txt or "已发布" in cur_txt:
|
||||
break
|
||||
if "拖拽视频到此" in cur_txt and "设置封面" not in cur_txt:
|
||||
break
|
||||
await asyncio.sleep(2)
|
||||
|
||||
await asyncio.sleep(5)
|
||||
await page.screenshot(path="/tmp/xhs_result.png")
|
||||
@@ -205,18 +266,32 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1,
|
||||
|
||||
if "发布成功" in txt or "已发布" in txt:
|
||||
status, msg = "published", "发布成功"
|
||||
elif "审核" in txt:
|
||||
status, msg = "reviewing", "已提交审核"
|
||||
elif "笔记" in url or "manage" in url:
|
||||
status, msg = "reviewing", "已跳转到笔记管理(发布成功)"
|
||||
status, msg = "published", "已跳转到笔记管理(发布成功)"
|
||||
elif "拖拽视频到此" in txt or ("上传视频" in txt and "封面" not in txt):
|
||||
status, msg = "published", "页面已重置(发布成功)"
|
||||
elif "审核" in txt:
|
||||
status, msg = "reviewing", "已提交审核"
|
||||
else:
|
||||
status, msg = "reviewing", "已提交,请确认截图"
|
||||
print(" [⚠] 未检测到明确成功信号,进行二次验证...", flush=True)
|
||||
await asyncio.sleep(3)
|
||||
try:
|
||||
await page.goto("https://creator.xiaohongshu.com/new/note-manager",
|
||||
timeout=15000, wait_until="domcontentloaded")
|
||||
await asyncio.sleep(5)
|
||||
mgr_txt = await page.evaluate("document.body.innerText")
|
||||
short_title = title[:15]
|
||||
if short_title in mgr_txt:
|
||||
status, msg = "published", f"笔记管理页已确认: {short_title}"
|
||||
else:
|
||||
status, msg = "failed", "笔记管理页未找到该笔记"
|
||||
except Exception:
|
||||
status, msg = "unknown", "无法验证,状态不明"
|
||||
|
||||
success = status in ("published", "reviewing")
|
||||
result = PublishResult(
|
||||
platform="小红书", video_path=video_path, title=title,
|
||||
success=True, status=status, message=msg,
|
||||
success=success, status=status, message=msg,
|
||||
screenshot="/tmp/xhs_result.png", elapsed_sec=elapsed,
|
||||
)
|
||||
print(f" {result.log_line()}", flush=True)
|
||||
@@ -233,9 +308,14 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1,
|
||||
async def main():
|
||||
from publish_result import print_summary, save_results
|
||||
|
||||
if not COOKIE_FILE.exists():
|
||||
print("[✗] Cookie 不存在")
|
||||
# 账号预检
|
||||
print("=== 账号预检 ===", flush=True)
|
||||
ok, info = await pre_check_account()
|
||||
print(f" {info}", flush=True)
|
||||
if not ok:
|
||||
print("[✗] 账号预检不通过,终止发布", flush=True)
|
||||
return 1
|
||||
print()
|
||||
|
||||
videos = sorted(VIDEO_DIR.glob("*.mp4"))
|
||||
if not videos:
|
||||
@@ -244,18 +324,32 @@ async def main():
|
||||
print(f"共 {len(videos)} 条视频\n")
|
||||
|
||||
results = []
|
||||
consecutive_fail = 0
|
||||
for i, vp in enumerate(videos):
|
||||
t = TITLES.get(vp.name, f"{vp.stem} #Soul派对 #创业日记")
|
||||
r = await publish_one(str(vp), t, i + 1, len(videos))
|
||||
results.append(r)
|
||||
if i < len(videos) - 1:
|
||||
await asyncio.sleep(5)
|
||||
|
||||
if r.status == "skipped":
|
||||
consecutive_fail = 0
|
||||
elif r.success:
|
||||
consecutive_fail = 0
|
||||
else:
|
||||
consecutive_fail += 1
|
||||
if consecutive_fail >= 3:
|
||||
print("\n[!] 连续 3 次失败,终止以防封号", flush=True)
|
||||
break
|
||||
|
||||
if i < len(videos) - 1 and r.status != "skipped":
|
||||
wait = 15
|
||||
print(f" 等待 {wait}s 再发下一条...", flush=True)
|
||||
await asyncio.sleep(wait)
|
||||
|
||||
actual = [r for r in results if r.status != "skipped"]
|
||||
print_summary(actual)
|
||||
save_results(actual)
|
||||
ok = sum(1 for r in actual if r.success)
|
||||
return 0 if ok == len(actual) else 1
|
||||
ok_count = sum(1 for r in actual if r.success)
|
||||
return 0 if ok_count == len(actual) else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -273,3 +273,4 @@
|
||||
| 2026-03-10 19:50:03 | 🔄 卡若AI 同步 2026-03-10 19:50 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-10 19:50:33 | 🔄 卡若AI 同步 2026-03-10 19:50 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-10 20:05:38 | 🔄 卡若AI 同步 2026-03-10 20:05 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-10 20:26:50 | 🔄 卡若AI 同步 2026-03-10 20:26 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
|
||||
@@ -276,3 +276,4 @@
|
||||
| 2026-03-10 19:50:03 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 19:50 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-10 19:50:33 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 19:50 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-10 20:05:38 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 20:05 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-10 20:26:50 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 20:26 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
|
||||
Reference in New Issue
Block a user