opensteer

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Opensteer

Opensteer

Opensteer gives AI agents a real Chromium browser — local or cloud. Use it when normal code is not enough because the task depends on a live browser session.
Default workflow:
  1. CLI to explore the site and discover behavior.
  2. Save stable targets with
    persist
    .
  3. SDK to write the final reusable TypeScript.
Do not stop at manual exploration if the user needs automation.
Opensteer为AI Agent提供真实的Chromium浏览器支持,可本地运行也可云端运行。当任务依赖活跃的浏览器会话,普通代码无法满足需求时可以使用它。
默认工作流程:
  1. 通过CLI探查站点,摸清运行逻辑。
  2. 使用
    persist
    保存稳定的目标元素。
  3. 使用SDK编写最终可复用的TypeScript代码。
如果用户需要自动化能力,不要停留在手动探查阶段。

Setup

安装

Install the Opensteer skill so the coding agent can use it:
bash
opensteer skills install
This registers the skill with the agent's tool system. Only needed once per environment.
安装Opensteer skill,以便编码Agent可以使用它:
bash
opensteer skills install
这条命令会将skill注册到Agent的工具系统中,每个环境仅需执行一次。

When To Use

适用场景

  • Real browser session needed (clicks, forms, DOM extraction, navigation).
  • Cookies, localStorage, sessionStorage, or auth state involved.
  • Reverse-engineering a site API from real browser traffic.
  • Browser-backed
    fetch()
    instead of plain Node HTTP.
  • Coordinate-based interaction (canvas, WebGL, hard-to-target UI).
  • Need to reuse a real user's logged-in browser profile.
If the user wants to manually drive a browser and record the flow, use the
recorder
skill instead.
  • 需要真实浏览器会话(点击、表单操作、DOM提取、页面导航)。
  • 涉及Cookies、localStorage、sessionStorage或身份认证状态。
  • 从真实浏览器流量中逆向分析站点API。
  • 需要基于浏览器的
    fetch()
    而非普通Node HTTP请求。
  • 基于坐标的交互(canvas、WebGL、难以定位的UI元素)。
  • 需要复用真实用户已登录的浏览器配置文件。
如果用户想要手动操作浏览器并录制操作流程,请改用
recorder
skill。

Core Rules

核心规则

  1. Always use a workspace for stateful commands:
    --workspace <id>
    or
    OPENSTEER_WORKSPACE
    .
  2. Re-snapshot after navigation or big UI changes before reusing element numbers.
  3. CLI to discover, SDK for the final implementation.
  4. Use
    persist
    for stable reusable targets and extraction payloads.
  5. Use
    exec
    for SDK code and API experiments. Use
    evaluate
    only for page-context JavaScript.
  6. If
    fetch()
    fails with auth errors, inspect
    state()
    ,
    cookies()
    , and
    storage()
    before changing transport.
  7. Keep output simple. Prefer ordinary TypeScript with
    Opensteer
    , no extra abstraction.
  8. Close the browser when done. Do not leave headed browsers running. Use
    opensteer browser delete --workspace <id>
    or SDK cleanup when the session does not need to stay open.
  1. 执行有状态的命令时始终使用工作空间:
    --workspace <id>
    OPENSTEER_WORKSPACE
    环境变量。
  2. 在导航或发生较大UI变更后,重新生成快照再复用元素编号。
  3. 使用CLI做探查,使用SDK做最终实现。
  4. 使用
    persist
    保存稳定的可复用目标和提取 payload。
  5. 使用
    exec
    运行SDK代码和做API实验,仅在需要页面上下文的JavaScript时使用
    evaluate
  6. 如果
    fetch()
    出现身份认证错误,修改传输方式前先检查
    state()
    cookies()
    storage()
  7. 保持输出简洁,优先使用基于
    Opensteer
    的普通TypeScript代码,不要额外封装抽象层。
  8. 使用完毕后关闭浏览器,不要保持有头浏览器运行。当会话不需要保持开启时,使用
    opensteer browser delete --workspace <id>
    或SDK的清理方法关闭。

Choose A Path

功能路径选择

