@ framers/ agentos-ext-browser-automation (英语)
AgentOS 代理器的浏览器自动化,分两个独立道:
- 发射道 - 10个Playwright支持的工具(
browserNavigate, (中文(简体) ),browserClick, (中文(简体) ),browserFill, (中文(简体) ),browserScreenshot, (中文(简体) ),browserExtract, (中文(简体) ),browserWait, (中文(简体) ),browserScroll, (中文(简体) ),browserSnapshot, (中文(简体) ),browserEvaluate, (中文(简体) ),browserSession)驱动一个浏览器,包的启动和拥有。 可选 CAPTCHA 解析和代理旋转 . - 附加道 - 7个
browser_attach_*工具加驱动用户的持久守护进程 已运行、已登录 浏览器. 仅选入( O)attach.expectedIdentitya. 组织事项 永远不要发射浏览器 .
附加守护进程
一个长寿的守护进程为运行中的克罗姆举行一个生-CDP会话. 每个消费者——CLI脚本、申报运行、代理任务——都通过文件序列IPC驱动会议 ~/.wunderland/attach/ipc/。守护进程是唯一触及网络的进程,因此macOS每次守护进程寿命一次提高本地网络权限,而不是每次代理进程一次.
callers (CLI / scripts / agent tools) ── files only ──► AttachDaemon (one process)
└─ raw CDP ws://localhost:<port> ──► your Chrome
需要节点22或更新( 传输为内置) WebSocket; 守护进程退出时带有关于旧运行时间的可操作消息. Chrome 必须运行与 --remote-debugging-port=9222。 。 。 .
硬合同
- 在任何失败下从不发射,退出,重启,或信号克罗姆.
- 创建一个代理标签, 并且只能关闭该标签; 每个其它标签都未受影响( 由真实浏览器 e2e 提供) .
- CDP 主机为
localhost(Chrome的DNS绑定后卫拒绝)127.0.0.1) (中文(简体) ). - 1个守护进程(原子文件锁),1个索赔人(租赁+索赔),系列行动.
- 代理工具表面没有 eval .
eval仅存在于JS客户端的用户编译的脚本上. - 页面文本以
untrusted: true——把它当作数据,从不当作指示. - 导航是政策检查后守护进程侧: https 或
about:blank,没有包含证书的 URL,重定向重验证. - 没有饼干,存储,或证书导出;诊断被校正.
- 客户端从不重发已死守护进程(再发回回环是一次许可-即时风暴). 自动启动, 当明确启用时, 精确尝试一次 .
行动
ping, (中文(简体) ), status, (中文(简体) ), claim, (中文(简体) ), goto {url, settle?}, (中文(简体) ), read {selector?, maxChars?}, (中文(简体) ), extract {fields?}, (中文(简体) ), screenshot {path, fullPage?}, (中文(简体) ), eval {expression, timeoutMs?} (用户道), release, (中文(简体) ), control {action}, (中文(简体) ), quit。命令是每个文件一个(cmd-<id>.json → resp-<id>.json,原子写入-当时的重命名,字符串标识; status.json 心跳每个循环滴答.
用这个
程序化( E)/attach/daemon 子路径 :
import { AttachDaemonClient, runAttachScript } from '@framers/agentos-ext-browser-automation/attach/daemon';
const client = new AttachDaemonClient({ client: 'my-script' });
await client.claim();
await client.goto('https://example.com/', { settle: 2000 });
const { text } = await client.read({ maxChars: 4000 });
await client.release();
声明计划( 无控制流, 无 eval ):
name: crawl
claim: { ttlMs: 600000 }
steps:
- { op: goto, url: "https://example.com/list", settle: 2500 }
- { op: read, out: listing }
- { op: extract, fields: { items: "ul li" }, out: items }
从wunderland CLI: wunderland attach start | status | stop | run <file.mjs|file.yaml|file.json>代理代表团通过使附加工具与 transport: 'cdp' (单位:千美元)WUNDERLAND_ATTACH_TRANSPORT=cdp) (中文(简体) ).
截图
browser_attach_screenshot (和 AttachController.screenshot将代理标签的PNG写入证据目录中的新文件, ~/.wunderland/attach-evidence 除非 WUNDERLAND_ATTACH_EVIDENCE_DIR (或包头) attach.evidenceDir 选项,对于进程内控制器)命名另一个。 它需要 CDP 运输: JXA 运输没有像素访问, 拒绝使用 UNSUPPORTED_OP。 。 。 .
path相对于证据目录,或其中的绝对路径。 一个离开目录,通过链接的路径,或者一个存在文件的名字在被捕获之前被拒绝,而会话保持准备状态. 文件以旗帜创建wx,所以没有文件被替换,结果给出了写入的路径.- 证据目录对会话所运行的用户是保密的. 它和其中的目录是用0700模式制作的;另一个用户或组可以写入的目录被拒绝,另一个用户可以更改的目录下的一个也是如此(粘着的目录,例如:
/tmp- 没事 在抓取页面之前检查目录,并在创建文件时再次检查目录,图像只有在被检查的目录中找到新文件后才被写入. - 截图保存会话直至其文件被写入: 进程内控制器拒绝一个
goto或者说read同时调用,守护进程会一次执行一个命令. fullPage抓取可滚动页面,每侧切入16,384 CSS像素.- 工具有副作用(它写一个文件),所以一个否定-侧效应会把它作为政策门.
环境
| 变量 | 含义 |
|---|---|
WUNDERLAND_ATTACH_IDENTITY | 要求。 配置文件身份守护进程在要求前必须先进行校验(例如您的账户电子邮件; 与身份 - probe tab 的标题/ url 元数据相匹配) . |
WUNDERLAND_ATTACH_TRANSPORT | jxa (正在处理中, macOS AppleScript) 或 cdp (demon -routed). |
WUNDERLAND_ATTACH_PROFILE_ROOT | Chrome profile 根控住 DevToolsActivePort。 。 。 . |
WUNDERLAND_ATTACH_PROBE_URL | 身份检测 URL 子串( 默认) mail.google.com) (中文(简体) ). |
WUNDERLAND_ATTACH_HOSTS | 以逗号分隔的 https 主机允许访问列表 . |
WUNDERLAND_ATTACH_LEASE | 租赁文件路径覆盖 . |
WUNDERLAND_ATTACH_IPC_DIR | IPC 目录覆盖( 默认) ~/.wunderland/attach/ipc) (中文(简体) ). |
WUNDERLAND_ATTACH_PID_FILE | 守护进程 pidfile 覆盖( 默认) ~/.wunderland/attach/daemon.pid) (中文(简体) ). |
WUNDERLAND_ATTACH_AUTOSTART | 1编号 :true: 在守护进程倒下时允许一次自动启动尝试 . |
WUNDERLAND_ATTACH_DRYRUN | 1编号 :true:在不接触浏览器的情况下模拟导航/读取. |
WUNDERLAND_ATTACH_DEADLINE_MS | 操作截止时间(默认为4500). |
WUNDERLAND_ATTACH_EVIDENCE_DIR | 守护进程写截图的地方( 默认) ~/.wunderland/attach-evidence) (中文(简体) ). 只有守护进程用户才能写出目录 . |
释放
新版本发表于 架设层/剂-外延 由 GitHub Actions 通过 npm 信任的出版, 并附有出处声明 .
许可证
阿帕奇 - 2.0