fix: 任务动作编辑器剪贴板注入改用 ClipInject 通道——u2 set_clipboard 在 Android 10+ 静默失效(粘贴模式必抛 UiAutomationError);提取 core/clipboard_helper 公共模块供工具页与任务执行端共用,粘贴模式 atx-agent pasteClipboard + set_text 兜底

This commit is contained in:
2026-08-20 10:51:54 +08:00
parent 2a3c748964
commit 90ca2c2100
3 changed files with 93 additions and 61 deletions
+21 -10
View File
@@ -478,26 +478,37 @@ class GenericStepsWorker(BaseWorker):
return found # 命中结果,"测试此步骤"用
def _exec_clipboard(self, d, params, depth=0):
"""剪贴板注入:写入指定内容到剪贴板,可选立即粘贴到当前聚焦的输入框。
"""剪贴板注入(ClipInject 通道,Android 10+ 可用),可选立即粘贴。
批量发链接场景:先聚焦评论区输入框 → 注入+粘贴链接1 → 换链接 → 注入+粘贴链接2……
粘贴模式复用 u2 send_keys(内部 setClipboard + pasteClipboard,与"输入文字"同机制)。
粘贴模式:ClipInject 写入剪贴板后调 atx-agent pasteClipboard 粘贴到当前
焦点输入框;动作失败时兜底 u2 set_text 直接设置聚焦输入框文本(不依赖
剪贴板,与"输入文字"兜底同机制)。
"""
text = str(params.get("text", "") or "")
if not text:
_log.warning(f"[{self.serial}] clipboard 内容为空,跳过")
return False
from core.clipboard_helper import inject_clipboard
ok, msg = inject_clipboard(self.serial, text, d=d)
if not ok:
_log.warning(f"[{self.serial}] 剪贴板注入失败: {msg}")
return False
_log.info(f"[{self.serial}] 剪贴板注入: {text[:60]}({msg})")
if not params.get("paste"):
return True
try:
if params.get("paste"):
d.send_keys(text) # setClipboard + pasteClipboard
_log.info(f"[{self.serial}] 剪贴板注入并粘贴: {text[:60]}")
else:
d.set_clipboard(text)
_log.info(f"[{self.serial}] 剪贴板注入(不粘贴): {text[:60]}")
d.jsonrpc.pasteClipboard()
_log.info(f"[{self.serial}] 已粘贴: {text[:60]}")
return True
except Exception as e:
_log.warning(f"[{self.serial}] 剪贴板注入异常: {e}")
return False
try:
d(focused=True).set_text(text)
_log.info(f"[{self.serial}] 粘贴兜底 set_text: {text[:60]}")
return True
except Exception as e2:
_log.warning(f"[{self.serial}] 粘贴失败: {e} / {e2}")
return True # 剪贴板已写入,粘贴失败不致命
def _exec_wait(self, d, params, depth=0):
min_s = float(params.get("min", 1.0))