Playwright MCP

官方

官方 Playwright MCP 伺服器,用於瀏覽器自動化、頁面檢查、螢幕截圖,以及來自 Claude、Cursor 和其他 AI 代理的網頁互動。

你可以用 Playwright MCP 做什麼?

  • 透過無障礙快照進行瀏覽器自動化 — 讓您的 AI 使用結構化的無障礙資料來導覽頁面並與元素互動,無需螢幕截圖。
  • 持久化瀏覽工作階段 — 透過持久化設定檔在對話之間維持登入狀態,或使用隔離工作階段進行乾淨的測試。
  • 多瀏覽器支援 — 在 Chromium、Firefox 或 WebKit 中自動化任務,並提供無頭模式與裝置模擬選項。
  • 自訂瀏覽器設定 — 設定視窗大小、使用者代理、代理伺服器設定與權限,以符合您的測試需求。
  • 瀏覽器擴充功能整合 — 連線至您現有的 Chrome 或 Edge 瀏覽器,以利用目前的索引標籤與已登入的工作階段。

文件

Playwright MCP

一個使用 Playwright 提供瀏覽器自動化能力的 Model Context Protocol (MCP) 伺服器。此伺服器讓 LLM 能透過結構化的無障礙快照與網頁互動,無需依賴螢幕截圖或視覺調校模型。

Playwright MCP 與 Playwright CLI 的比較

此套件提供 MCP 介面來操作 Playwright。如果您使用的是程式碼代理(coding agent),您可能會更適合使用 CLI+SKILLS。

  • CLI:現代的程式碼代理越來越傾向使用以 CLI 為基礎、以 SKILL 形式暴露的工作流程,而非 MCP,因為 CLI 呼叫更具 token 效率:它避免了將大型工具結構和冗長的無障礙樹載入模型上下文,讓代理可以透過簡潔、目的明確的命令來行動。這使得 CLI + SKILLs 更適合需要在高吞吐量的程式碼代理中,於有限的上下文視窗內平衡瀏覽器自動化與大型程式碼庫、測試和推理的需求。
    深入瞭解 Playwright CLI with SKILLS。

  • MCP:MCP 仍然適用於特定的代理循環,這些循環受益於持久狀態、豐富的內省以及對頁面結構的迭代推理,例如探索性自動化、自我修復測試,或需要持續維持瀏覽器上下文、且其成本高於 token 消耗的長期自主工作流程。

主要特色

  • 快速且輕量。使用 Playwright 的無障礙樹,而非基於像素的輸入。
  • 對 LLM 友善。不需要視覺模型,純粹基於結構化資料運作。
  • 確定性的工具應用。避免了基於螢幕截圖方法常見的模糊性。

需求

  • Node.js 18 或更新版本
  • VS Code、Cursor、Windsurf、Claude Desktop、Goose、Grok、Junie 或任何其他 MCP 用戶端

開始使用

首先,請在您的用戶端安裝 Playwright MCP 伺服器。

標準設定適用於大多數工具:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Install in VS Code Install in VS Code Insiders

Amp

透過 Amp VS Code 擴充功能的設定畫面或更新您的 settings.json 檔案來新增:

"amp.mcpServers": {
  "playwright": {
    "command": "npx",
    "args": [
      "@playwright/mcp@latest"
    ]
  }
}

Amp CLI 設定:

透過下方的 amp mcp add 命令新增

amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity

透過 Antigravity 設定或更新您的設定檔來新增:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
Claude Code

使用 Claude Code CLI 新增 Playwright MCP 伺服器:

claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop

請遵循 MCP 安裝指南,使用上述標準設定。

Cline

請遵循設定 MCP 伺服器一節中的說明。

範例:本機設定

將以下內容新增至您的 cline_mcp_settings.json 檔案:

{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "timeout": 30,
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ],
      "disabled": false
    }
  }
}
Codex

使用 Codex CLI 新增 Playwright MCP 伺服器:

codex mcp add playwright npx "@playwright/mcp@latest"

或者,建立或編輯設定檔 ~/.codex/config.toml 並新增:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

如需更多資訊,請參閱 Codex MCP 文件。

Copilot

使用 Copilot CLI 以互動方式新增 Playwright MCP 伺服器:

/mcp add

或者,建立或編輯設定檔 ~/.copilot/mcp-config.json 並新增:

{
  "mcpServers": {
    "playwright": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

如需更多資訊,請參閱 Copilot CLI 文件。

Cursor

點擊按鈕安裝:

Install in Cursor

或手動安裝:

前往 Cursor Settings -> MCP -> Add new MCP Server。隨意命名,使用 command 類型搭配命令 npx @playwright/mcp@latest。您也可以透過點擊 Edit 來驗證設定或新增命令參數。

Factory

使用 Factory CLI 新增 Playwright MCP 伺服器:

droid mcp add playwright "npx @playwright/mcp@latest"

或者,在 Factory droid 中輸入 /mcp 以開啟管理 MCP 伺服器的互動式 UI。

如需更多資訊,請參閱 Factory MCP 文件。

Gemini CLI

請遵循 MCP 安裝指南,使用上述標準設定。

Goose

點擊按鈕安裝:

Install in Goose

或手動安裝:

前往 Advanced settings -> Extensions -> Add custom extension。隨意命名,使用 STDIO 類型,並將 command 設定為 npx @playwright/mcp。點擊「新增擴充功能」。

Grok

使用 Grok CLI 新增 Playwright MCP 伺服器:

grok mcp add playwright -- npx @playwright/mcp@latest

或者,建立或編輯設定檔 ~/.grok/config.toml 並新增:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

如需更多資訊,請參閱 Grok MCP 文件。

Junie

在 Junie CLI 中新增 Playwright MCP 伺服器:

  1. 輸入 /mcp
  2. 按下 Ctrl+A 以新增 MCP 伺服器
  3. 從清單中選擇 Playwright

或者,新增至 .junie/mcp/mcp.json:

{
  "mcpServers": {
    "Playwright": {
      "command": "npx",
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ]
    }
  }
}

如需更多資訊,請參閱 Junie MCP 設定文件。

Kiro

Add to Kiro

請遵循 MCP 伺服器文件。例如在 .kiro/settings/mcp.json 中:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
LM Studio

點擊按鈕安裝:

Add MCP Server playwright to LM Studio

或手動安裝:

前往右側邊欄的 Program -> Install -> Edit mcp.json。使用上述標準設定。

opencode

請遵循 MCP 伺服器文件。例如在 ~/.config/opencode/opencode.json 中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

Qodo Gen

在 VSCode 或 IntelliJ 中開啟 Qodo Gen 聊天面板 → 連線更多工具 → + 新增 MCP → 貼上上述標準設定。

點擊 儲存。

VS Code

點擊按鈕安裝:

Install in VS Code Install in VS Code Insiders

或手動安裝:

請遵循 MCP 安裝指南,使用上述標準設定。您也可以使用 VS Code CLI 安裝 Playwright MCP 伺服器:

# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

安裝完成後,Playwright MCP 伺服器即可與您在 VS Code 中的 GitHub Copilot 代理搭配使用。

Warp

前往 Settings -> AI -> Manage MCP Servers -> + Add 以新增 MCP 伺服器。使用上述標準設定。

或者,在 Warp 提示字元中使用斜線命令 /add-mcp,並貼上上述標準設定:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
Windsurf

請遵循 Windsurf MCP 文件。使用上述標準設定。

設定

Playwright MCP 伺服器支援以下參數。它們可以在上述 JSON 設定中提供,作為 "args" 清單的一部分:

選項說明
--allowed-hosts <hosts...>以逗號分隔的主機清單,允許此伺服器從這些主機提供服務。預設為伺服器所綁定的主機。傳入 '*' 可停用主機檢查。
env PLAYWRIGHT_MCP_ALLOWED_HOSTS
--allowed-origins 以分號分隔的受信任來源清單,允許瀏覽器向這些來源發出請求。預設允許所有來源。重要事項:不作為安全邊界,且不影響重新導向。
env PLAYWRIGHT_MCP_ALLOWED_ORIGINS
--allow-unrestricted-file-access允許存取工作區根目錄以外的檔案。同時允許不受限制地存取 file:// URL。預設情況下,檔案系統的存取僅限於工作區根目錄(若未設定根目錄則為目前工作目錄),且會封鎖對 file:// URL 的導覽。
env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
--blocked-origins 以分號分隔的來源清單,封鎖瀏覽器向這些來源發出請求。封鎖清單會先於允許清單評估。若未搭配允許清單使用,不符合封鎖清單的請求仍會被允許。重要事項:不作為安全邊界,且不影響重新導向。
env PLAYWRIGHT_MCP_BLOCKED_ORIGINS
--block-service-workers封鎖 service workers
env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS
--browser 要使用的瀏覽器或 chrome 通道,可能的值:chrome、firefox、webkit、msedge。
env PLAYWRIGHT_MCP_BROWSER
--caps 以逗號分隔的額外功能清單,可能的值:vision、pdf、devtools。
env PLAYWRIGHT_MCP_CAPS
--cdp-endpoint 要連線的 CDP 端點。
env PLAYWRIGHT_MCP_CDP_ENDPOINT
--cdp-header <headers...>連線請求時要傳送的 CDP 標頭,可指定多個。
env PLAYWRIGHT_MCP_CDP_HEADERS
--cdp-timeout 連線至 CDP 端點的超時時間(毫秒),預設為 30000 毫秒
env PLAYWRIGHT_MCP_CDP_TIMEOUT
--codegen 指定程式碼產生所使用的語言,可能的值:"typescript"、"python"、"java"、"csharp"、"none"。預設為 "typescript"。
env PLAYWRIGHT_MCP_CODEGEN
--config 設定檔的路徑。
env PLAYWRIGHT_MCP_CONFIG
--console-level 要回傳的主控台訊息層級:"error"、"warning"、"info"、"debug"。每個層級包含更嚴重層級的訊息。
env PLAYWRIGHT_MCP_CONSOLE_LEVEL
--device 要模擬的裝置,例如:"iPhone 15"
env PLAYWRIGHT_MCP_DEVICE
--mobile模擬通用行動裝置(Chromium 為 Pixel 10,WebKit 為 iPhone 17)。行動頁面通常較輕量,可節省 tokens。無法與 --device 搭配使用。
env PLAYWRIGHT_MCP_MOBILE
--executable-path 瀏覽器可執行檔的路徑。
env PLAYWRIGHT_MCP_EXECUTABLE_PATH
--extension連線至正在執行的瀏覽器實例(僅限 Edge/Chrome)。需要安裝 "Playwright Extension"。
env PLAYWRIGHT_MCP_EXTENSION
--endpoint 要連線的已綁定瀏覽器端點。
env PLAYWRIGHT_MCP_ENDPOINT
--file-paths 檔案路徑在工具結果中的呈現方式,"relative"(相對於工作區根目錄)或 "absolute"(絕對路徑)。預設為 "relative"。
env PLAYWRIGHT_MCP_FILE_PATHS
--grant-permissions <permissions...>要授予瀏覽器內容的權限清單,例如 "geolocation"、"clipboard-read"、"clipboard-write"。
env PLAYWRIGHT_MCP_GRANT_PERMISSIONS
--headless以無頭模式執行瀏覽器,預設為有頭模式
env PLAYWRIGHT_MCP_HEADLESS
--host 伺服器要綁定的主機。預設為 localhost。使用 0.0.0.0 可綁定至所有介面。
env PLAYWRIGHT_MCP_HOST
--idle-timeout 在沒有完成工具呼叫的情況下,經過此毫秒數後關閉瀏覽器,下一次工具呼叫會重新啟動它。無頭瀏覽器預設為一小時,有頭瀏覽器永不關閉,設為 0 可停用。
env PLAYWRIGHT_MCP_IDLE_TIMEOUT
--ignore-https-errors忽略 https 錯誤
env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS
--init-page <path...>要在 Playwright 頁面物件上評估的 TypeScript 檔案路徑
env PLAYWRIGHT_MCP_INIT_PAGE
--init-script <path...>要作為初始化腳本加入的 JavaScript 檔案路徑。此腳本會在每個頁面的任何頁面腳本執行之前被評估。可指定多次。
env PLAYWRIGHT_MCP_INIT_SCRIPT
--isolated將瀏覽器設定檔保留在記憶體中,不儲存至磁碟。
env PLAYWRIGHT_MCP_ISOLATED
--image-responses 是否將圖片回應傳送至用戶端。可為 "allow"、"omit" 或 "only"。使用 "only" 時,包含圖片的回應僅由圖片部分組成,不含文字部分。預設為 "allow"。
env PLAYWRIGHT_MCP_IMAGE_RESPONSES
--no-sandbox對所有通常會被沙箱化的程序類型停用沙箱。
env PLAYWRIGHT_MCP_NO_SANDBOX
--no-webmcp不收集或公開頁面透過 WebMCP API 註冊的工具。
env PLAYWRIGHT_MCP_WEBMCP=false
--output-dir 自動命名輸出檔案(例如未指定明確檔案名稱的螢幕截圖)的目錄路徑。具有明確名稱的檔案則會相對於工作區根目錄解析,不受此選項影響。
env PLAYWRIGHT_MCP_OUTPUT_DIR
--output-max-size 驅逐舊輸出檔案的閾值,單位為位元組。
env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE
--port 用於 SSE 傳輸的監聽連接埠。
env PLAYWRIGHT_MCP_PORT
--profile-dir-name 使用者資料目錄中要透過 --extension 連線的設定檔目錄名稱,例如 "Profile 1"。預設為最後一個已安裝擴充功能且被使用的設定檔。
env PLAYWRIGHT_MCP_PROFILE_DIR_NAME
--proxy-bypass 以逗號分隔的代理伺服器繞過網域,例如 ".com,chromium.org,.domain.com"
env PLAYWRIGHT_MCP_PROXY_BYPASS
--proxy-server 指定代理伺服器,例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"
env PLAYWRIGHT_MCP_PROXY_SERVER
--sandbox對所有通常不會被沙箱化的程序類型啟用沙箱。
env PLAYWRIGHT_MCP_SANDBOX
--save-session是否將 Playwright MCP 工作階段儲存至輸出目錄。
env PLAYWRIGHT_MCP_SAVE_SESSION
--secrets 包含 dotenv 格式機密的檔案路徑
env PLAYWRIGHT_MCP_SECRETS_FILE
--shared-browser-context在所有已連線的 HTTP 用戶端之間重用相同的瀏覽器內容。
env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT
--snapshot-boxes在快照中包含每個元素的邊界框,格式為 [box=x,y,width,height]。座標相對於視窗,單位為 CSS 像素。
env PLAYWRIGHT_MCP_SNAPSHOT_BOXES
--snapshot-mode 為回應拍攝快照時,指定使用的模式。可為 "full" 或 "none"。預設為 "full"。
env PLAYWRIGHT_MCP_SNAPSHOT_MODE
--storage-state 隔離工作階段的儲存狀態檔案路徑。
env PLAYWRIGHT_MCP_STORAGE_STATE
--test-id-attribute 指定用於測試 ID 的屬性,預設為 "data-testid"
env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE
--timeout-action 指定動作超時時間(毫秒),預設為 5000 毫秒
env PLAYWRIGHT_MCP_TIMEOUT_ACTION
--timeout-navigation 指定導覽超時時間(毫秒),預設為 60000 毫秒
env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION
--timeout-settle 每次動作後等待觸發的工作穩定下來的時間(毫秒),預設為 500 毫秒
env PLAYWRIGHT_MCP_TIMEOUT_SETTLE
--user-agent 指定 user agent 字串
env PLAYWRIGHT_MCP_USER_AGENT
--user-data-dir 使用者資料目錄的路徑。若未指定,將建立臨時目錄。
env PLAYWRIGHT_MCP_USER_DATA_DIR
--viewport-size 指定瀏覽器視窗大小(像素),例如 "1280x720"
env PLAYWRIGHT_MCP_VIEWPORT_SIZE

使用者設定檔

您可以像一般瀏覽器一樣使用持久化設定檔執行 Playwright MCP(預設),在隔離內容中執行測試工作階段,或使用瀏覽器擴充功能連線至您現有的瀏覽器。

持久化設定檔

所有登入資訊都會儲存在持久化設定檔中,如果您想清除離線狀態,可以在工作階段之間刪除它。 持久化設定檔位於以下位置,您可以使用 --user-data-dir 參數覆寫它。

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}