What does the task need?
├─ Click, type, navigate, extract visible data → DOM path
├─ Find or replay a site API → Network path
├─ Analyze, deobfuscate, or sandbox page JavaScript → Scripts analysis
├─ Canvas, WebGL, or hard-to-target UI → Computer-use
├─ Work with multiple tabs or popups → Tab management
├─ Set up browser profile, clone, or attach → Browser sessions
├─ Run browser in the cloud → Cloud mode
├─ Watch what a headless browser is doing → Local view
└─ Unsure → start by capturing network traffic
任务需要什么功能?
├─ 点击、输入、导航、提取可见数据 → DOM操作路径
├─ 查找或重放站点API → 网络操作路径
├─ 分析、反混淆或沙箱运行页面JavaScript → 脚本分析
├─ Canvas、WebGL或难以定位的UI → 计算机交互
├─ 处理多个标签页或弹窗 → 标签页管理
├─ 设置浏览器配置文件、克隆或挂载已有浏览器 → 浏览器会话
├─ 在云端运行浏览器 → 云端模式
├─ 查看无头浏览器的运行状态 → 本地视图
└─ 不确定 → 从捕获网络流量开始

DOM Path

DOM操作路径

Use this when the goal is clicking, typing, navigating, or extracting visible data.
当目标是点击、输入、导航或提取可见数据时使用该路径。

CLI exploration

CLI探查

bash
opensteer open https://example.com --workspace demo
opensteer snapshot action --workspace demo
opensteer input 5 "laptop" --workspace demo --press-enter --persist "search input"
opensteer click 7 --workspace demo --persist "search button"
opensteer snapshot extraction --workspace demo
opensteer extract '{"items":[{"name":{"element":13},"price":{"element":14}}]}' \
  --workspace demo \
  --persist "search results"
Element numbers come from
c="N"
markers in the snapshot HTML.
bash
opensteer open https://example.com --workspace demo
opensteer snapshot action --workspace demo
opensteer input 5 "laptop" --workspace demo --press-enter --persist "search input"
opensteer click 7 --workspace demo --persist "search button"
opensteer snapshot extraction --workspace demo
opensteer extract '{"items":[{"name":{"element":13},"price":{"element":14}}]}' \
  --workspace demo \
  --persist "search results"
元素编号来自快照HTML中的
c="N"
标记。

SDK implementation

SDK实现

ts
import { Opensteer } from "opensteer";

const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });

await opensteer.open("https://example.com");
await opensteer.input({ persist: "search input", text: "laptop", pressEnter: true });
await opensteer.click({ persist: "search button" });
const data = await opensteer.extract({ persist: "search results" });
Use
selector
in SDK code only when a stable CSS selector is cleaner than
persist
.
ts
import { Opensteer } from "opensteer";

const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });

await opensteer.open("https://example.com");
await opensteer.input({ persist: "search input", text: "laptop", pressEnter: true });
await opensteer.click({ persist: "search button" });
const data = await opensteer.extract({ persist: "search results" });
仅当稳定的CSS选择器比
persist
更简洁时,才在SDK代码中使用
selector

Network Path

网络操作路径

Use this when the goal is to find or replay a site API.
当目标是查找或重放站点API时使用该路径。

CLI exploration

CLI探查

bash
opensteer open https://example.com --workspace demo
opensteer goto https://example.com/search --workspace demo --capture-network page-load
opensteer input 5 "laptop" --workspace demo --press-enter --capture-network search
opensteer network query --workspace demo --capture search --json
opensteer network detail rec_123 --workspace demo --probe
Use
network detail --probe
to learn which transport works.
bash
opensteer open https://example.com --workspace demo
opensteer goto https://example.com/search --workspace demo --capture-network page-load
opensteer input 5 "laptop" --workspace demo --press-enter --capture-network search
opensteer network query --workspace demo --capture search --json
opensteer network detail rec_123 --workspace demo --probe
使用
network detail --probe
可以确认哪种传输方式可用。

Session state checks

会话状态检查

bash
opensteer state example.com --workspace demo
ts
const cookies = await opensteer.cookies("example.com");
const localStorage = await opensteer.storage("example.com", "local");
const sessionStorage = await opensteer.storage("example.com", "session");
const state = await opensteer.state("example.com");
bash
opensteer state example.com --workspace demo
ts
const cookies = await opensteer.cookies("example.com");
const localStorage = await opensteer.storage("example.com", "local");
const sessionStorage = await opensteer.storage("example.com", "session");
const state = await opensteer.state("example.com");

Prove the request with
exec

使用
exec
验证请求

bash
opensteer exec "
  const response = await this.fetch('https://api.example.com/search', {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({ keyword: 'laptop', count: 24 }),
  });
  return { status: response.status, data: await response.json() };
