返回顶部
u

ui-agent通用UI自动化

Universal UI automation for browsers and desktops. Chrome DevTools Protocol + native APIs. 15/15 verified tests.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
90
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

ui-agent

UIAgent: 通用UI自动化技能

状态: ✅ 生产就绪 (v1.0)
测试: 15/15 通过(100%真实证据)
许可证: MIT
Python: 3.9+



描述

UIAgent 是一个生产级的浏览器和桌面自动化框架,无需HTML选择器、脆弱标识符或脆弱的XPath表达式即可工作。

它结合了:

  • - Chrome DevTools 协议 (CDP) 用于智能浏览器控制
  • 原生操作系统API(X11、Windows UIA、macOS Accessibility)用于桌面自动化
  • 基于证据的验证(截图哈希、DOM检查、文件验证)
  • VirtualBox 和无头支持(已在VirtualBox上验证,可在裸机上运行)

用于自动化:

  • - 复杂的Web工作流(多步骤登录、表单填写、错误恢复)
  • 选择器不稳定的动态网站
  • 桌面应用程序(终端、文本编辑器、文件管理器)
  • 跨浏览器会话管理和持久化
  • 带有可视化证据的集成测试



快速开始

安装

bash

添加到项目


git clone https://github.com/yourusername/uiagent.git
cd uiagent
pip install -r requirements.txt

最小示例

python
from src.chromesessionvboxfixed import getctrl
import time

启动浏览器

ctrl = get_ctrl()

导航