{workspace-hash} 是從 MCP 用戶端的工作區根目錄推導而來,因此不同的專案會自動獲得各自的設定檔。

[!IMPORTANT] 持久化設定檔一次只能由一個瀏覽器實例使用,因此共用相同工作區的並行 MCP 用戶端會發生衝突。若要並行執行多個用戶端,請使用 --isolated 啟動每個額外的用戶端,或將其指向不同的 --user-data-dir。

隔離模式

在隔離模式中,每個工作階段都會在隔離的設定檔中啟動。每次您要求 MCP 關閉瀏覽器時, 工作階段就會關閉,且該工作階段的所有儲存狀態都會遺失。您可以透過設定的 contextOptions 或 --storage-state 參數 為瀏覽器提供初始儲存狀態。在此了解更多關於儲存狀態的資訊。

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}"
      ]
    }
  }
}

瀏覽器擴充功能

Playwright MCP Chrome 擴充功能可讓您連線至現有的瀏覽器分頁,並利用您已登入的工作階段和瀏覽器狀態。請參閱 microsoft/playwright › packages/extension 以取得安裝和設定說明。

初始狀態

有多種方式可以為瀏覽器內容或頁面提供初始狀態。

對於儲存狀態,您可以:

  • 使用 --user-data-dir 參數從使用者資料目錄啟動。這會在工作階段之間持久化所有瀏覽器資料。
  • 使用 --storage-state 參數從儲存狀態檔案啟動。這會將檔案中的 cookies 和本機儲存載入至隔離的瀏覽器內容。

對於頁面狀態,您可以使用:

  • --init-page 指向一個 TypeScript 檔案,該檔案會在 Playwright 頁面物件上被評估。這可讓您執行任意程式碼來設定頁面。
// init-page.ts
export default async ({ page }) => {
  await page.context().grantPermissions(['geolocation']);
  await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
  await page.setViewportSize({ width: 1280, height: 720 });
};
  • --init-script 指向一個 JavaScript 檔案,該檔案會作為初始化腳本加入。此腳本會在每個頁面的任何頁面腳本執行之前被評估。 這對於覆寫瀏覽器 API 或設定環境非常有用。
// init-script.js
window.isPlaywrightMCP = true;

設定檔

