microsoft/playwright-mcp

分类Web
作者Community
星标463
定价Free

简介

microsoft/playwright-mcp 是一个将微软 Playwright 自动化能力引入 LLM 的连接器。它不再是让 AI 简单地通过 API 获取网页文本,而是让 AI 能够像真实用户一样通过“可访问性快照”感知页面结构,从而实现精准的网页交互。对于开发者而言,这意味着你可以让 Claude 等支持 MCP 的客户端直接操控浏览器,完成诸如自动化测试、复杂网页数据采集或动态页面分析等任务。上手难度较低,只要环境配置好,AI 即可接管浏览器操作,将传统的脚本编写转化为自然语言指令。

核心亮点

  • 让 AI 具备实时操控浏览器的交互能力
  • 基于可访问性快照实现精准的元素定位
  • 无需手动写脚本即可完成复杂网页自动化
  • 适用于端到端测试、动态数据抓取场景

完整文档

Playwright MCP

一个基于 Playwright 提供浏览器自动化能力的 Model Context Protocol (MCP) 服务器。该服务器使 LLM 能够通过结构化的 accessibility snapshots 与网页交互,从而无需截图或视觉微调模型。

Playwright MCP vs Playwright CLI

本软件包为 Playwright 提供了 MCP 接口。如果您使用的是 coding agent,使用 CLI+SKILLS 可能会更有优势。

  • CLI:现代 coding agents 越来越倾向于使用以 SKILLs 形式暴露的基于 CLI 的工作流而非 MCP,因为 CLI 调用更具 token 效率:它们避免将庞大的 tool schemas 和冗长的 accessibility trees 加载到模型上下文中,允许 agent 通过简洁且专用的命令执行操作。这使得 CLI + SKILLs 更适合那些必须在有限的上下文窗口内平衡浏览器自动化、大规模代码库、测试和推理的高吞吐量 coding agents。<br>了解更多关于 Playwright CLI with SKILLS 的信息
  • MCP:对于受益于持久化状态、丰富内省(introspection)以及对页面结构进行迭代推理的专业 agent 循环,MCP 依然适用。例如探索性自动化、自愈测试或长时间运行的自主工作流,在这些场景中,维持连续的浏览器上下文比 token 成本更重要。

Key Features- 快速且轻量。使用 Playwright 的 accessibility tree,而非基于像素的输入。

  • LLM 友好。无需视觉模型,纯粹基于结构化数据运行。
  • 确定性的工具调用。避免了基于截图方案中常见的歧义。

Requirements

  • Node.js 18 或更高版本
  • VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie 或任何其他 MCP client

<!--
// Generate using:
node utils/generate-links.js
-->

Getting started

首先,通过你的 client 安装 Playwright MCP server。

Standard config 适用于大多数工具:

js
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
<img src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF" alt="Install in VS Code"> <img alt="Install in VS Code Insiders" src="https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5">

<details>
<summary>Amp</summary>

通过 Amp VS Code 扩展设置界面或更新 settings.json 文件进行添加:

json
"amp.mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
Amp CLI 设置:

通过下方的 amp mcp add 命令添加

bash
amp mcp add playwright -- npx @playwright/mcp@latest
</details>

<details>
<summary>Antigravity</summary>

通过 Antigravity 设置或更新配置文件进行添加:

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

<details>
<summary>Claude Code</summary>

使用 Claude Code CLI 添加 Playwright MCP server:

bash
claude mcp add playwright npx @playwright/mcp@latest
</details>

<details>
<summary>Claude Desktop</summary>

参考 MCP 安装 guide,使用上述标准配置。

</details>

<details>
<summary>Cline</summary>

参考 Configuring MCP Servers 章节中的说明。

示例:本地设置

将以下内容添加到你的 cline_mcp_settings.json 文件中:

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

<details>
<summary>Codex</summary>

使用 Codex CLI 添加 Playwright MCP server:

bash
codex mcp add playwright npx "@playwright/mcp@latest"
或者,创建或编辑配置文件 ~/.codex/config.toml 并添加:
toml
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
欲了解更多信息,请参阅 Codex MCP documentation

</details>

<details>
<summary>Copilot</summary>

使用 Copilot CLI 交互式地添加 Playwright MCP server:

bash
/mcp add
或者,创建或编辑配置文件 ~/.copilot/mcp-config.json 并添加:
json
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@playwright/mcp@latest"
]
}
}
}
欲了解更多信息,请参阅 Copilot CLI documentation

</details>

<details>
<summary>Cursor</summary>

#### 点击按钮安装:

<img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Install in Cursor">

#### 或手动安装:

前往 Cursor Settings -> MCP -> Add new MCP Server。名称自定义,类型选择 command,命令填写 npx @playwright/mcp@latest。您可以通过点击 Edit 来验证配置或添加类似参数的命令。

</details>

<details>
<summary>Factory</summary>

使用 Factory CLI 添加 Playwright MCP server:

bash
droid mcp add playwright "npx @playwright/mcp@latest"
或者,在 Factory droid 中输入 /mcp 以打开用于管理 MCP servers 的交互式 UI。