ctrl._send(Page.navigate, {url: https://example.com}) time.sleep(2)

填写表单字段

ctrl.js(document.getElementById(email).value = ) ctrl.js(document.getElementById(email).focus()) ctrl._send(Input.insertText, {text: user@example.com}) time.sleep(0.3)

验证

email = ctrl.js(document.getElementById(email).value) print(f已填写: {email}) # → user@example.com

读取标题

title = ctrl.js(document.title) print(f标题: {title})

真实测试示例

python
from src.chromesessionvboxfixed import getctrl
from src.verifyhelpers import screenhash
import time

ctrl = get_ctrl()
ctrl._send(Page.navigate, {url: https://example.com})
time.sleep(2)

之前状态

hashbefore = screenhash(ctrl) print(f之前: {hash_before})

做出更改

ctrl.js(document.body.style.backgroundColor = red) time.sleep(0.5)

之后状态

hashafter = screenhash(ctrl) print(f之后: {hash_after})

验证更改是否真实

assert hashbefore != hashafter, 未检测到更改 print(✅ 通过截图哈希验证更改)

API 参考

Chrome 控制 (src/cdp_typer.py)

get_ctrl() → CDPTyper

启动或重用带有VirtualBox修复的Chrome实例。

python
ctrl = get_ctrl()

返回: 连接到Chrome DevTools协议的CDPTyper实例

特性:

  • - 如果现有Chrome健康则自动重用
  • 清理VirtualBox上的锁文件
  • 等待CDP就绪(标签页加载完成)
  • 启动超时5分钟



ctrl._send(method, params) → dict

向Chrome发送CDP命令并返回结果。

python
result = ctrl._send(Runtime.evaluate, {
expression: document.title,
returnByValue: True
})

→ {result: {value: 页面标题}}

常用命令:

  • - Page.navigate - 导航到URL
  • Runtime.evaluate - 运行JavaScript
  • Input.insertText - 输入文本
  • Storage.getCookies - 读取Cookie(用于会话持久化)

完整CDP参考: ChromeDevTools 协议



ctrl.js(code) → result

在页面上下文中执行JavaScript并获取结果。

python
title = ctrl.js(document.title)
value = ctrl.js(document.getElementById(email).value)
color = ctrl.js(getComputedStyle(document.body).backgroundColor)

返回: JavaScript结果(字符串、对象、布尔值等)



ctrl.click(x, y)

在像素坐标处点击(CDP方法)。

python

获取元素位置


pos = ctrl.js(
(() => {
const el = document.getElementById(button);
const r = el.getBoundingClientRect();
return {x: r.left + r.width/2, y: r.top + r.height/2};
})()
)

点击元素中心

ctrl.click(pos[x], pos[y])

ctrl.screenshot(filepath) → bytes

截取屏幕截图并保存到文件。

python
ctrl.screenshot(/tmp/page.png)
print(截图已保存)

检查大小

import os size = os.path.getsize(/tmp/page.png) print(f大小: {size} 字节)

验证辅助函数 (src/verify_helpers.py)

screen_hash(ctrl) → str

获取渲染页面的MD5哈希(变更检测)。

python
hashbefore = screenhash(ctrl)
ctrl.js(document.body.innerHTML =

已更改

)
hashafter = screenhash(ctrl)

assert hashbefore != hashafter, 页面未更改

返回: 32字符MD5十六进制字符串

用于: 无需像素级比较即可检测视觉变化



current_url(ctrl) → str

获取当前页面URL。

python
url = current_url(ctrl)
print(f当前: {url})

assert example.com in url, 页面错误



dom_exists(ctrl, selector) → bool

检查元素是否存在于DOM中(未隐藏)。

python
if dom_exists(ctrl, #submit-button):
ctrl.js(document.querySelector(#submit-button).click())
else:
print(未找到按钮)



桌面自动化 (src/desktop_helpers.py)

launch(app, *args, wait=2) → (proc, display)

启动桌面应用程序。

python
proc, display = launch(gedit, wait=2)

→ 运行中: gedit on DISPLAY=:99

常用应用:

  • - gedit - 文本编辑器
  • nautilus - 文件管理器
  • gnome-terminal - 终端
  • firefox - 浏览器

返回: (subprocess.Popen, display_string)



type_text(text, display=None)

通过X11 xdotool输入文本(用于桌面应用)。

python
proc, display = launch(gedit, wait=2)
type_text(你好,UIAgent!, display=display)

Gedit现在包含:你好,UIAgent!

使用: xdotool进行X11键盘模拟



press_key(key, display=None)

按下按键(Tab、Enter、Ctrl+S等)。

python
press_key(ctrl+s, display=display) # 保存
press_key(Tab, display=display) # 下一个字段
press_key(Return, display=display) # 提交

常用按键:

  • - Tab、Return、Escape
  • ctrl+c、ctrl+s、ctrl+z
  • alt+f4



会话持久化(v1.0功能)

Chrome重启后的Cookie持久化

问题: Chrome在无头模式下关闭时不会将Cookie刷新到SQLite。

解决方案: 使用JavaScript + CDP Storage API

python

关闭前:从内存保存Cookie


result = ctrl._send(Storage.getCookies, {})
saved_cookies = result.get(cookies, [])

关闭Chrome

from src.chromesessionvbox_fixed import close close() time.sleep(2)

重新启动

ctrl2 = get_ctrl()

通过JavaScript恢复Cookie

for cookie in saved_cookies: js = fdocument.cookie = {cookie[name]}={cookie[value]}; path=/; secure; samesite=none; ctrl2.js(js)

导航验证

ctrl2._send(Page.navigate, {url: https://httpbin.org/cookies}) time.sleep(2)

page = ctrl2.js(document.body.innerText)
assert cookie[value] in page, Cookie未持久化
print(✅ Cookie在重启后存活)

为什么有效:

  1. 1. Storage.getCookies 读取Chrome的内存Cookie存储(无SQLite依赖)
  2. document.cookie =

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 ui-agent-1776014546 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 ui-agent-1776014546 技能

通过命令行安装

skillhub install ui-agent-1776014546

下载

⬇ 下载 ui-agent v1.0.0(免费)

文件大小: 57.47 KB | 发布时间: 2026-4-13 12:25

v1.0.0 最新 2026-4-13 12:25
UIAgent v1.0.0 – Initial public release

- Universal UI automation framework for browsers (CDP) and desktops (OS-native APIs)
- 100% test coverage: 15/15 real-world verified tests passing
- Supports automation for web workflows, dynamic UIs, and desktop applications
- Evidence-based verification: screenshot hashing, DOM checks, file checks
- Reliable cross-browser session management and persistence, including headless Chrome
- Includes robust API: JavaScript execution, mouse/keyboard simulation, screenshots, and more

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部