Playwright MCP 伺服器可以使用 JSON 設定檔進行設定。您可以使用 --config 命令列選項指定設定檔:

npx @playwright/mcp@latest --config path/to/config.json
設定檔結構描述
{
  /**
   * The browser to use.
   */
  browser?: {
    /**
     * The type of browser to use.
     */
    browserName?: 'chromium' | 'firefox' | 'webkit';

    /**
     * Keep the browser profile in memory, do not save it to disk.
     */
    isolated?: boolean;

    /**
     * Path to a user data directory for browser profile persistence.
     * Temporary directory is created by default.
     */
    userDataDir?: string;

    /**
     * Launch options passed to
     * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
     *
     * This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
     */
    launchOptions?: playwright.LaunchOptions;

    /**
     * Context options for the browser context.
     *
     * This is useful for settings options like `viewport`.
     */
    contextOptions?: playwright.BrowserContextOptions;

    /**
     * Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
     */
    cdpEndpoint?: string;

    /**
     * CDP headers to send with the connect request.
     */
    cdpHeaders?: Record<string, string>;

    /**
     * Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
     */
    cdpTimeout?: number;

    /**
     * Remote endpoint to connect to an existing Playwright server. May be a
     * WebSocket URL string, or a [ConnectOptions] object that mirrors the
     * `connectOptions` shape used by the test runner. When passed as an object,
     * `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
     * underlying connect call.
     */
    remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };

    /**
     * Paths to TypeScript files to add as initialization scripts for Playwright page.
     */
    initPage?: string[];

    /**
     * Paths to JavaScript files to add as initialization scripts.
     * The scripts will be evaluated in every page before any of the page's scripts.
     */
    initScript?: string[];
  },

  /**
   * Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
   * config is ignored.
   * Requires the "Playwright Extension" to be installed.
   */
  extension?: boolean;

  server?: {
    /**
     * The port to listen on for SSE or MCP transport.
     */
    port?: number;

    /**
     * The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
     */
    host?: string;

    /**
     * The hosts this server is allowed to serve from. Defaults to the host server is bound to.
     * This is not for CORS, but rather for the DNS rebinding protection.
     */
    allowedHosts?: string[];
  },

  /**
   * List of enabled tool capabilities. Possible values:
   *   - 'core': Core browser automation features.
   *   - 'pdf': PDF generation and manipulation.
   *   - 'vision': Coordinate-based interactions.
   *   - 'devtools': Developer tools features.
   */
  capabilities?: ToolCapability[];

  /**
   * Whether to save the Playwright session into the output directory.
   */
  saveSession?: boolean;

  /**
   * Whether to collect and expose the tools that a page registers through the
   * experimental WebMCP API. Enabled by default.
   */
  webmcp?: boolean;

  /**
   * Reuse the same browser context between all connected HTTP clients.
   */
  sharedBrowserContext?: boolean;

  /**
   * Secrets are used to replace matching plain text in the tool responses to prevent the LLM
   * from accidentally getting sensitive data. It is a convenience and not a security feature,
   * make sure to always examine information coming in and from the tool on the client.
   */
  secrets?: Record<string, string>;

  /**
   * The directory for automatically named output files, for example a screenshot taken without an
   * explicit file name. Files with an explicit name are resolved against the workspace root instead
   * and are not affected by this option.
   */
  outputDir?: string;

  /**
   * Threshold for evicting old output files, in bytes.
   */
  outputMaxSize?: number;

  console?: {
    /**
     * The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
     */
    level?: 'error' | 'warning' | 'info' | 'debug';
  },

  network?: {
    /**
     * List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    allowedOrigins?: string[];

    /**
     * List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    blockedOrigins?: string[];
  };

  /**
   * Specify the attribute to use for test ids, defaults to "data-testid".
   */
  testIdAttribute?: string;

  timeouts?: {
    /*
     * Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
     */
    action?: number;

    /*
     * Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
     */
    navigation?: number;

    /**
     * Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
     */
    expect?: number;

    /**
     * How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
     */
    settle?: number;

    /**
     * Close the browser after this many milliseconds without a tool call, and relaunch it on the next one.
     * Defaults to one hour for headless browsers Playwright launched, and to no timeout for headed or attached ones. Pass 0 to disable.
     * The CLI shuts the whole session down instead of relaunching.
     */
    idle?: number;
  };

  /**
   * Whether to send image responses to the client. Can be "allow", "omit", or "only". Defaults to "allow".
   * With "only", a response that carries an image consists of the image parts alone, without the text part.
   */
  imageResponses?: 'allow' | 'omit' | 'only';

  /**
   * How file paths are rendered in tool results. Can be "relative" to the workspace root or "absolute". Defaults to "relative".
   */
  filePaths?: 'relative' | 'absolute';

  snapshot?: {
    /**
     * When taking snapshots for responses, specifies the mode to use.
     */
    mode?: 'full' | 'none';

    /**
     * Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
     * Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
     */
    boxes?: boolean;
  };

  /**
   * allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
   * wandering outside its intended workspace. It is a convenience defense to catch unintended
   * file access, not a secure boundary; a deliberate attempt to reach other directories can be
   * easily worked around, so always rely on client-level permissions for true security.
   */
  allowUnrestrictedFileAccess?: boolean;

  /**
   * Specify the language to use for code generation.
   */
  codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}

獨立 MCP 伺服器

在沒有顯示器的系統上或從 IDE 的工作者程序執行有頭瀏覽器時, 請在具有 DISPLAY 的環境中執行 MCP 伺服器,並傳入 --port 旗標以啟用 HTTP 傳輸。

npx @playwright/mcp@latest --port 8931

然後在 MCP 用戶端設定中,將 url 設定為 HTTP 端點:

{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}

安全性

Playwright MCP 不是安全邊界。請參閱 MCP 安全最佳實踐 以取得保護部署的指引。

Docker

注意: 目前 Docker 實作僅支援無頭 Chromium。

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
    }
  }
}

或者,如果您偏好將容器作為長期服務執行,而不是讓 MCP 用戶端啟動它,請使用:

docker run -d -i --rm --init --pull=always \
  --entrypoint node \
  --name playwright \
  -p 8931:8931 \
  mcr.microsoft.com/playwright/mcp \
  /app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0

伺服器將監聽主機連接埠 8931,任何 MCP 用戶端都可以連線。

您可以自行建置 Docker 映像檔。