" --workspace demo
bash
opensteer exec "
  const response = await this.fetch('https://api.example.com/search', {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({ keyword: 'laptop', count: 24 }),
  });
  return { status: response.status, data: await response.json() };
" --workspace demo

SDK implementation

SDK实现

ts
import { Opensteer } from "opensteer";

const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });

export async function search(keyword: string) {
  const response = await opensteer.fetch("https://api.example.com/search", {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ keyword, count: 24 }),
  });
  return response.json();
}
Use ordinary
fetch()
syntax. Only set
transport
explicitly if probing showed you need it.
ts
import { Opensteer } from "opensteer";

const opensteer = new Opensteer({ workspace: "demo", rootDir: process.cwd() });

export async function search(keyword: string) {
  const response = await opensteer.fetch("https://api.example.com/search", {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ keyword, count: 24 }),
  });
  return response.json();
}
使用普通的
fetch()
语法即可,仅当探测表明需要显式设置时才指定
transport
参数。

Scripts Analysis

脚本分析

Use this when you need to understand what JavaScript a page is running — reverse-engineering obfuscated code, finding hidden API calls, or testing script behavior in isolation.
当你需要了解页面运行的JavaScript逻辑——逆向分析混淆代码、查找隐藏的API调用,或者在隔离环境中测试脚本行为时使用该路径。

Capture scripts from the page

从页面捕获脚本

bash
opensteer scripts capture --workspace demo
opensteer scripts capture --workspace demo --url-filter "api" --external --dynamic
Flags:
--inline
,
--external
,
--dynamic
,
--workers
to filter by source type.
--persist
to save as an artifact.
--url-filter <pattern>
to match script URLs.
bash
opensteer scripts capture --workspace demo
opensteer scripts capture --workspace demo --url-filter "api" --external --dynamic
参数说明:
--inline
--external
--dynamic
--workers
用于按来源类型过滤;
--persist
用于将脚本保存为制品;
--url-filter <pattern>
用于匹配脚本URL。

Beautify and deobfuscate

格式化与反混淆

bash
undefined
bash
undefined

Format minified code

格式化压缩后的代码

opensteer scripts beautify <artifactId> --workspace demo --persist
opensteer scripts beautify <artifactId> --workspace demo --persist

Deobfuscate packed/obfuscated code

反混淆打包/混淆后的代码

opensteer scripts deobfuscate <artifactId> --workspace demo --persist
undefined
opensteer scripts deobfuscate <artifactId> --workspace demo --persist
undefined

Sandbox execution

沙箱执行

Run captured JavaScript in isolation with controlled inputs:
bash
opensteer scripts sandbox <artifactId> --workspace demo \
  --fidelity standard \
  --timeout 5000 \
  --cookies '{"session":"abc123"}' \
  --globals '{"window.API_KEY":"test"}' \
  --ajax-routes '[{"url":"*/api/*","response":{"data":[]}}]'
Fidelity levels:
minimal
(fast, no DOM),
standard
(basic DOM),
full
(complete browser emulation).
在隔离环境中运行捕获的JavaScript,可控制输入参数:
bash
opensteer scripts sandbox <artifactId> --workspace demo \
  --fidelity standard \
  --timeout 5000 \
  --cookies '{"session":"abc123"}' \
  --globals '{"window.API_KEY":"test"}' \
  --ajax-routes '[{"url":"*/api/*","response":{"data":[]}}]'
保真度级别:
minimal
(速度快,无DOM模拟)、
standard
(基础DOM模拟)、
full
(完整浏览器模拟)。

Typical workflow

典型工作流程

bash
opensteer scripts capture --workspace demo --persist --external
opensteer artifact read art_abc123 --workspace demo          # inspect raw
opensteer scripts beautify art_abc123 --workspace demo --persist
opensteer scripts deobfuscate art_def456 --workspace demo --persist
opensteer scripts sandbox art_ghi789 --workspace demo
bash
opensteer scripts capture --workspace demo --persist --external
opensteer artifact read art_abc123 --workspace demo          # 查看原始代码
opensteer scripts beautify art_abc123 --workspace demo --persist
opensteer scripts deobfuscate art_def456 --workspace demo --persist
opensteer scripts sandbox art_ghi789 --workspace demo

Computer-Use

计算机交互

