BrowserViewer
BrowserViewer 類別為 CLI 型 Tool 提供瀏覽器自動化。它會透過 Playwright 啟動 Chrome,公開 Chrome DevTools Protocol(CDP)URL,並自動將其注入透過 Workspace Tool 執行的 CLI 指令。
當 Agent 透過 browser-use、agent-browser 或 browse 等 CLI Tool 操作瀏覽器時,請使用 BrowserViewer。以 SDK 為基礎的瀏覽器自動化請使用 AgentBrowser 或 StagehandBrowser。
使用範例「使用範例」的直接連結
import { Workspace, LocalSandbox } from '@mastra/core/workspace'
import { Memory } from '@mastra/memory'
import { BrowserViewer } from '@mastra/browser-viewer'
import { Agent } from '@mastra/core/agent'
const workspace = new Workspace({
sandbox: new LocalSandbox({
workingDirectory: './workspace',
}),
browser: new BrowserViewer({
cli: 'browser-use',
headless: false,
}),
})
const browserAgent = new Agent({
id: 'browser-agent',
model: 'openai/gpt-5.6-sol',
workspace,
instructions: 'You are a web automation assistant.',
memory: new Memory(),
})
連線至現有瀏覽器「連線至現有瀏覽器」的直接連結
const viewer = new BrowserViewer({
cli: 'browser-use',
cdpUrl: 'ws://127.0.0.1:9222/devtools/browser/abc123',
})
提供 cdpUrl 時,BrowserViewer 會連線至現有瀏覽器,而不是啟動新瀏覽器。scope 預設為 'shared'。
Constructor 參數「Constructor 參數」的直接連結
cli:
headless?:
cdpUrl?:
cdpPort?:
scope?:
viewport?:
executablePath?:
onLaunch?:
onClose?:
screencast?:
屬性「屬性」的直接連結
id:
name:
provider:
providerType:
cli:
status:
方法「方法」的直接連結
生命週期「生命週期」的直接連結
launch(threadId?)「launchthreadid」的直接連結
啟動 Chrome。使用 'shared' scope 時會啟動單一共用瀏覽器;使用 'thread' scope 時,會為指定 thread 啟動瀏覽器。
await viewer.launch()
await viewer.launch('thread-123')
ensureReady()「ensureready」的直接連結
確保瀏覽器已啟動並準備就緒。使用 'thread' scope 時,會視需要為目前 thread 建立新瀏覽器。
await viewer.ensureReady()
isBrowserRunning(threadId?)「isbrowserrunningthreadid」的直接連結
檢查瀏覽器是否正在執行。使用 'thread' scope 時,會檢查指定 thread。
const running = viewer.isBrowserRunning()
const threadRunning = viewer.isBrowserRunning('thread-123')
傳回:boolean
close()「close」的直接連結
關閉所有瀏覽器 instance 並清理資源。
await viewer.close()
CDP 存取「CDP 存取」的直接連結
getCdpUrl(threadId?)「getcdpurlthreadid」的直接連結
傳回目前或指定 thread 的 CDP WebSocket URL。CLI Tool 使用此 URL 連線至受管理的瀏覽器。
const cdpUrl = viewer.getCdpUrl()
// => 'ws://127.0.0.1:52481/devtools/browser/abc...'
傳回:string | null
connectToExternalCdp(cdpUrl, threadId?)「connecttoexternalcdpcdpurl-threadid」的直接連結
透過 CDP URL 連線至外部瀏覽器,以進行 screencast。Agent 提供自己的瀏覽器 endpoint(例如雲端瀏覽器服務)時請使用此方法。BrowserViewer 會連線以進行 screencast,但不管理瀏覽器生命週期。
await viewer.connectToExternalCdp('wss://cloud.example.com/session', 'thread-123')
Screencast「Screencast」的直接連結
startScreencast(options?)「startscreencastoptions」的直接連結
開始串流瀏覽器 frame。傳回會發出 frame event 的 ScreencastStream。分頁切換時會建立新的 CDP session,自動處理切換。
const stream = await viewer.startScreencast({
format: 'jpeg',
quality: 80,
})
stream.on('frame', frame => {
console.log('Frame received:', frame.data.length, 'bytes')
})
stream.on('stop', reason => {
console.log('Screencast stopped:', reason)
})
傳回:Promise<ScreencastStream>
輸入 injection「輸入 injection」的直接連結
injectMouseEvent(params, threadId?)「injectmouseeventparams-threadid」的直接連結
透過 CDP 將滑鼠 event 注入瀏覽器。Studio 使用此方法進行即時互動。
await viewer.injectMouseEvent({
type: 'mousePressed',
x: 100,
y: 200,
button: 'left',
clickCount: 1,
})
injectKeyboardEvent(params, threadId?)「injectkeyboardeventparams-threadid」的直接連結
透過 CDP 將鍵盤 event 注入瀏覽器。Studio 使用此方法進行即時互動。
await viewer.injectKeyboardEvent({
type: 'keyDown',
key: 'Enter',
code: 'Enter',
})
支援的 CLI「支援的 CLI」的直接連結
每個 CLI 都必須分別安裝,也都會發布 Skill,教導 Agent 使用其指令與 Workflow。CLI 指令透過 workspace_execute_command 執行時,Mastra 會偵測並使用正確的 flag,自動注入 CDP URL。
與 SDK Provider 不同,BrowserViewer 不提供 Agent Tool。Agent 會改用透過 workspace_execute_command 執行的 CLI 指令。
agent-browser「agent-browser」的直接連結
設定值:'agent-browser' · CDP flag:--cdp
npm install -g agent-browser
npx skills add vercel-labs/agent-browser
browser-use「browser-use」的直接連結
設定值:'browser-use' · CDP flag:--cdp-url
pip install browser-use
npx skills add browser-use/browser-use --skill browser-use
browse(指令:browse)「browse-command-browse」的直接連結
設定值:'browse' · CDP flag:--ws
npm install -g browse
browse skills install
相關內容「相關內容」的直接連結
- BrowserViewer 指南:設定與使用教學
- MastraBrowser:基底類別 API 參考文件
- Workspace 概觀:Workspace 設定