docker build -t mcr.microsoft.com/playwright/mcp .
程式化使用
import http from 'http';

import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';

http.createServer(async (req, res) => {
  // ...

  // Creates a headless Playwright MCP server with SSE transport
  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
  const transport = new SSEServerTransport('/messages', res);
  await connection.connect(transport);

  // ...
});

工具

核心自動化
  • browser_click
    • 標題:點擊
    • 描述:在網頁上執行點擊
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • doubleClick(布林值,選用):是否執行雙擊而非單擊
      • button(字串,選用):要點擊的按鈕,預設為左鍵
      • modifiers(陣列,選用):要按下的修飾鍵
    • 唯讀:false
  • browser_close
    • 標題:關閉瀏覽器
    • 描述:關閉頁面
    • 參數:無
    • 唯讀:false
  • browser_console_messages
    • 標題:取得主控台訊息
    • 描述:回傳所有主控台訊息
    • 參數:
      • level(字串):要回傳的主控台訊息層級。每個層級包含更嚴重層級的訊息。預設為 "info"。
      • all(布林值,選用):回傳自工作階段開始以來的所有主控台訊息,而不只是自上次導覽以來的訊息。預設為 false。
      • filename(字串,選用):要儲存主控台訊息的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。如果未提供,訊息會以文字形式回傳。
    • 唯讀:true
  • browser_drag
    • 標題:拖曳滑鼠
    • 描述:在兩個元素之間執行拖放
    • 參數:
      • startElement(字串,選用):人類可讀的來源元素描述,用於取得與元素互動的權限
      • startTarget(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • endElement(字串,選用):人類可讀的目標元素描述,用於取得與元素互動的權限
      • endTarget(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
    • 唯讀:false
  • browser_drop
    • 標題:將檔案或資料拖放到元素上
    • 描述:將檔案或 MIME 型別資料拖放到元素上,如同從頁面外部拖入。必須提供 "paths" 或 "data" 其中至少一項。
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • paths(陣列,選用):要拖放到元素上的檔案絕對路徑。
      • data(物件,選用):要拖放的資料,作為 MIME 型別到字串值的對應(例如 {"text/plain": "hello", "text/uri-list": "https://example.com"})。
    • 唯讀:false
  • browser_emulate_media
    • 標題:模擬媒體功能
    • 描述:模擬頁面的 CSS 媒體功能,例如在淺色和深色色彩配置之間切換。省略的參數保持不變;null 會清除覆寫。
    • 參數:
      • colorScheme(選用):模擬 prefers-color-scheme 媒體功能
      • reducedMotion(選用):模擬 prefers-reduced-motion 媒體功能
      • forcedColors(選用):模擬 forced-colors 媒體功能
      • contrast(選用):模擬 prefers-contrast 媒體功能
      • media(選用):變更頁面的 CSS 媒體型別
    • 唯讀:false
  • browser_evaluate
    • 標題:評估 JavaScript
    • 描述:在頁面或元素上評估 JavaScript 表達式
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串,選用):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • function(字串):() => { /* code / } 或提供元素時為 (element) => { / code */ }
      • filename(字串,選用):要儲存結果的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。如果未提供,結果會以文字形式回傳。
    • 唯讀:false
  • browser_file_upload
    • 標題:上傳檔案
    • 描述:上傳一個或多個檔案
    • 參數:
      • paths(陣列,選用):要上傳的檔案絕對路徑。可以是單一檔案或多個檔案。如果省略,檔案選擇器會被取消。
    • 唯讀:false
  • browser_fill_form
    • 標題:填寫表單
    • 描述:填寫多個表單欄位
    • 參數:
      • fields(陣列):要填寫的欄位
    • 唯讀:false
  • browser_find
    • 標題:在頁面快照中尋找
    • 描述:在目前頁面的無障礙快照中搜尋文字或正規表達式。回傳符合的快照節點,並附帶幾行周圍內容(類似搜尋片段),每個節點顯示其從樹狀根目錄的路徑,這比在只需要定位元素及其 ref 時擷取整個快照更經濟。
    • 參數:
      • text(字串,選用):要在頁面快照中搜尋的純文字(不區分大小寫的子字串比對)。提供 text 或 regex 其中一項,不可同時提供。
      • regex(字串,選用):要在頁面快照中搜尋的正規表達式。預設區分大小寫;將模式包在斜線中以加入旗標,例如 "/error/i" 表示不區分大小寫。提供 text 或 regex 其中一項,不可同時提供。
      • filename(字串,選用):將結果儲存到檔案而非在回應中回傳。相對檔案名稱會相對於工作區根目錄解析。
    • 唯讀:true
  • browser_handle_dialog
    • 標題:處理對話方塊
    • 描述:處理對話方塊
    • 參數:
      • accept(布林值):是否接受對話方塊。
      • promptText(字串,選用):如果是提示對話方塊,則為提示的文字。
    • 唯讀:false
  • browser_hover
    • 標題:滑鼠懸停
    • 描述:將滑鼠懸停在頁面上的元素上
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
    • 唯讀:false
  • browser_navigate
    • 標題:導覽至 URL
    • 描述:導覽至 URL
    • 參數:
      • url(字串):要導覽至的 URL
    • 唯讀:false
  • browser_navigate_back
    • 標題:返回
    • 描述:返回歷史記錄中的上一頁
    • 參數:無
    • 唯讀:false
  • browser_network_request
    • 標題:顯示網路請求詳細資料
    • 描述:回傳單一網路請求的完整詳細資料(標頭和內文),或當設定 part 時回傳單一部分。使用 browser_network_requests 中的編號。
    • 參數:
      • index(整數):請求的 1 為基礎索引,如 browser_network_requests 所列印。
      • part(字串,選用):僅回傳請求的此部分。省略以回傳完整詳細資料。
      • filename(字串,選用):要儲存結果的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。如果未提供,輸出會以文字形式回傳。
    • 唯讀:true
  • browser_network_requests
    • 標題:列出網路請求
    • 描述:回傳自載入頁面以來的編號網路請求清單。使用 browser_network_request 搭配編號以取得完整詳細資料。
    • 參數:
      • static(布林值):是否包含成功的靜態資源,例如圖片、字型、指令碼等。預設為 false。
      • filter(字串,選用):僅回傳 URL 符合此正規表達式的請求(例如 "/api/.*user")。
      • filename(字串,選用):要儲存網路請求的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。如果未提供,請求會以文字形式回傳。
    • 唯讀:true
  • browser_press_key
    • 標題:按下按鍵
    • 描述:在鍵盤上按下按鍵
    • 參數:
      • key(字串):要按下的按鍵名稱或要產生的字元,例如 ArrowLeft 或 a
    • 唯讀:false
  • browser_resize
    • 標題:調整瀏覽器視窗大小
    • 描述:調整瀏覽器視窗大小
    • 參數:
      • width(數字):瀏覽器視窗的寬度
      • height(數字):瀏覽器視窗的高度
    • 唯讀:false
  • browser_run_code_unsafe
    • 標題:執行 Playwright 程式碼(不安全)
    • 描述:執行 Playwright 程式碼片段。不安全:在 Playwright 伺服器處理程序中執行任意 JavaScript,等同於 RCE。
    • 參數:
      • code(字串,選用):包含要執行之 Playwright 程式碼的 JavaScript 函式。它將以單一引數 page 呼叫,您可以用它進行任何頁面互動。例如:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }
      • filename(字串,選用):從指定檔案載入程式碼。相對檔案名稱會相對於工作區根目錄解析。如果同時提供 code 和 filename,則會忽略 code。
    • 唯讀:false
  • browser_select_option
    • 標題:選擇選項
    • 描述:在下拉式選單中選擇選項
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • values(陣列):要在下拉式選單中選擇的值陣列。可以是單一值或多個值。
    • 唯讀:false
  • browser_snapshot
    • 標題:頁面快照
    • 描述:擷取目前頁面的無障礙存取快照,這比螢幕截圖更好
    • 參數:
      • target(字串,選用):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • filename(字串,選用):將快照儲存到檔案,而非在回應中回傳。相對檔案名稱會相對於工作區根目錄解析。
      • depth(數字,選用):限制快照樹狀結構的深度
      • boxes(布林值,選用):在快照中包含每個元素的邊界框,格式為 [box=x,y,width,height]。座標相對於視窗,單位為 CSS 像素(Element.getBoundingClientRect)
    • 唯讀:true
  • browser_take_screenshot
    • 標題:擷取螢幕截圖
    • 描述:擷取目前頁面的螢幕截圖。您無法根據螢幕截圖執行操作,請使用 browser_snapshot 來執行操作。
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串,選用):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • type(字串,選用):螢幕截圖的影像格式。若未設定,則從檔案副檔名推斷,否則為 png。
      • filename(字串,選用):儲存螢幕截圖的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。若未指定,螢幕截圖會儲存到輸出目錄,名稱為 page-{timestamp}.{png|jpeg|webp}。
      • fullPage(布林值,選用):若為 true,則擷取整個可捲動頁面的螢幕截圖,而非目前可見的視窗。無法與元素螢幕截圖同時使用。
      • scale(字串):影像解析度縮放比例。"css" 會產生以 CSS 像素為單位的螢幕截圖(較小,跨裝置一致)。"device" 會使用裝置像素產生高解析度螢幕截圖(較大,考量裝置像素比例)。預設為 css。
    • 唯讀:true
  • browser_type
    • 標題:輸入文字
    • 描述:在可編輯元素中輸入文字
    • 參數:
      • element(字串,選用):人類可讀的元素描述,用於取得與元素互動的權限
      • target(字串):頁面快照中的確切目標元素參考,或唯一的元素選擇器
      • text(字串):要輸入到元素中的文字
      • submit(布林值,選用):是否提交輸入的文字(之後按下 Enter)
      • slowly(布林值,選用):是否一次輸入一個字元。可用於觸發頁面中的按鍵處理器。預設會一次填入整個文字。
    • 唯讀:false
  • browser_wait_for
    • 標題:等待
    • 描述:等待文字出現或消失,或等待指定的時間經過
    • 參數:
      • time(數字,選用):等待的時間(秒),最多 30
      • text(字串,選用):要等待出現的文字
      • textGone(字串,選用):要等待消失的文字
    • 唯讀:false