Use this only when DOM targeting is not enough.
bash
opensteer computer click 245 380 --workspace demo --capture-network action
opensteer computer type "search query" --workspace demo
opensteer computer key Enter --workspace demo
opensteer computer screenshot --workspace demo
ts
await opensteer.computerExecute({
  action: { type: "click", x: 245, y: 380 },
});
After coordinate-based actions, switch back to normal extraction or request analysis as soon as possible.
仅当DOM定位无法满足需求时使用该功能。
bash
opensteer computer click 245 380 --workspace demo --capture-network action
opensteer computer type "search query" --workspace demo
opensteer computer key Enter --workspace demo
opensteer computer screenshot --workspace demo
ts
await opensteer.computerExecute({
  action: { type: "click", x: 245, y: 380 },
});
完成基于坐标的操作后,尽快切换回常规的提取或请求分析流程。

Tab Management

标签页管理

Use when handling OAuth popups, multi-page flows, or any task that opens new tabs.
bash
opensteer tab list --workspace demo              # List all open tabs
opensteer tab new https://example.com --workspace demo   # Open new tab
opensteer tab 2 --workspace demo                 # Switch to tab 2
opensteer tab close 3 --workspace demo           # Close tab 3
opensteer tab close --workspace demo             # Close current tab
ts
const tabs = await opensteer.listPages();
await opensteer.newPage("https://example.com");
await opensteer.activatePage(2);
await opensteer.closePage(3);
Re-snapshot after switching tabs — element numbers are per-page.
处理OAuth弹窗、多页面流程或任何会打开新标签页的任务时使用该功能。
bash
opensteer tab list --workspace demo              # 列出所有打开的标签页
opensteer tab new https://example.com --workspace demo   # 打开新标签页
opensteer tab 2 --workspace demo                 # 切换到标签页2
opensteer tab close 3 --workspace demo           # 关闭标签页3
opensteer tab close --workspace demo             # 关闭当前标签页
ts
const tabs = await opensteer.listPages();
await opensteer.newPage("https://example.com");
await opensteer.activatePage(2);
await opensteer.closePage(3);
切换标签页后需要重新生成快照——元素编号是按页面独立计算的。

Browser Sessions

浏览器会话

Each workspace has one browser. Three modes:
ModeWhat it doesData persists?
Persistent (default)Browser tied to workspace, survives restartsYes — cookies, localStorage, logins, history, extensions all retained
TemporaryHeadless browser in
/tmp
, cleaned up on close
No
AttachConnects to an already-running browser via CDPDepends on that browser
每个工作空间对应一个浏览器,共三种模式:
模式功能说明数据持久化?
持久化(默认)浏览器与工作空间绑定,重启后仍可使用是——Cookies、localStorage、登录状态、历史记录、扩展程序全部保留
临时无头浏览器运行在
/tmp
目录,关闭后自动清理
挂载通过CDP连接到已运行的浏览器取决于被挂载的浏览器设置

Headless vs headed

无头模式与有头模式

Browsers launch headless by default. Use
--headless false
to see the browser window:
bash
opensteer open https://example.com --workspace demo --headless false
Use headed mode for debugging or when the user wants to watch. For hands-free automation, keep headless and use
opensteer view
if a human needs to observe.
浏览器默认以无头模式启动,使用
--headless false
可以显示浏览器窗口:
bash
opensteer open https://example.com --workspace demo --headless false
调试或用户需要查看运行过程时使用有头模式。对于自动化运行场景,保持无头模式即可,需要人工查看时可使用
opensteer view

Persistent sessions

持久化会话

When you
opensteer open
with a workspace, the browser's full Chrome user-data directory lives at
~/.opensteer/workspaces/<id>/browser/user-data/
. Everything Chrome normally persists (cookies, localStorage, IndexedDB, history, extensions) survives between runs.
Re-running
opensteer open --workspace demo
reconnects to the existing browser if it's still alive, or launches a fresh one with the same profile if it died.
当你指定工作空间执行
opensteer open
时,浏览器的完整Chrome用户数据目录存储在
~/.opensteer/workspaces/<id>/browser/user-data/
路径下。Chrome默认持久化的所有内容(Cookies、localStorage、IndexedDB、历史记录、扩展程序)都会在多次运行间保留。
重新执行
opensteer open --workspace demo
时,如果原有浏览器仍在运行会直接重连,如果已关闭会使用相同的配置文件启动新的浏览器实例。