欲了解更多信息,请参阅 Factory MCP documentation

</details>

<details>
<summary>Gemini CLI</summary>

参考 MCP 安装 guide,并使用上述标准配置。

</details>

<details>
<summary>Goose</summary>

#### 点击按钮安装:

![Install in Goose](https://block.github.io/goose/extension?cmd=npx&arg=%40playwright%2Fmcp%40latest&id=playwright&name=Playwright&description=Interact%20with%20web%20pages%20through%20structured%20accessibility%20snapshots%20using%20Playwright)

#### 或手动安装:

前往 Advanced settings -> Extensions -> Add custom extension。根据喜好命名,类型选择 STDIO,并将 command 设置为 npx @playwright/mcp。点击 "Add Extension"。
</details>

<details>
<summary>Grok</summary>

使用 Grok CLI 添加 Playwright MCP server:

bash
grok mcp add playwright -- npx @playwright/mcp@latest
或者,创建或编辑配置文件 ~/.grok/config.toml 并添加:
toml
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
欲了解更多信息,请参阅 Grok MCP documentation

</details>

<details>
<summary>Junie</summary>

在 Junie CLI 中添加 Playwright MCP server:

1. 输入 /mcp
2. 按 Ctrl+A 添加新的 MCP server
3. 从列表中选择 Playwright

或者,添加到 .junie/mcp/mcp.json

json
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}
欲了解更多信息,请参阅 Junie MCP configuration documentation

</details>

<details>
<summary>Kiro</summary>