分頁管理
  • browser_tabs
    • 標題:管理分頁
    • 描述:列出、建立、關閉或選擇瀏覽器分頁。
    • 參數:
      • action(字串):要執行的操作
      • index(數字,選用):分頁索引,用於關閉/選擇。若關閉時省略,則關閉目前分頁。
      • url(字串,選用):要在新分頁中導覽的 URL,用於建立新分頁。
    • 唯讀:false
瀏覽器安裝
設定(透過 --caps=config 選擇加入)
  • browser_get_config
    • 標題:取得設定
    • 描述:在合併 CLI 選項、環境變數和設定檔後,取得最終解析的設定。
    • 參數:無
    • 唯讀:true
網路(透過 --caps=network 選擇加入)
  • browser_network_state_set
    • 標題:設定網路狀態
    • 描述:將瀏覽器網路狀態設定為線上或離線。離線時,所有網路請求都會失敗。
    • 參數:
      • state(字串):設定為 "offline" 以模擬離線模式,"online" 以恢復網路連線
    • 唯讀:false
  • browser_route
    • 標題:模擬網路請求
    • 描述:設定路由以模擬符合 URL 模式的網路請求
    • 參數:
      • pattern(字串):要比對的 URL 模式(例如,"/api/users"、"/*.{png,jpg}")
      • status(數字,選用):要回傳的 HTTP 狀態碼(預設:200)
      • body(字串,選用):回應主體(文字或 JSON 字串)
      • contentType(字串,選用):Content-Type 標頭(例如,"application/json"、"text/html")
      • headers(陣列,選用):要以 "Name: Value" 格式新增的標頭
      • removeHeaders(字串,選用):要從請求中移除的標頭名稱逗號分隔清單
    • 唯讀:false
  • browser_route_list
    • 標題:列出網路路由
    • 描述:列出所有作用中的網路路由
    • 參數:無
    • 唯讀:true
  • browser_unroute
    • 標題:移除網路路由
    • 描述:移除符合模式的路由(若未指定模式,則移除所有路由)
    • 參數:
      • pattern(字串,選用):要取消路由的 URL 模式(省略以移除所有路由)
    • 唯讀:false