Profile cloning

配置文件克隆

Clone a real user's Chrome profile to start a workspace with their logins already active:
bash
undefined
克隆真实用户的Chrome配置文件,即可直接使用用户已有的登录状态启动工作空间:
bash
undefined

Discover available local browsers and profiles

查找可用的本地浏览器和配置文件

opensteer browser discover
opensteer browser discover

Clone a profile into a workspace

将配置文件克隆到工作空间

opensteer browser clone --workspace demo
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome"
--source-profile-directory Default

This copies cookies, localStorage, extensions, and settings from the source browser. Caches and lock files are skipped. The source browser does not need to be closed — cloning while running is safe.
opensteer browser clone --workspace demo
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome"
--source-profile-directory Default

该操作会从源浏览器复制Cookies、localStorage、扩展程序和设置,跳过缓存和锁文件。源浏览器不需要关闭,运行时克隆也是安全的。

Attach to an existing browser

挂载已有浏览器

bash
opensteer open https://example.com --workspace demo --attach-endpoint http://localhost:9222
bash
opensteer open https://example.com --workspace demo --attach-endpoint http://localhost:9222

Workspace lifecycle

工作空间生命周期

bash
opensteer browser status --workspace demo    # Check if browser is running
opensteer browser reset --workspace demo     # Wipe browser data, keep workspace
opensteer browser delete --workspace demo    # Delete workspace entirely
bash
opensteer browser status --workspace demo    # 检查浏览器是否运行
opensteer browser reset --workspace demo     # 清空浏览器数据,保留工作空间
opensteer browser delete --workspace demo    # 完全删除工作空间

Cloud Mode

云端模式

Run the browser on Opensteer's cloud infrastructure instead of locally. Use cloud mode when you need browsers that run 24/7, or when the local machine should not run Chromium.
在Opensteer的云端基础设施上运行浏览器,而非本地运行。当需要7*24小时运行浏览器,或者本地设备不适合运行Chromium时可以使用云端模式。

Setup

配置

bash
export OPENSTEER_API_KEY=osk_your_key_here    # Required
export OPENSTEER_PROVIDER=cloud               # Or use --provider cloud per command
bash
export OPENSTEER_API_KEY=osk_your_key_here    # 必填
export OPENSTEER_PROVIDER=cloud               # 也可以在每条命令单独加--provider cloud参数

Usage

使用

All CLI commands work the same with
--provider cloud
:
bash
opensteer open https://example.com --workspace demo --provider cloud
opensteer snapshot action --workspace demo
opensteer click 5 --workspace demo
所有CLI命令加
--provider cloud
参数即可正常使用:
bash
opensteer open https://example.com --workspace demo --provider cloud
opensteer snapshot action --workspace demo
opensteer click 5 --workspace demo

Export local browser profile to cloud

导出本地浏览器配置到云端

Sync a local browser's cookies to a cloud browser profile so the cloud session starts logged in:
bash
undefined
将本地浏览器的Cookies同步到云端浏览器配置,云端会话启动时就已经是登录状态:
bash
undefined

Reads cookies from local Chrome, decrypts them, uploads to cloud

从本地Chrome读取Cookies,解密后上传到云端

opensteer browser clone --workspace demo
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome"
--source-profile-directory Default
--provider cloud

The cookies are extracted from the local SQLite database, decrypted, packaged into a portable format, and uploaded. The cloud browser then starts with those cookies applied.
opensteer browser clone --workspace demo
--source-user-data-dir "$HOME/Library/Application Support/Google/Chrome"
--source-profile-directory Default
--provider cloud

Cookies会从本地SQLite数据库中提取、解密、打包为可移植格式后上传,云端浏览器启动时会自动应用这些Cookies。

Local View

本地视图

When Opensteer runs headless, a human cannot see what the browser is doing. Local view streams live screenshots from headless sessions to a browser-based viewer.
bash
opensteer view                   # Start viewer service, print URL
opensteer view stop              # Stop the viewer service
opensteer view --auto            # Auto-start viewer on every browser launch
opensteer view --no-auto         # Only start viewer when manually requested
The viewer is a local web UI that shows:
  • Live JPEG stream of the active browser tab
  • Tab bar with switching
  • Navigation controls (back, forward, reload, URL bar)
