Automation Runtime
Automation Runtime 从已审核的 Screph 项目执行准备好的 GUI 工作流。它加载元素和模板,检测视觉或文本状态,等待定义的条件并通过选定的输入后端发送显式命令。
1. 执行开始的地方
项目 JSON 描述了一个目标及其上下文;它不是一个自动运行的机器人。仅当您启动脚本或自动化管理器命令时才开始执行。目标应用程序必须首先打开、可见并且处于预期的显示配置中。
在 Screph 中保存并审核项目。
在 Settings → Dependencies 下,准备脚本/CV 运行时和 OCR 当涉及文本时,运行时。
在 Settings → 输入仿真 下,选择并测试后端。
首先针对安全测试目标运行工作流,然后在 Automation Manager 中观看步骤/屏幕截图。
2. 加载并验证项目
validate_project(path) 返回 (好的,错误) 对;在不检查结果的情况下调用它是不够的。 load_project(path) 不会自动运行该验证:它读取元素、投影坐标、注册每个的第一个 image_path 元素作为模板,并返回 GuiBotController 以及 GuiElement 的列表。
from automation_runtime import (
load_project,
validate_project,
wait_and_click_image,
wait_until_gone_image,
)
project_path = "projects/my_ui_project.json"
ok, errors = validate_project(project_path)
if not ok:
raise RuntimeError("Project is not runnable:\n" + "\n".join(errors))
bot, elements = load_project(project_path)
target = next(item for item in elements if item.id == "start_button")
if not wait_and_click_image(bot, target.id, timeout=20, desc="Start"):
raise RuntimeError("start_button was not found")
if not wait_until_gone_image(bot, target.id, timeout=10):
raise RuntimeError("Start action did not reach the expected next state")
这是运行时预检,未完成包验证。 它检查 gui_elements,必需元素字段、受支持的坐标上下文、可投影边界框以及列出的模板路径的存在。它不会验证 json_role、规范 JSON Schema、哈希值、项目根中的路径包含、每个产物/伴随文件或选定的输入监视器。使用 Selector 诊断保证封装完整性第一;运行时验证和实际输入防护保持独立的门。
使用稳定的元素 ID 和屏幕匹配通常比固定的绝对点击序列更稳健。模板仍然取决于比例、主题、窗口状态和源图像质量。运行时不会验证可见匹配是否属于预期的进程或窗口。
3. 主要 API 组
图像和等待
wait_and_click_image, double_click_image, right_click_image — 查找模板并请求操作;工作流验证后置条件。
wait_until_gone_image — 确认超时前状态不存在。
find_all_images, wait_for_any_image, wait_for_all_images — 使用列表和替代状态。
文本和 OCR
wait_and_click_text — 等待文本并点击检测到的区域。
wait_for_text_change, ensure_text_contains — 验证更改或预期内容。
输入和实用程序
click_in_area, move_to_area, move_to, get_cursor_position.
type_text, press_key, press_hotkey, drag_from_to, scroll.
retry, take_screenshot 以及诊断和可重复性的操作日志记录。
不要混合使用两种矩形形式: image/OCR region 和检测到的边界框使用(左,上,右,下),而GuiElement.area,click_in_area, move_to_area 和拖动区域使用 (x, y, width, height)。区域助手选择区域内的随机点而不是其中心。
wait_for_all_images 累积在不同轮询时刻找到的模板; true并不能证明它们全部出现在同一帧中。
wait_until_gone_image 确认轮询期间缺席,但不需要首先观察到模板。
wait_and_click_image 和 wait_and_click_text 首先检测目标,然后再次搜索点击。它们的 true 反映了第一次检测,而当前包装器不检查第二次搜索/点击返回值。使用单独的助手验证预期的后置条件。
4. 坐标和选定的监视器
公共输入助手接收虚拟桌面上的全局物理坐标。项目几何的投影取决于存储的坐标空间:
Source 加载器行为 它没有证明什么
screen_physical_px接受已全局的边界框。 捕获目标不再解析;当指针动作发生时,只有输入防护检查拓扑。
screenshot_raw_px + monitor通过稳定设备名称查找当前显示器,并将原始屏幕截图缩放到当前矩形。 分辨率更改会导致重新缩放,而不需要相同的几何形状。
screenshot_raw_px + window解析当前的 HWND,检查存储的 PID/类(如果存在)并缩放到当前窗口矩形。 不验证前景状态、可见性、遮挡、标题或窗口内容。
screenshot_raw_px + region使用存储的物理区域矩形并缩放原始坐标。 某个区域没有需要重新验证的实时窗口/监视器身份。
在输入设置中选择的监视器是单独的指针目标边界,而不是原点偏移。 all 允许任何连接的显示器,但仍拒绝输出外部或虚拟桌面间隙中的点;特定监视器拒绝其矩形之外的点。此检查在实际移动/单击期间运行,可能会拒绝通过 validate_project 的项目。
5. 输入后端
用户在设置中选择后端。运行时不会默默地切换到另一种输入法。
Arduino Leonardo HID — 使用控制 HID 通道和匹配固件的主要硬件模式。 flash 动作将 Leonardo/ATmega32U4 放入其引导加载程序中,并通过avrdude写入选定的.hex;这会修改外部设备,而不仅仅是测试连接。
Legacy Serial — 与旧版 Leonardo COM 固件兼容。
FakerInput Virtual HID — Windows 上的软件 HID 键盘和鼠标。第一次选择该模式会立即验证捆绑的 MSI 的 SHA256、Authenticode 签名和签名者,然后通过一个 UAC 请求安装系统驱动程序;之后可能需要手动重新启动。
Arduino 和 FakerInput 使用相对 HID 增量移动指针。运行时读取系统速度和加速度并发出风险警告;它不会自动更改它们。单独的显式 --apply-recommended CLI 命令会在当前用户的配置文件中保留中性设置,并且本身不会恢复以前的值。始终在真正的工作流之前运行输入测试。
UAC、固件、鼠标设置和系统效果 →
6. 当需要 OCR 时
Tesseract 和 ocr.runtime 仅在读取、查找和验证文本时需要。图像匹配、坐标动作和普通文本输入不需要 OCR。如果 OCR 被禁用或损坏,文本帮助程序将返回空/假/无结果以及帮助程序发出的 EVT 进度,而不是切换到图像匹配。
find_text/wait_and_click_text 将查询与一个 OCR 令牌进行比较,因此是一个多词短语不跨相邻标记进行组装。
wait_for_text_change 仅在连续三个相同的 OCR 读数后返回新的非空值。
ensure_text_contains 将区域的标记连接到字符串中并执行区分大小写的子字符串检查。
检查运行时组件和安装源→
7. 自动化管理器
Automation Manager 将选定的工作流作为子 Python 进程运行,并使用当前 Windows 用户的权限和脚本目录作为其工作目录。运行时向标准输出发出结构化 EVT 事件:当前步骤、进度、屏幕快照、模板和检测到的匹配。界面将它们与执行日志一起显示。
这不是沙箱。该进程继承 Screph 的环境,包括那里可用的凭据,接收 AM_* 变量的参数,并且可以使用用户可用的文件、网络和设备。审核代码、其依赖项、环境以及它在运行之前创建的任何外部进程。
开始之前,审核脚本、工作目录和参数。
在坐标驱动工作流期间不要手动与目标窗口交互。
如果状态出现分歧,停止进程,保留日志/屏幕截图并修复项目或前提条件;不要盲目增加超时。
Stop 首先终止直接子进程,等待最多五秒,然后终止该进程。由工作流本身生成的进程可能会继续运行,必须单独检查。
8. 故障排除
找不到模板: 检查比例、主题、窗口状态、ROI 和阈值。
未找到文本: 检查 ocr.runtime、Tesseract 语言和区域质量。
指针移动不正确: 检查显示器拓扑、物理坐标、显示器防护和 Windows 加速设置。
输入未开始: 打开输入仿真测试并修复所选后端;没有隐藏的回退。