儲存(透過 --caps=storage 選擇加入)
  • browser_cookie_clear
    • 標題:清除 Cookie
    • 描述:清除所有 Cookie
    • 參數:無
    • 唯讀:false
  • browser_cookie_delete
    • 標題:刪除 Cookie
    • 描述:刪除特定的 Cookie
    • 參數:
      • name(字串):要刪除的 Cookie 名稱
    • 唯讀:false
  • browser_cookie_get
    • 標題:取得 Cookie
    • 描述:依名稱取得特定的 Cookie
    • 參數:
      • name(字串):要取得的 Cookie 名稱
    • 唯讀:true
  • browser_cookie_list
    • 標題:列出 Cookie
    • 描述:列出所有 Cookie(可選擇依網域/路徑篩選)
    • 參數:
      • domain(字串,選用):依網域篩選 Cookie
      • path(字串,選用):依路徑篩選 Cookie
    • 唯讀:true
  • browser_cookie_set
    • 標題:設定 Cookie
    • 描述:設定帶有選用旗標的 Cookie(網域、路徑、到期時間、httpOnly、secure、sameSite)
    • 參數:
      • name(字串):Cookie 名稱
      • value(字串):Cookie 值
      • domain(字串,選用):Cookie 網域
      • path(字串,選用):Cookie 路徑
      • expires(數字,選用):Cookie 到期時間,為 Unix 時間戳記
      • httpOnly(布林值,選用):Cookie 是否僅限 HTTP
      • secure(布林值,選用):Cookie 是否為安全連線
      • sameSite(字串,選用):Cookie 的 SameSite 屬性
    • 唯讀:false
  • browser_localstorage_clear
    • 標題:清除 localStorage
    • 描述:清除所有 localStorage
    • 參數:無
    • 唯讀:false
  • browser_localstorage_delete
    • 標題:刪除 localStorage 項目
    • 描述:刪除 localStorage 項目
    • 參數:
      • key(字串):要刪除的鍵
    • 唯讀:false
  • browser_localstorage_get
    • 標題:取得 localStorage 項目
    • 描述:依鍵取得 localStorage 項目
    • 參數:
      • key(字串):要取得的鍵
    • 唯讀:true
  • browser_localstorage_list
    • 標題:列出 localStorage
    • 描述:列出所有 localStorage 鍵值對
    • 參數:無
    • 唯讀:true
  • browser_localstorage_set
    • 標題:設定 localStorage 項目
    • 描述:設定 localStorage 項目
    • 參數:
      • key(字串):要設定的鍵
      • value(字串):要設定的值
    • 唯讀:false
  • browser_sessionstorage_clear
    • 標題:清除 sessionStorage
    • 描述:清除所有 sessionStorage
    • 參數:無
    • 唯讀:false
  • browser_sessionstorage_delete
    • 標題:刪除 sessionStorage 項目
    • 描述:刪除 sessionStorage 項目
    • 參數:
      • key(字串):要刪除的鍵
    • 唯讀:false
  • browser_sessionstorage_get
    • 標題:取得 sessionStorage 項目
    • 描述:依鍵取得 sessionStorage 項目
    • 參數:
      • key(字串):要取得的鍵
    • 唯讀:true
  • browser_sessionstorage_list
    • 標題:列出 sessionStorage
    • 描述:列出所有 sessionStorage 鍵值對
    • 參數:無
    • 唯讀:true
  • browser_sessionstorage_set
    • 標題:設定 sessionStorage 項目
    • 描述:設定 sessionStorage 項目
    • 參數:
      • key(字串):要設定的鍵
      • value(字串):要設定的值
    • 唯讀:false
  • browser_set_storage_state
    • 標題:還原儲存狀態
    • 描述:從檔案還原儲存狀態(Cookie、本機儲存)。這會在還原前清除現有的 Cookie 和本機儲存。
    • 參數:
      • filename(字串):要從中還原的儲存狀態檔案路徑。相對檔案名稱會相對於工作區根目錄解析。
    • 唯讀:false
  • browser_storage_state
    • 標題:儲存儲存狀態
    • 描述:將儲存狀態(Cookie、本機儲存)儲存到檔案以供日後重複使用
    • 參數:
      • filename(字串,選用):儲存儲存狀態的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。若未指定,儲存狀態會儲存到輸出目錄,名稱為 storage-state-{timestamp}.json。
    • 唯讀:true