![Add to Kiro](https://kiro.dev/launch/mcp/add?name=playwright&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22%40playwright%2Fmcp%40latest%22%5D%7D)

请参考 MCP Servers documentation。例如在 .kiro/settings/mcp.json 中:

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

<details>
<summary>LM Studio</summary>

#### 点击按钮安装:

![Add MCP Server playwright to LM Studio](https://lmstudio.ai/install-mcp?name=playwright&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyJAcGxheXdyaWdodC9tY3BAbGF0ZXN0Il19)

#### 或手动安装:

前往右侧边栏的 Program -> Install -> Edit mcp.json。使用上述标准配置。
</details>

<details>
<summary>opencode</summary>

参考 MCP Servers documentation。例如在 ~/.config/opencode/opencode.json 中:

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

<details>
<summary>Qodo Gen</summary>

在 VSCode 或 IntelliJ 中打开 Qodo Gen 聊天面板 → Connect more tools → + Add new MCP → 粘贴上方的标准配置。

点击 Save
</details>

<details>
<summary>VS Code</summary>

#### 点击按钮安装:

<img src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF" alt="Install in VS Code"> <img alt="Install in VS Code Insiders" src="https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5">

#### 或手动安装:

参考 MCP 安装 guide,使用上方的标准配置。您也可以使用 VS Code CLI 安装 Playwright MCP server:

bash
# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
安装完成后,Playwright MCP server 即可在 VS Code 的 GitHub Copilot agent 中使用。
</details>

<details>
<summary>Warp</summary>

前往 Settings -> AI -> Manage MCP Servers -> + Add添加一个 MCP Server。请使用上述标准配置。

或者,在 Warp 提示符中使用斜杠命令 /add-mcp 并粘贴上述标准配置:

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

<details>
<summary>Windsurf</summary>

参考 Windsurf MCP 文档。使用上述标准配置。

</details>

Configuration

Playwright MCP server 支持以下参数。这些参数可以在上述 JSON 配置的 "args" 列表中提供:

<!--- Options generated by update-readme.js -->| 选项 | 描述 |
|--------|-------------|
| --allowed-hosts <hosts...> | 允许此服务器提供服务的 host 逗号分隔列表。默认为服务器绑定的 host。传递 '*' 以禁用 host 检查。<br>*env* PLAYWRIGHT_MCP_ALLOWED_HOSTS |
| --allowed-origins <origins> | 允许浏览器请求的受信任 origin 分号分隔列表。默认允许所有。重要:*不*作为安全边界,且*不*影响重定向。<br>*env* PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | 允许访问工作区根目录以外的文件。同时允许不受限制地访问 file:// URL。默认情况下,文件系统访问仅限于工作区根目录(若未配置根目录则为 cwd),且屏蔽对 file:// URL 的导航。<br>*env* PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS |
| --blocked-origins <origins> | 屏蔽浏览器请求的 origin 分号分隔列表。屏蔽列表在允许列表之前评估。如果未使用允许列表,不匹配屏蔽列表的请求仍被允许。重要:*不*作为安全边界,且*不*影响重定向。<br>*env* PLAYWRIGHT_MCP_BLOCKED_ORIGINS |
| --block-service-workers | 屏蔽 service workers<br>*env* PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS |
| --browser <browser> | 要使用的浏览器或 chrome 通道,可选值:chrome, firefox, webkit, msedge。<br>*env* PLAYWRIGHT_MCP_BROWSER |
| --caps <caps> | 要启用的额外能力逗号分隔列表,可选值:vision, pdf, devtools。<br>*env* PLAYWRIGHT_MCP_CAPS |
| --cdp-endpoint <endpoint> | 要连接的 CDP endpoint。<br>*env* PLAYWRIGHT_MCP_CDP_ENDPOINT |
| --cdp-header <headers...> | 随连接请求发送的 CDP headers,可指定多个。<br>*env* PLAYWRIGHT_MCP_CDP_HEADERS |
| --cdp-timeout <timeout> | 连接到 CDP endpoint 的超时时间(毫秒),默认为 30000ms<br>*env* PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen <lang> | 指定用于代码生成的语言,可选值:"typescript", "python", "java", "csharp", "none"。默认为 "typescript"。<br>*env* PLAYWRIGHT_MCP_CODEGEN |
| --config <path> | 配置文件路径。<br>*env* PLAYWRIGHT_MCP_CONFIG |
| --console-level <level> | 要返回的控制台消息级别:"error", "warning", "info", "debug"。每个级别包含更严重级别的消息。<br>*env* PLAYWRIGHT_MCP_CONSOLE_LEVEL |
| --device <device> | 要模拟的设备,例如:"iPhone 15"<br>*env* PLAYWRIGHT_MCP_DEVICE |
| --mobile | 模拟通用移动设备(Chromium 为 Pixel 10,WebKit 为 iPhone 17)。移动端页面通常更轻量,可节省 token。不能与 --device 结合使用。<br>*env* PLAYWRIGHT_MCP_MOBILE |
| --executable-path <path> | 浏览器可执行文件路径。<br>*env* PLAYWRIGHT_MCP_EXECUTABLE_PATH |
| --extension | 连接到正在运行的浏览器实例(仅限 Edge/Chrome)。需要安装 "Playwright Extension"。<br>*env* PLAYWRIGHT_MCP_EXTENSION |
| --endpoint <endpoint> | 要连接的绑定浏览器 endpoint。<br>*env* PLAYWRIGHT_MCP_ENDPOINT |
| --grant-permissions <permissions...> | 授予浏览器上下文的权限列表,例如 "geolocation", "clipboard-read", "clipboard-write"。<br>*env* PLAYWRIGHT_MCP_GRANT_PERMISSIONS |
| --headless | 以无头模式运行浏览器,默认有头模式<br>*env* PLAYWRIGHT_MCP_HEADLESS |
| --host <host> | 服务器绑定的 host。默认为 localhost。使用 0.0.0.0 绑定到所有接口。<br>*env* PLAYWRIGHT_MCP_HOST |
| --ignore-https-errors | 忽略 https 错误<br>*env* PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS |
| --init-page <path...> | 在 Playwright page 对象上执行的 TypeScript 文件路径<br>*env* PLAYWRIGHT_MCP_INIT_PAGE |
| --init-script <path...> | 作为初始化脚本添加的 JavaScript 文件路径。该脚本将在每个页面的任何脚本执行前运行。可多次指定。<br>*env* PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | 将浏览器配置文件保存在内存中,不保存到磁盘。<br>*env* PLAYWRIGHT_MCP_ISOLATED |
| --image-responses <mode> | 是否向客户端发送图像响应。可以是 "allow" 或 "omit",默认为 "allow"。<br>*env* PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | 为所有通常处于沙箱中的进程类型禁用沙箱。<br>*env* PLAYWRIGHT_MCP_NO_SANDBOX |
| --output-dir <path> | 输出文件的目录路径。<br>*env* PLAYWRIGHT_MCP_OUTPUT_DIR |
| --output-max-size <bytes> | 剔除旧输出文件的阈值(字节)。<br>*env* PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE |
| --port <port> | SSE 传输监听的端口。<br>*env* PLAYWRIGHT_MCP_PORT |
| --proxy-bypass <bypass> | 绕过代理的域名逗号分隔列表,例如 ".com,chromium.org,.domain.com"<br>*env* PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server <proxy> | 指定代理服务器,例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"<br>*env* PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | 为所有通常不处于沙箱中的进程类型启用沙箱。<br>*env* PLAYWRIGHT_MCP_SANDBOX |
| --save-session | 是否将 Playwright MCP 会话保存到输出目录。<br>*env* PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets <path> | 包含 dotenv 格式密钥的文件路径<br>*env* PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | 在所有连接的 HTTP 客户端之间复用同一个浏览器上下文。<br>*env* PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-boxes | 在快照中将每个元素的边界框包含为 [box=x,y,width,height]。坐标相对于视口,单位为 CSS 像素。<br>*env* PLAYWRIGHT_MCP_SNAPSHOT_BOXES |
| --snapshot-mode <mode> | 为响应拍摄快照时指定使用的模式。可以是 "full" 或 "none"。默认为 "full"。<br>*env* PLAYWRIGHT_MCP_SNAPSHOT_MODE |
| --storage-state <path> | 隔离会话的存储状态文件路径。<br>*env* PLAYWRIGHT_MCP_STORAGE_STATE |
| --test-id-attribute <attribute> | 指定用于 test ids 的属性,默认为 "data-testid"<br>*env* PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action <timeout> | 指定操作超时时间(毫秒),默认为 5000ms<br>*env* PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation <timeout> | 指定导航超时时间(毫秒),默认为 60000ms<br>*env* PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --timeout-settle <timeout> | 每次操作后等待触发的工作稳定下来的时间(毫秒),默认为 500ms<br>*env* PLAYWRIGHT_MCP_TIMEOUT_SETTLE |
| --user-agent <ua string> | 指定 user agent 字符串<br>*env* PLAYWRIGHT_MCP_USER_AGENT |
| --user-data-dir <path> | 用户数据目录路径。如果未指定,将创建临时目录。<br>*env* PLAYWRIGHT_MCP_USER_DATA_DIR |
| --<!--- End of options generated section -->

User profile

你可以像使用常规浏览器一样以持久化 profile 运行 Playwright MCP(默认),也可以在隔离的 context 中运行以进行测试会话,或者通过浏览器扩展连接到现有浏览器。

Persistent profile

所有登录信息都将存储在 persistent profile 中,如果你想清除离线状态,可以在会话之间将其删除。
Persistent profile 位于以下位置,你可以使用 --user-data-dir 参数对其进行覆盖。

bash
# 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 客户端的 workspace root,因此不同的项目会自动获得独立的 profile。

> [!IMPORTANT]
> 一个持久化 profile 同时只能被一个浏览器实例使用,因此共享同一 workspace 的并发 MCP 客户端会产生冲突。若要并行运行多个客户端,请在启动每个额外客户端时添加 --isolated 参数,或将其指向一个不同的 --user-data-dir

Isolated

在 isolated 模式下,每个 session 都在 isolated profile 中启动。每当你要求 MCP 关闭浏览器时,session 随之关闭,且该 session 的所有存储状态(storage state)都会丢失。你可以通过配置中的 contextOptions--storage-state 参数为浏览器提供初始存储状态。在此阅读更多关于存储状态的内容。

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

Playwright MCP Chrome Extension 允许您连接到现有的浏览器标签页,并利用已登录的会话和浏览器状态。安装和设置指南请参阅 microsoft/playwright › packages/extension

初始状态

有多种方式可以为浏览器上下文(browser context)或页面提供初始状态。

对于存储状态(storage state),您可以:

  • 使用 --user-data-dir 参数启动用户数据目录。这将持久化会话之间的所有浏览器数据。

  • 使用 --storage-state 参数启动存储状态文件。这将从文件中将 cookies 和 local storage 加载到隔离的浏览器上下文中。

对于页面状态(page state),您可以使用:

  • --init-page 指向一个 TypeScript 文件,该文件将在 Playwright 页面对象上执行。这允许您运行任意代码来配置页面。
    ts
    // 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 或设置环境非常有用。
js
// init-script.js
window.isPlaywrightMCP = true;
### 配置文件

Playwright MCP server 可以使用 JSON 配置文件进行配置。您可以使用 --config 命令行选项来指定该配置文件:

bash
npx @playwright/mcp@latest --config path/to/config.json
<details>
<summary>配置文件 schema</summary>

<!--- 由 update-readme.js 生成的配置 -->

typescript
{
/**
* 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;

/**
* 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 to save output files.
*/
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;
};

/**
* Whether to send image responses to the client. Can be "allow", "omit", or "auto". Defaults to "auto", which sends images if the client can display them.
*/
imageResponses?: 'allow' | 'omit';

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';
}

<!--- End of config generated section -->

</details>

独立 MCP server

当在没有显示器的系统上运行 headed browser,或从 IDE 的 worker 进程中运行时,请在具有 DISPLAY 的环境中运行 MCP server,并传递 --port 标志以启用 HTTP transport。

bash
npx @playwright/mcp@latest --port 8931
然后在 MCP 客户端配置中,将 url 设置为 HTTP 端点:
js
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
## Security

Playwright MCP 不是一个安全边界。请参阅 MCP Security Best Practices 以获取关于保障部署安全的指南。

<details>
<summary><b>Docker</b></summary>

NOTE: 目前 Docker 实现仅支持 headless chromium。

js
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
或者,如果您希望将容器作为长期运行的服务运行,而不是由 MCP 客户端启动,请使用:
code
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 镜像。

code
docker build -t mcr.microsoft.com/playwright/mcp .
</details>

<details>
<summary><b>编程用法</b></summary>

js
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);

