From 12ac599a27f23abd2d85f22772b20db11f02378c Mon Sep 17 00:00:00 2001 From: butubb <1422726308@qq.com> Date: Mon, 12 Oct 2026 13:40:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=8F=91=E5=B8=83=E9=AA=A8=E6=9E=B6):=20?= =?UTF-8?q?=E8=A1=A5=E4=B8=8A=E7=BC=BA=E5=A4=B1=E7=9A=84=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E4=B8=AA=E3=80=8C=E4=B8=8B=E4=B8=80=E6=AD=A5=E3=80=8D=EF=BC=88?= =?UTF-8?q?=E5=89=AA=E8=BE=91=E9=A1=B5=20=E2=86=92=20=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=A1=B5=EF=BC=89+=20=E5=8F=91=E5=B8=83=E9=A1=B5=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=B6=85=E6=97=B6=2025=20=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 复查骨架时发现:抖音是 相册页 →(下一步)→ 剪辑页 →(下一步)→ 发布页, 而骨架里只画了一个「下一步」就直奔"点击标题框" —— 照它建出来的任务会在剪辑页上 去点标题框、一路空点到"发布",最后什么都没发出去(还不报错)。 · 补 `⑯ 点击「下一步」(剪辑页 → 发布页)` · 把「发布页」校验挪到标题框**之前**(点下一步②之后就在发布页了),特征用 `添加标题/添加作品描述`(25 秒:发布页要加载) · 「发布按钮」校验留在点「发布」之前(20 秒) · 标签重新编号 ⑧~㉔,读起来是一条完整链路 同步:doc/API.md 的骨架描述(步数)。 --- core/video_plan.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/core/video_plan.py b/core/video_plan.py index bb5183b..f5ec44a 100644 --- a/core/video_plan.py +++ b/core/video_plan.py @@ -601,25 +601,31 @@ def build_release_steps(): clk("video", "⑫ 点击第一个素材(刚推的排最前;抓一次就行)"), build_expect_step("⑬ 校验:素材应已选中(看到「选择/预览」)", "xpath", "//*[@content-desc='选择' or @content-desc='预览']", "素材已选中", timeout=10), - clk("next", "⑭ 点击「下一步」"), + clk("next", "⑭ 点击「下一步」(相册页 → 剪辑页)"), # 剪辑页要等**视频导入完成**("正在导入"弹窗挡住工具栏):真机实测(2026-10-12 A06) # 一条 25 秒的视频导入要 25 秒+,10~12 秒必然判"没到剪辑页"→ 这一条白发。给到 45 秒。 build_expect_step("⑮ 校验:应在剪辑页(看到「文字/话题」工具)", "xpath", "//*[@content-desc='文字' or @content-desc='话题']", "剪辑页", timeout=45), - clk("input", "⑯ 点击标题框(抖音发布页的标题框:hint「添加标题」)"), + # ⚠ 这里**必须**有第二个「下一步」:抖音是 相册页 →(下一步)→ 剪辑页 →(下一步)→ 发布页, + # 少了它就会在剪辑页上去点"标题框",然后一路空点到"发布"(2026-10-12 复查骨架时补上) + clk("next2", "⑯ 点击「下一步」(剪辑页 → 发布页)"), + build_expect_step("⑰ 校验:应在发布页(看到「添加标题/添加作品描述」)", "xpath", + "//*[contains(@text,'添加标题') or contains(@text,'添加作品描述')]", + "发布页(标题/描述框)", timeout=25), + clk("input", "⑱ 点击标题框(抖音发布页的标题框:hint「添加标题」)"), {"id": sid("title"), "type": "input_text", - "label": "⑰ 填标题(自动取这一条计划的标题,会回读校验)", + "label": "⑲ 填标题(自动取这一条计划的标题,会回读校验)", "params": {"text_source": "release_title", "release_topics": "", "clear_first": True, "mode": "random", "texts": "", "fixed_text": ""}}, - clk("body", "⑱ 点击正文框(发布页的描述框:hint「添加作品描述」)"), + clk("body", "⑳ 点击正文框(发布页的描述框:hint「添加作品描述」)"), {"id": sid("bodytxt"), "type": "input_text", - "label": "⑲ 填正文(自动取这一条计划的正文,会回读校验)", + "label": "㉑ 填正文(自动取这一条计划的正文,会回读校验)", "params": {"text_source": "release_body", "release_topics": "", "clear_first": True, "mode": "random", "texts": "", "fixed_text": ""}}, - build_expect_step("⑳ 校验:应在发布页(看到「发布」按钮)", "xpath", - "//*[@text='发布' or @content-desc='发布']", "发布页(发布按钮)", timeout=10), - clk("publish", "㉑ 点击「发布」"), - dict(build_mark_step("㉒ 标记发布结果(成功走这里;失败分支再放一个 result=failed)")), + build_expect_step("㉒ 校验:应在发布页(看到「发布」按钮)", "xpath", + "//*[@text='发布' or @content-desc='发布']", "发布页(发布按钮)", timeout=20), + clk("publish", "㉓ 点击「发布」"), + dict(build_mark_step("㉔ 标记发布结果(成功走这里;失败分支再放一个 result=failed)")), ] # 循环体:切号 → 读名字 → 校验 → 推送 → 发布 → 标记。 # `switch_account` 自己会先看"当前是不是已经是目标"(第一个号不用切),