DevTools(透過 --caps=devtools 選擇加入)
  • browser_annotate
    • 標題:註解目前頁面
    • 描述:以註解模式為目前頁面開啟 Playwright Dashboard,並等待使用者繪製註解。回傳已註解的螢幕截圖、ARIA 快照和註解清單。
    • 參數:無
    • 唯讀:true
  • browser_hide_highlight
    • 標題:隱藏元素反白
    • 描述:移除先前為元素新增的反白覆蓋層。
    • 參數:
      • element(字串,選用):新增反白時使用的人類可讀元素描述;必須與傳遞給 browser_highlight 的值相符。
      • target(字串,選用):頁面快照中的確切目標元素參考,或唯一的元素選擇器
    • 唯讀:true
  • browser_highlight
    • 標題:高亮元素
    • 描述:在頁面上的元素周圍顯示持續的高亮覆蓋層。
    • 參數:
      • element(字串,可選):用於取得與元素互動權限的人類可讀元素描述
      • target(字串):頁面快照中的精確目標元素引用,或唯一的元素選擇器
      • style(字串,可選):套用於高亮覆蓋層的額外內聯 CSS,例如「outline: 2px dashed red」。
    • 唯讀:true
  • browser_resume
    • 標題:恢復暫停的腳本執行
    • 描述:在腳本暫停後恢復執行。當 step 設為 true 時,執行將在下一個動作前再次暫停。
    • 參數:
      • step(布林值,可選):當為 true 時,執行將在下一個動作前再次暫停,允許逐步除錯。
      • location(字串,可選):在特定的 : 暫停執行,例如「example.spec.ts:42」。
    • 唯讀:false
  • browser_start_recording
    • 標題:開始錄製使用者動作
    • 描述:開始將使用者在瀏覽器中執行的動作錄製為 Playwright 程式碼。當使用者想要手動示範流程時使用。當使用者表示完成時,呼叫 browser_stop_recording 以取得錄製的動作。
    • 參數:無
    • 唯讀:true
  • browser_start_tracing
    • 標題:開始追蹤
    • 描述:開始錄製追蹤
    • 參數:無
    • 唯讀:true
  • browser_start_video
    • 標題:開始錄影
    • 描述:開始錄製影片
    • 參數:
      • filename(字串,可選):儲存影片的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。若未指定,影片會以 video-{timestamp}.webm 儲存到輸出目錄。
      • size(物件,可選):影片尺寸
      • fps(數字,可選):影片幀率(每秒幀數),預設為 25
      • cursor(布林值,可選):渲染一個動畫滑鼠游標,移動到每個動作點。以 800 毫秒的間隔調整動作節奏,讓游標有時間移動。
    • 唯讀:true
  • browser_stop_recording
    • 標題:停止錄製使用者動作
    • 描述:停止由 browser_start_recording 開始的錄製,並將錄製的動作以 Playwright 程式碼形式回傳。
    • 參數:無
    • 唯讀:true
  • browser_stop_tracing
    • 標題:停止追蹤
    • 描述:停止錄製追蹤
    • 參數:無
    • 唯讀:true
  • browser_stop_video
    • 標題:停止錄影
    • 描述:停止錄製影片
    • 參數:無
    • 唯讀:true
  • browser_video_chapter
    • 標題:影片章節
    • 描述:在影片錄製中加入章節標記。顯示帶有模糊背景的全螢幕章節卡片。
    • 參數:
      • title(字串):章節標題
      • description(字串,可選):章節描述
      • duration(數字,可選):顯示章節卡片的持續時間(毫秒)
    • 唯讀:true
  • browser_video_hide_actions
    • 標題:隱藏動作覆蓋層
    • 描述:停止在頁面上標註執行的動作。
    • 參數:無
    • 唯讀:true
  • browser_video_show_actions
    • 標題:顯示動作覆蓋層
    • 描述:在頁面上執行的後續動作旁加上標註,標註會命名動作,並在套用樣式時標記動作點並高亮目標元素。在錄影或螢幕錄製時很有用。
    • 參數:
      • duration(數字,可選):每個動作標註在螢幕上停留的時間(毫秒)。預設為 500。
      • position(字串,可選):動作標題相對於頁面的放置位置。預設為右上角。
      • cursor(字串,可選):指標動作的游標裝飾。「pointer」(預設)會動畫顯示滑鼠指標從上一個動作點移動到下一個動作點;「none」會停用游標裝飾。
      • style(物件,可選):動作裝飾的樣式。
    • 唯讀:true
基於座標(透過 --caps=vision 選擇加入)
  • browser_mouse_click_xy
    • 標題:點擊
    • 描述:在指定位置點擊滑鼠按鈕
    • 參數:
      • x(數字):X 座標
      • y(數字):Y 座標
      • button(字串,可選):要點擊的按鈕,預設為左鍵
      • clickCount(數字,可選):點擊次數,預設為 1
      • delay(數字,可選):滑鼠按下與放開之間的等待時間(毫秒),預設為 0
    • 唯讀:false
  • browser_mouse_down
    • 標題:按下滑鼠
    • 描述:按下滑鼠
    • 參數:
      • button(字串,可選):要按下的按鈕,預設為左鍵
    • 唯讀:false
  • browser_mouse_drag_xy
    • 標題:拖曳滑鼠
    • 描述:將左鍵拖曳到指定位置
    • 參數:
      • startX(數字):起始 X 座標
      • startY(數字):起始 Y 座標
      • endX(數字):結束 X 座標
      • endY(數字):結束 Y 座標
    • 唯讀:false
  • browser_mouse_move_xy
    • 標題:移動滑鼠
    • 描述:將滑鼠移動到指定位置
    • 參數:
      • x(數字):X 座標
      • y(數字):Y 座標
    • 唯讀:false
  • browser_mouse_up
    • 標題:放開滑鼠
    • 描述:放開滑鼠
    • 參數:
      • button(字串,可選):要放開的按鈕,預設為左鍵
    • 唯讀:false
  • browser_mouse_wheel
    • 標題:滾動滑鼠滾輪
    • 描述:滾動滑鼠滾輪
    • 參數:
      • deltaX(數字):X 增量
      • deltaY(數字):Y 增量
    • 唯讀:false
PDF 產生(透過 --caps=pdf 選擇加入)
  • browser_pdf_save
    • 標題:另存為 PDF
    • 描述:將頁面儲存為 PDF
    • 參數:
      • filename(字串,可選):儲存 PDF 的檔案名稱。相對檔案名稱會相對於工作區根目錄解析。若未指定,PDF 會以 page-{timestamp}.pdf 儲存到輸出目錄。
    • 唯讀:true
測試斷言(透過 --caps=testing 選擇加入)
  • browser_generate_locator
    • 標題:為元素建立定位器
    • 描述:為指定元素產生定位器,供測試使用
    • 參數:
      • element(字串,可選):用於取得與元素互動權限的人類可讀元素描述
      • target(字串):頁面快照中的精確目標元素引用,或唯一的元素選擇器
    • 唯讀:true
  • browser_verify_element_visible
    • 標題:驗證元素可見
    • 描述:驗證元素在頁面上可見
    • 參數:
      • role(字串):元素的 ROLE。可以在快照中找到,格式如下:- {ROLE} "Accessible Name":
      • accessibleName(字串):元素的 ACCESSIBLE_NAME。可以在快照中找到,格式如下:- role "{ACCESSIBLE_NAME}"
    • 唯讀:false
  • browser_verify_list_visible
    • 標題:驗證清單可見
    • 描述:驗證清單在頁面上可見
    • 參數:
      • element(字串):人類可讀的清單描述
      • target(字串):指向清單的精確目標元素引用
      • items(陣列):要驗證的項目
    • 唯讀:false
  • browser_verify_text_visible
    • 標題:驗證文字可見
    • 描述:驗證文字在頁面上可見。如果可能,請優先使用 browser_verify_element_visible。
    • 參數:
      • text(字串):要驗證的 TEXT。可以在快照中找到,格式如下:- role "Accessible Name": {TEXT} 或如下:- text: {TEXT}
    • 唯讀:false
  • browser_verify_value
    • 標題:驗證值
    • 描述:驗證元素值
    • 參數:
      • type(字串):元素類型
      • element(字串):人類可讀的元素描述
      • target(字串):頁面快照中的精確目標元素引用
      • value(字串):要驗證的值。對於核取方塊,請使用「true」或「false」。
    • 唯讀:false