// ...
});

</details>

Tools

<!--- Tools generated by update-readme.js -->

<details>
<summary><b>Core automation</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_click
- Title: Click - Description: 在网页上执行点击操作 - Parameters: - element (string, optional): 用于获取与该元素交互权限的可读元素描述 - target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器 - doubleClick (boolean, optional): 是否执行双击而非单击 - button (string, optional): 要点击的按钮,默认为 left - modifiers (array, optional): 要按下的修饰键 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_close
- Title: Close browser - Description: 关闭页面 - Parameters: None - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_console_messages
- Title: 获取控制台消息
- Description: 返回所有控制台消息
- Parameters:
- level (string): 要返回的控制台消息级别。每个级别包含更严重级别的消息。默认为 "info"。
- all (boolean, optional): 返回自会话开始以来所有控制台消息,而不仅仅是自上次导航以来的消息。默认为 false。
- filename (string, optional): 保存控制台消息的文件名。如果未提供,消息将以文本形式返回。
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_drag
- Title: 鼠标拖拽 - Description: 在两个元素之间执行拖放操作 - Parameters: - startElement (string, optional): 用于获取元素交互权限的可读源元素描述 - startTarget (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器 - endElement (string, optional): 用于获取元素交互权限的可读目标元素描述 - endTarget (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_drop
- Title: 将文件或数据拖放到元素上
- Description: 将文件或 MIME 类型数据拖放到元素上,模拟从页面外部拖入。必须提供 pathsdata 其中之一。
- Parameters:
- element (string, optional): 用于获取与该元素交互权限的可读元素描述
- target (string): 页面快照中的精确目标元素引用,或唯一的元素选择器
- paths (array, optional): 要拖放到元素上的文件的绝对路径。
- data (object, optional): 要拖放的数据,为 MIME 类型到字符串值的映射(例如 {"text/plain": "hello", "text/uri-list": "https://example.com"})。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_evaluate
- Title: 执行 JavaScript - Description: 在页面或元素上执行 JavaScript 表达式 - Parameters: - element (string, optional): 用于获取与该元素交互权限的可读元素描述 - target (string, optional): 页面快照中的精确目标元素引用,或唯一的元素选择器 - function (string): () => { /* code */ } 或在提供 element 时使用 (element) => { /* code */ } - filename (string, optional): 保存结果的文件名。如果未提供,结果将以文本形式返回。 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_file_upload
- Title: 上传文件
- Description: 上传一个或多个文件
- Parameters:
- paths (array, optional): 要上传文件的绝对路径。可以是单个文件或多个文件。如果省略,则取消文件选择。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_fill_form
- Title: 填写表单 - Description: 填写多个表单字段 - Parameters: - fields (array): 要填写的字段 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_find
- Title: 在页面快照中查找 - Description: 在当前页面的 accessibility 快照中搜索文本或正则表达式。返回匹配的快照节点及其周围的几行上下文(类似于搜索片段),每个节点都显示其从树根开始的路径。当你只需要定位某个元素及其引用时,这种方式比捕获整个快照更高效。 - Parameters: - text (string, optional): 在页面快照中搜索的纯文本(不区分大小写的子字符串匹配)。请提供 text 或 regex 其中之一,不要同时提供。 - regex (string, optional): 在页面快照中搜索的正则表达式。默认区分大小写;将模式包裹在斜杠中可添加标志,例如 "/error/i" 表示不区分大小写。请提供 text 或 regex 其中之一,不要同时提供。 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_handle_dialog
- Title: 处理对话框
- Description: 处理对话框
- Parameters:
- accept (boolean): 是否接受对话框。
- promptText (string, optional): 如果是提示对话框,则为提示文本。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_hover
- Title: 鼠标悬停 - Description: 悬停在页面元素上 - Parameters: - element (string, optional): 用于获取交互权限的可读元素描述 - target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_navigate
- Title: 导航至 URL - Description: 导航至指定 URL - Parameters: - url (string): 要导航到的 URL - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_navigate_back
- Title: 后退 - Description: 返回历史记录中的前一页 - Parameters: None - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_network_request
- Title: 显示网络请求详情
- Description: 返回单个网络请求的完整详情(headers 和 body),如果设置了 part 则返回单个部分。请使用 browser_network_requests 中提供的编号。
- Parameters:
- index (integer): 请求的索引(从 1 开始),由 browser_network_requests 打印。
- part (string, optional): 仅返回请求的此部分。省略则返回完整详情。
- filename (string, optional): 保存结果的文件名。如果未提供,则以文本形式返回输出。
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_network_requests
- Title: 列出网络请求 - Description: 返回自页面加载以来网络请求的编号列表。使用 browser_network_request 配合编号可获取完整详情。 - Parameters: - static (boolean): 是否包含成功的静态资源(如图片、字体、脚本等)。默认为 false。 - filter (string, optional): 仅返回 URL 匹配此 regexp 的请求(例如 "/api/.*user")。 - filename (string, optional): 保存网络请求的文件名。如果未提供,则以文本形式返回请求列表。 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_press_key
- Title: 按下按键
- Description: 按下键盘上的某个按键
- Parameters:
- key (string): 要按下的按键名称或要生成的字符,例如 ArrowLefta
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_resize
- Title: 调整浏览器窗口大小 - Description: 调整浏览器窗口的尺寸 - Parameters: - width (number): 浏览器窗口的宽度 - height (number): 浏览器窗口的高度 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_run_code_unsafe
- Title: 运行 Playwright 代码 (不安全) - Description: 运行一段 Playwright 代码片段。不安全:在 Playwright 服务器进程中执行任意 JavaScript,等同于 RCE。 - Parameters: - code (string, optional): 包含要执行的 Playwright 代码的 JavaScript 函数。它将接收一个名为 page 的参数,你可以使用该参数进行任何页面交互。例如:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); } - filename (string, optional): 从指定文件加载代码。如果同时提供了 code 和 filename,则忽略 code。 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_select_option
- Title: 选择选项
- Description: 在下拉列表中选择一个选项
- Parameters:
- element (string, optional): 用于获取与该元素交互权限的可读元素描述
- target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器
- values (array): 在下拉列表中选择的值数组。可以是单个值或多个值。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_snapshot
- Title: 页面快照 - Description: 捕获当前页面的 accessibility 快照,这比截图效果更好 - Parameters: - target (string, optional): 来自页面快照的精确目标元素引用,或唯一的元素选择器 - filename (string, optional): 将快照保存到 markdown 文件而非在响应中返回。 - depth (number, optional): 限制快照树的深度 - boxes (boolean, optional): 在快照中包含每个元素的边界框,格式为 [box=x,y,width,height]。坐标相对于视口,单位为 CSS 像素 (Element.getBoundingClientRect) - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_take_screenshot
- Title: 截屏
- Description: 对当前页面进行截屏。你不能基于截屏执行操作,执行操作请使用 browser_snapshot。
- Parameters:
- element (string, optional): 用于获取与该元素交互权限的可读元素描述
- target (string, optional): 来自页面 snapshot 的精确目标元素引用,或唯一的元素选择器
- type (string, optional): 截屏的图像格式。如果未设置,则从文件名扩展名推断,否则默认为 png。
- filename (string, optional): 保存截屏的文件名。如果未指定,默认为 page-{timestamp}.{png|jpeg|webp}。建议使用相对文件名以保持在输出目录内。
- fullPage (boolean, optional): 为 true 时,截取整个可滚动页面的屏幕截图,而非当前可见的视口。不能与元素截屏同时使用。
- scale (string): 图像分辨率缩放。"css" 生成以 CSS 像素为单位的截屏(较小,跨设备一致)。"device" 生成使用设备像素的高分辨率截屏(较大,考虑设备像素比)。默认为 css。
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_type
- Title: 输入文本
- Description: 在可编辑元素中输入文本
- Parameters:
- element (string, optional): 用于获取元素交互权限的可读元素描述
- target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器
- text (string): 要输入到元素中的文本
- submit (boolean, optional): 是否提交输入文本(之后按下 Enter)
- slowly (boolean, optional): 是否逐个字符输入。适用于触发页面的按键处理器。默认情况下,整个文本一次性填充。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_wait_for
- Title: 等待 - Description: 等待文本出现、消失或指定时间过去 - Parameters: - time (number, optional): 等待的时间(秒) - text (string, optional): 等待出现的文本 - textGone (string, optional): 等待消失的文本 - Read-only: false