Local view is a passive observer — it connects to the browser's existing CDP endpoint. Starting or stopping it has zero impact on running browser sessions.
当Opensteer以无头模式运行时,人工无法查看浏览器的操作内容。本地视图可以将无头会话的实时截图流传输到基于浏览器的查看器中。
bash
opensteer view                   # 启动查看器服务,打印访问URL
opensteer view stop              # 停止查看器服务
opensteer view --auto            # 每次浏览器启动时自动启动查看器
opensteer view --no-auto         # 仅手动请求时启动查看器
查看器是本地Web UI,包含以下功能:
  • 活跃浏览器标签页的JPEG实时流
  • 可切换的标签栏
  • 导航控件(后退、前进、刷新、地址栏)
本地视图是被动观察者,它连接到浏览器已有的CDP端点,启动或停止对运行中的浏览器会话没有任何影响。

Interaction Capture & Replay

交互捕获与重放

Record a trace of browser interactions (clicks, typing, network, DOM changes) and replay them deterministically. Useful for building repeatable test flows or comparing behavior across runs.
bash
opensteer interaction capture --workspace demo --key "login-flow" --duration 30000
opensteer interaction get <traceId> --workspace demo
opensteer interaction replay <traceId> --workspace demo
opensteer interaction diff <traceA> <traceB> --workspace demo
录制浏览器交互的追踪数据(点击、输入、网络请求、DOM变更),并可确定性重放。适用于构建可复用的测试流程,或者对比不同运行的行为差异。
bash
opensteer interaction capture --workspace demo --key "login-flow" --duration 30000
opensteer interaction get <traceId> --workspace demo
opensteer interaction replay <traceId> --workspace demo
opensteer interaction diff <traceA> <traceB> --workspace demo

Artifacts

制品

Commands that use
--persist
save artifacts to the workspace. Read them back with:
bash
opensteer artifact read <artifactId> --workspace demo
Artifacts are created by
extract --persist
,
scripts capture --persist
,
scripts beautify --persist
, and other persist-enabled commands.
使用
--persist
参数的命令会将制品保存到工作空间中,可通过以下命令读取:
bash
opensteer artifact read <artifactId> --workspace demo
制品可由
extract --persist
scripts capture --persist
scripts beautify --persist
以及其他支持persist参数的命令生成。

Useful SDK Surface

常用SDK接口

  • open(url)
    ,
    goto(url, { captureNetwork? })
    ,
    close()
  • snapshot("action" | "extraction")
  • click()
    ,
    hover()
    ,
    input()
    ,
    scroll()
  • extract()
  • listPages()
    ,
    newPage()
    ,
    activatePage()
    ,
    closePage()
  • network.query()
    ,
    network.detail()
  • waitForPage()
  • cookies()
    ,
    storage()
    ,
    state()
  • fetch()
  • evaluate()
    ,
    addInitScript()
  • route()
    — intercept and modify network requests
  • computerExecute()
  • browser.status()
    ,
    browser.clone()
    ,
    browser.reset()
    ,
    browser.delete()
  • open(url)
    goto(url, { captureNetwork? })
    close()
  • snapshot("action" | "extraction")
  • click()
    hover()
    input()
    scroll()
  • extract()
  • listPages()
    newPage()
    activatePage()
    closePage()
  • network.query()
    network.detail()
  • waitForPage()
  • cookies()
    storage()
    state()
  • fetch()
  • evaluate()
    addInitScript()
  • route()
    —— 拦截和修改网络请求
  • computerExecute()
  • browser.status()
    browser.clone()
    browser.reset()
    browser.delete()

Guardrails

使用规范

  • Snapshot before using element numbers. Snapshot again after UI changes.
  • Do not use
    evaluate
    for API work — use
    exec
    or
    fetch
    .
  • Do not keep the result as a manual-only workflow if the user needs reusable automation.
  • Prefer a small final script over a large framework.
  • Close browsers when done. Do not leave headed browser windows open.
  • When cloning profiles, verify the source path exists with
    opensteer browser discover
    first.
  • 使用元素编号前先生成快照,UI变更后需要重新生成快照。
  • 不要使用
    evaluate
    处理API相关工作,使用
    exec
    fetch
  • 如果用户需要可复用的自动化能力,不要只提供手动操作流程。
  • 优先编写小巧的最终脚本,不要引入庞大的框架。
  • 使用完毕后关闭浏览器,不要保持有头浏览器窗口运行。
  • 克隆配置文件前,先使用
    opensteer browser discover
    验证源路径存在。