</details>

<details>
<summary><b>标签页管理</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->- browser_tabs
- Title: 管理标签页
- Description: 列出、创建、关闭或选择浏览器标签页。
- Parameters:
- action (string): 要执行的操作
- index (number, optional): 标签页索引,用于 close/select。如果 close 时省略,则关闭当前标签页。
- url (string, optional): 新标签页要跳转的 URL,用于 new。
- Read-only: false

</details>

<details>
<summary><b>浏览器安装</b></summary>

</details>

<details>
<summary><b>配置 (通过 --caps=config 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_get_config
- Title: 获取配置 - Description: 获取合并 CLI 选项、环境变量和配置文件后的最终解析配置。 - Parameters: None - Read-only: true

</details>

<details>
<summary><b>网络 (通过 --caps=network 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_network_state_set
- Title: 设置网络状态 - Description: 将浏览器网络状态设置为在线或离线。离线时,所有网络请求都将失败。 - Parameters: - state (string): 设置为 "offline" 以模拟离线模式,"online" 以恢复网络连接 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_route
- Title: Mock 网络请求
- Description: 设置一个路由以 Mock 匹配特定 URL 模式的网络请求
- Parameters:
- pattern (string): 要匹配的 URL 模式(例如 "/api/users", "/*.{png,jpg}")
- status (number, optional): 要返回的 HTTP 状态码(默认值:200)
- body (string, optional): 响应体(文本或 JSON 字符串)
- contentType (string, optional): Content-Type 请求头(例如 "application/json", "text/html")
- headers (array, optional): 要添加的请求头,格式为 "Name: Value"
- removeHeaders (string, optional): 要从请求中移除的请求头名称列表,以逗号分隔
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_route_list
- Title: 列出网络路由 - Description: 列出所有激活的网络路由 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_unroute
- Title: 移除网络路由 - Description: 移除匹配特定模式的网络路由(如果未指定模式,则移除所有路由) - Parameters: - pattern (string, optional): 要移除路由的 URL 模式(省略则移除所有路由) - Read-only: false

</details>

<details>
<summary><b>Storage (通过 --caps=storage 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->- browser_cookie_clear
- Title: 清除 cookies
- Description: 清除所有 cookies
- Parameters: None
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_cookie_delete
- Title: 删除 cookie - Description: 删除指定的 cookie - Parameters: - name (string): 要删除的 cookie 名称 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_cookie_get
- Title: 获取 cookie - Description: 通过名称获取指定的 cookie - Parameters: - name (string): 要获取的 cookie 名称 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_cookie_list
- Title: 列出 cookies - Description: 列出所有 cookies(可选按 domain/path 过滤) - Parameters: - domain (string, optional): 按 domain 过滤 cookies - path (string, optional): 按 path 过滤 cookies - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_cookie_set
- Title: 设置 cookie
- Description: 设置一个 cookie,支持可选标志(domain, path, expires, httpOnly, secure, sameSite)
- Parameters:
- name (string): Cookie 名称
- value (string): Cookie 值
- domain (string, optional): Cookie 域名
- path (string, optional): Cookie 路径
- expires (number, optional): Cookie 过期时间(Unix 时间戳)
- httpOnly (boolean, optional): Cookie 是否仅限 HTTP
- secure (boolean, optional): Cookie 是否安全
- sameSite (string, optional): Cookie SameSite 属性
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_localstorage_clear
- Title: 清空 localStorage - Description: 清空所有 localStorage - Parameters: None - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_localstorage_delete
- Title: 删除 localStorage 项 - Description: 删除一个 localStorage 项 - Parameters: - key (string): 要删除的键 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_localstorage_get
- Title: 获取 localStorage 项 - Description: 通过键获取一个 localStorage 项 - Parameters: - key (string): 要获取的键 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_localstorage_list
- Title: 列出 localStorage
- Description: 列出所有 localStorage 键值对
- Parameters: None
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_localstorage_set
- Title: 设置 localStorage 项目 - Description: 设置一个 localStorage 项目 - Parameters: - key (string): 要设置的键 - value (string): 要设置的值 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_sessionstorage_clear
- Title: 清空 sessionStorage - Description: 清空所有 sessionStorage - Parameters: None - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_sessionstorage_delete
- Title: 删除 sessionStorage 项目 - Description: 删除一个 sessionStorage 项目 - Parameters: - key (string): 要删除的键 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_sessionstorage_get
- Title: 获取 sessionStorage 项目 - Description: 通过键获取一个 sessionStorage 项目 - Parameters: - key (string): 要获取的键 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_sessionstorage_list
- Title: 列出 sessionStorage - Description: 列出所有 sessionStorage 键值对 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_sessionstorage_set
- Title: 设置 sessionStorage 项
- Description: 设置一个 sessionStorage 项
- Parameters:
- key (string): 要设置的键
- value (string): 要设置的值
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_set_storage_state
- Title: 还原存储状态 - Description: 从文件还原存储状态(cookies, local storage)。在还原前会清除现有的 cookies 和 local storage。 - Parameters: - filename (string): 要还原的存储状态文件路径 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_storage_state
- Title: 保存存储状态 - Description: 将存储状态(cookies, local storage)保存到文件以便后续复用 - Parameters: - filename (string, optional): 保存存储状态的文件名。如果未指定,默认为 storage-state-{timestamp}.json。 - Read-only: true

</details>

<details>
<summary><b>DevTools (通过 --caps=devtools 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_annotate
- Title: 标注当前页面 - Description: 以标注模式在 Playwright Dashboard 中打开当前页面,并等待用户绘制标注。返回标注后的截图、ARIA 快照以及标注列表。 - Parameters: None - Read-only: true<!-- NOTE: This has been generated via update-readme.js -->
  • browser_hide_highlight
- Title: 隐藏元素高亮 - Description: 移除之前为该元素添加的高亮覆盖层。 - Parameters: - element (string, optional): 添加高亮时使用的可读元素描述;必须与传递给 browser_highlight 的值匹配。 - target (string, optional): 来自页面快照的精确目标元素引用,或唯一的元素选择器。 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_highlight
- Title: 高亮元素 - Description: 在页面元素周围显示一个持久的高亮覆盖层。 - Parameters: - element (string, optional): 用于获取与该元素交互权限的可读元素描述。 - target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器。 - style (string, optional): 应用于高亮覆盖层的额外内联 CSS,例如 "outline: 2px dashed red"。 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_resume
- Title: 恢复暂停的脚本执行
- Description: 恢复之前暂停的脚本执行。当 step 设置为 true 时,执行将在下一个动作前再次暂停。
- Parameters:
- step (boolean, optional): 当为 true 时,执行将在下一个动作前再次暂停,以便进行单步调试。
- location (string, optional): 在特定的 <file>:<line> 处暂停执行,例如 "example.spec.ts:42"。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_start_tracing
- Title: 开始追踪 - Description: 开始 trace 记录 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_start_video
- Title: 开始录像 - Description: 开始视频录制 - Parameters: - filename (string, optional): 保存视频的文件名。 - size (object, optional): 视频尺寸 - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_stop_tracing
- Title: 停止追踪 - Description: 停止 trace 记录 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_stop_video
- Title: 停止录像 - Description: 停止视频录制 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->- browser_video_chapter
- Title: 视频章节
- Description: 在视频录制中添加章节标记。显示带有模糊背景的全屏章节卡片。
- Parameters:
- title (string): 章节标题
- description (string, optional): 章节描述
- duration (number, optional): 显示章节卡片的时长(毫秒)
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_video_hide_actions
- Title: 隐藏操作覆盖层 - Description: 停止标注在页面上执行的操作。 - Parameters: None - Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_video_show_actions
- Title: 显示操作覆盖层 - Description: 使用标注(callout)对随后在页面上执行的操作进行标注,标注将显示操作名称并高亮目标元素。适用于视频录制或屏幕共享。 - Parameters: - duration (number, optional): 每个操作标注在屏幕上停留的时长(毫秒)。默认为 500。 - position (string, optional): 操作标题相对于页面的位置。默认为 top-right。 - cursor (string, optional): 指针操作的光标装饰。"pointer"(默认)将鼠标指针从上一个操作点动画过渡到下一个点;"none" 禁用光标装饰。 - Read-only: true

</details><details>
<summary><b>基于坐标的(通过 --caps=vision 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_mouse_click_xy
- Title: 点击 - Description: 在给定位置点击鼠标按钮 - Parameters: - x (number): X 坐标 - y (number): Y 坐标 - button (string, optional): 要点击的按钮,默认为 left - clickCount (number, optional): 点击次数,默认为 1 - delay (number, optional): 鼠标按下与抬起之间的等待时间(毫秒),默认为 0 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_mouse_down
- Title: 按下鼠标 - Description: 按下鼠标 - Parameters: - button (string, optional): 要按下的按钮,默认为 left - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_mouse_drag_xy
- Title: 拖拽鼠标 - Description: 将鼠标左键拖拽至给定位置 - Parameters: - startX (number): 起始 X 坐标 - startY (number): 起始 Y 坐标 - endX (number): 结束 X 坐标 - endY (number): 结束 Y 坐标 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_mouse_move_xy
- Title: 移动鼠标
- Description: 将鼠标移动到指定位置
- Parameters:
- x (number): X 坐标
- y (number): Y 坐标
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_mouse_up
- Title: 释放鼠标 - Description: 释放鼠标按键 - Parameters: - button (string, optional): 要释放的按键,默认为 left - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_mouse_wheel
- Title: 滚动鼠标滚轮 - Description: 滚动鼠标滚轮 - Parameters: - deltaX (number): X 轴偏移量 - deltaY (number): Y 轴偏移量 - Read-only: false

</details>

<details>
<summary><b>PDF 生成 (通过 --caps=pdf 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_pdf_save
- Title: 保存为 PDF - Description: 将页面保存为 PDF - Parameters: - filename (string, optional): 保存 PDF 的文件名。如果未指定,默认为 page-{timestamp}.pdf。建议使用相对路径以保持在输出目录内。 - Read-only: true

</details>

<details>
<summary><b>测试断言 (通过 --caps=testing 启用)</b></summary>

<!-- NOTE: This has been generated via update-readme.js -->- browser_generate_locator
- Title: 为元素创建定位器
- Description: 为给定元素生成用于测试的定位器
- Parameters:
- element (string, optional): 用于获取元素交互权限的可读元素描述
- target (string): 来自页面快照的精确目标元素引用,或唯一的元素选择器
- Read-only: true

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_verify_element_visible
- Title: 验证元素可见 - Description: 验证元素在页面上可见 - Parameters: - role (string): 元素的 ROLE。可以在快照中通过 - {ROLE} "Accessible Name": 找到 - accessibleName (string): 元素的 ACCESSIBLE_NAME。可以在快照中通过 - role "{ACCESSIBLE_NAME}" 找到 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_verify_list_visible
- Title: 验证列表可见 - Description: 验证列表在页面上可见 - Parameters: - element (string): 可读的列表描述 - target (string): 指向该列表的精确目标元素引用 - items (array): 待验证的项目 - Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->- browser_verify_text_visible
- Title: 验证文本可见
- Description: 验证页面上是否存在可见文本。如果可能,优先使用 browser_verify_element_visible
- Parameters:
- text (string): 要验证的 TEXT。可以在快照中通过 - role "Accessible Name": {TEXT}- text: {TEXT} 找到。
- Read-only: false

<!-- NOTE: This has been generated via update-readme.js -->

  • browser_verify_value
- Title: 验证值 - Description: 验证元素的值 - Parameters: - type (string): 元素类型 - element (string): 可读的元素描述 - target (string): 来自页面快照的精确目标元素引用 - value (string): 要验证的值。对于 checkbox,请使用 "true" 或 "false"。 - Read-only: false

</details>

<!--- End of tools generated section -->

查看官方来源