Playwright MCP

chính thức

Máy chủ Playwright MCP chính thức dành cho tự động hóa trình duyệt, kiểm tra trang, chụp ảnh màn hình và tương tác web từ Claude, Cursor và các tác nhân AI khác.

Bạn có thể làm gì với Playwright MCP?

  • Điều hướng và tương tác với các trang web — yêu cầu trợ lý mở một URL, nhấp vào phần tử, điền biểu mẫu hoặc trích xuất ảnh chụp nhanh cấu trúc khả năng tiếp cận bằng tính năng tự động hóa trình duyệt của Playwright.
  • Cấu hình hành vi trình duyệt — đặt loại trình duyệt, kích thước khung nhìn, giả lập thiết bị hoặc tác nhân người dùng qua các đối số --browser, --device, --viewport-size--user-agent.
  • Quản lý phiên làm việc và xác thực — sử dụng hồ sơ cố định (--user-data-dir), phiên cách ly (--isolated) hoặc tệp trạng thái lưu trữ (--storage-state) để kiểm soát trạng thái đăng nhập qua các lần chạy.
  • Kết nối với trình duyệt hiện có — gắn vào một phiên bản Chrome hoặc Edge đang chạy bằng cờ --extension để tái sử dụng các phiên đã đăng nhập mà không cần xác thực lại.
  • Kiểm soát đầu ra và ảnh chụp nhanh — ghi lại thông báo bảng điều khiển, nhật ký mạng và ảnh chụp nhanh khả năng tiếp cận vào tệp hoặc stdout bằng cách sử dụng --output-dir, --output-mode--snapshot-mode.

Tài liệu

Playwright MCP

Một máy chủ Model Context Protocol (MCP) cung cấp khả năng tự động hóa trình duyệt sử dụng Playwright. Máy chủ này cho phép các LLM tương tác với các trang web thông qua các ảnh chụp nhanh cấu trúc trợ năng, bỏ qua nhu cầu về ảnh chụp màn hình hoặc các mô hình được tinh chỉnh trực quan.

Playwright MCP so với Playwright CLI

Gói này cung cấp giao diện MCP vào Playwright. Nếu bạn đang sử dụng một tác nhân lập trình, bạn có thể hưởng lợi từ việc sử dụng CLI+SKILLS thay thế.

  • CLI: Các tác nhân lập trình hiện đại ngày càng ưa chuộng các quy trình làm việc dựa trên CLI được hiển thị dưới dạng SKILL hơn là MCP vì các lệnh gọi CLI tiết kiệm token hơn: chúng tránh tải các lược đồ công cụ lớn và cây trợ năng dài dòng vào ngữ cảnh mô hình, cho phép các tác nhân hành động thông qua các lệnh ngắn gọn, được xây dựng cho mục đích cụ thể. Điều này làm cho CLI + SKILLS phù hợp hơn cho các tác nhân lập trình thông lượng cao phải cân bằng tự động hóa trình duyệt với các cơ sở mã lớn, kiểm thử và suy luận trong các cửa sổ ngữ cảnh hạn chế.
    Tìm hiểu thêm về Playwright CLI với SKILLS.

  • MCP: MCP vẫn phù hợp với các vòng lặp tác nhân chuyên biệt được hưởng lợi từ trạng thái liên tục, khả năng xem xét nội tâm phong phú và suy luận lặp đi lặp lại trên cấu trúc trang, chẳng hạn như tự động hóa khám phá, kiểm thử tự phục hồi hoặc các quy trình làm việc tự động chạy dài, nơi việc duy trì ngữ cảnh trình duyệt liên tục vượt trội hơn các mối lo ngại về chi phí token.

Các tính năng chính

  • Nhanh và nhẹ. Sử dụng cây trợ năng của Playwright, không phải đầu vào dựa trên pixel.
  • Thân thiện với LLM. Không cần mô hình thị giác, hoạt động hoàn toàn trên dữ liệu có cấu trúc.
  • Áp dụng công cụ xác định. Tránh sự mơ hồ thường gặp với các phương pháp dựa trên ảnh chụp màn hình.

Yêu cầu

  • Node.js 18 trở lên
  • VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie hoặc bất kỳ máy khách MCP nào khác

Bắt đầu

Trước tiên, hãy cài đặt máy chủ Playwright MCP với máy khách của bạn.

Cấu hình tiêu chuẩn hoạt động trong hầu hết các công cụ:

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

Install in VS Code Install in VS Code Insiders

Amp

Thêm qua màn hình cài đặt tiện ích mở rộng Amp VS Code hoặc bằng cách cập nhật tệp settings.json của bạn:

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

Thiết lập Amp CLI:

Thêm qua lệnh amp mcp add bên dưới

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

Thêm qua cài đặt Antigravity hoặc bằng cách cập nhật tệp cấu hình của bạn:

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

Sử dụng Claude Code CLI để thêm máy chủ Playwright MCP:

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

Làm theo hướng dẫn cài đặt MCP, sử dụng cấu hình tiêu chuẩn ở trên.

Cline

Làm theo hướng dẫn trong phần Định cấu hình Máy chủ MCP

Ví dụ: Thiết lập cục bộ

Thêm phần sau vào tệp cline_mcp_settings.json của bạn:

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

Sử dụng Codex CLI để thêm máy chủ Playwright MCP:

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

Ngoài ra, hãy tạo hoặc chỉnh sửa tệp cấu hình ~/.codex/config.toml và thêm:

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

Để biết thêm thông tin, hãy xem tài liệu Codex MCP.

Copilot

Sử dụng Copilot CLI để thêm tương tác máy chủ Playwright MCP:

/mcp add

Ngoài ra, hãy tạo hoặc chỉnh sửa tệp cấu hình ~/.copilot/mcp-config.json và thêm:

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

Để biết thêm thông tin, hãy xem tài liệu Copilot CLI.

Cursor

Nhấp vào nút để cài đặt:

Install in Cursor

Hoặc cài đặt thủ công:

Đi tới Cursor Settings -> MCP -> Add new MCP Server. Đặt tên tùy thích, sử dụng loại command với lệnh npx @playwright/mcp@latest. Bạn cũng có thể xác minh cấu hình hoặc thêm các đối số dòng lệnh bằng cách nhấp vào Edit.

Factory

Sử dụng Factory CLI để thêm máy chủ Playwright MCP:

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

Ngoài ra, hãy nhập /mcp trong Factory droid để mở giao diện người dùng tương tác để quản lý máy chủ MCP.

Để biết thêm thông tin, hãy xem tài liệu Factory MCP.

Gemini CLI

Làm theo hướng dẫn cài đặt MCP, sử dụng cấu hình tiêu chuẩn ở trên.

Goose

Nhấp vào nút để cài đặt:

Install in Goose

Hoặc cài đặt thủ công:

Đi tới Advanced settings -> Extensions -> Add custom extension. Đặt tên tùy thích, sử dụng loại STDIO và đặt command thành npx @playwright/mcp. Nhấp vào "Thêm Tiện ích mở rộng".

Grok

Sử dụng Grok CLI để thêm máy chủ Playwright MCP:

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

Ngoài ra, hãy tạo hoặc chỉnh sửa tệp cấu hình ~/.grok/config.toml và thêm:

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

Để biết thêm thông tin, hãy xem tài liệu Grok MCP.

Junie

Để thêm máy chủ Playwright MCP trong Junie CLI:

  1. Nhập /mcp
  2. Nhấn Ctrl+A để thêm máy chủ MCP mới
  3. Chọn Playwright từ danh sách

Ngoài ra, hãy thêm vào .junie/mcp/mcp.json:

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

Để biết thêm thông tin, hãy xem tài liệu cấu hình Junie MCP.

Kiro

Add to Kiro

Làm theo tài liệu về Máy chủ MCP. Ví dụ trong .kiro/settings/mcp.json:

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

Nhấp vào nút để cài đặt:

Add MCP Server playwright to LM Studio

Hoặc cài đặt thủ công:

Đi tới Program trong thanh bên phải -> Install -> Edit mcp.json. Sử dụng cấu hình tiêu chuẩn ở trên.

opencode

Làm theo tài liệu về Máy chủ MCP. Ví dụ trong ~/.config/opencode/opencode.json:

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

Qodo Gen

Mở bảng trò chuyện Qodo Gen trong VSCode hoặc IntelliJ → Kết nối thêm công cụ → + Thêm MCP mới → Dán cấu hình tiêu chuẩn ở trên.

Nhấp vào Lưu.

VS Code

Nhấp vào nút để cài đặt:

Install in VS Code Install in VS Code Insiders

Hoặc cài đặt thủ công:

Làm theo hướng dẫn cài đặt MCP, sử dụng cấu hình tiêu chuẩn ở trên. Bạn cũng có thể cài đặt máy chủ Playwright MCP bằng VS Code CLI:

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

Sau khi cài đặt, máy chủ Playwright MCP sẽ sẵn sàng để sử dụng với tác nhân GitHub Copilot của bạn trong VS Code.

Warp

Đi tới Settings -> AI -> Manage MCP Servers -> + Add để thêm Máy chủ MCP. Sử dụng cấu hình tiêu chuẩn ở trên.

Ngoài ra, hãy sử dụng lệnh gạch chéo /add-mcp trong lời nhắc Warp và dán cấu hình tiêu chuẩn từ trên:

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

Làm theo tài liệu Windsurf MCP. Sử dụng cấu hình tiêu chuẩn ở trên.

Cấu hình

Máy chủ Playwright MCP hỗ trợ các đối số sau. Chúng có thể được cung cấp trong cấu hình JSON ở trên, như một phần của danh sách "args":

Tùy chọnMô tả
--allowed-hosts <hosts...>danh sách các máy chủ được phép phục vụ, phân tách bằng dấu phẩy. Mặc định là máy chủ mà server được liên kết. Truyền '*' để tắt kiểm tra máy chủ.
env PLAYWRIGHT_MCP_ALLOWED_HOSTS
--allowed-origins danh sách các nguồn TIN CẬY được phép yêu cầu từ trình duyệt, phân tách bằng dấu chấm phẩy. Mặc định là cho phép tất cả. Quan trọng: không đóng vai trò là ranh giới bảo mật và không ảnh hưởng đến chuyển hướng.
env PLAYWRIGHT_MCP_ALLOWED_ORIGINS
--allow-unrestricted-file-accesscho phép truy cập vào các tệp bên ngoài thư mục gốc của không gian làm việc. Cũng cho phép truy cập không hạn chế vào các URL file://. Theo mặc định, quyền truy cập hệ thống tệp bị giới hạn chỉ trong các thư mục gốc của không gian làm việc (hoặc thư mục làm việc hiện tại nếu không có thư mục gốc nào được cấu hình) và việc điều hướng đến các URL file:// bị chặn.
env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
--blocked-origins danh sách các nguồn bị chặn yêu cầu từ trình duyệt, phân tách bằng dấu chấm phẩy. Danh sách chặn được đánh giá trước danh sách cho phép. Nếu sử dụng mà không có danh sách cho phép, các yêu cầu không khớp với danh sách chặn vẫn được phép. Quan trọng: không đóng vai trò là ranh giới bảo mật và không ảnh hưởng đến chuyển hướng.
env PLAYWRIGHT_MCP_BLOCKED_ORIGINS
--block-service-workerschặn service worker
env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS
--browser trình duyệt hoặc kênh chrome sẽ sử dụng, các giá trị có thể: chrome, firefox, webkit, msedge.
env PLAYWRIGHT_MCP_BROWSER
--caps danh sách các khả năng bổ sung để kích hoạt, phân tách bằng dấu phẩy, các giá trị có thể: vision, pdf, devtools.
env PLAYWRIGHT_MCP_CAPS
--cdp-endpoint Điểm cuối CDP để kết nối đến.
env PLAYWRIGHT_MCP_CDP_ENDPOINT
--cdp-header <headers...>Tiêu đề CDP để gửi cùng yêu cầu kết nối, có thể chỉ định nhiều lần.
env PLAYWRIGHT_MCP_CDP_HEADERS
--cdp-timeout thời gian chờ tính bằng mili giây để kết nối đến điểm cuối CDP, mặc định là 30000ms
env PLAYWRIGHT_MCP_CDP_TIMEOUT
--codegen chỉ định ngôn ngữ sử dụng để tạo mã, các giá trị có thể: "typescript", "none". Mặc định là "typescript".
env PLAYWRIGHT_MCP_CODEGEN
--config đường dẫn đến tệp cấu hình.
env PLAYWRIGHT_MCP_CONFIG
--console-level mức độ thông báo console sẽ trả về: "error", "warning", "info", "debug". Mỗi mức bao gồm các thông báo của các mức nghiêm trọng hơn.
env PLAYWRIGHT_MCP_CONSOLE_LEVEL
--device thiết bị để mô phỏng, ví dụ: "iPhone 15"
env PLAYWRIGHT_MCP_DEVICE
--mobilemô phỏng một thiết bị di động chung (Pixel 10 cho Chromium, iPhone 17 cho WebKit). Các trang di động thường nhẹ hơn, giúp tiết kiệm token. Không thể kết hợp với --device.
env PLAYWRIGHT_MCP_MOBILE
--executable-path đường dẫn đến tệp thực thi của trình duyệt.
env PLAYWRIGHT_MCP_EXECUTABLE_PATH
--extensionKết nối đến một phiên bản trình duyệt đang chạy (chỉ Edge/Chrome). Yêu cầu cài đặt "Playwright Extension".
env PLAYWRIGHT_MCP_EXTENSION
--endpoint Điểm cuối trình duyệt đã liên kết để kết nối đến.
env PLAYWRIGHT_MCP_ENDPOINT
--grant-permissions <permissions...>Danh sách các quyền để cấp cho ngữ cảnh trình duyệt, ví dụ "geolocation", "clipboard-read", "clipboard-write".
env PLAYWRIGHT_MCP_GRANT_PERMISSIONS
--headlesschạy trình duyệt ở chế độ headless, mặc định là có giao diện
env PLAYWRIGHT_MCP_HEADLESS
--host máy chủ để liên kết server. Mặc định là localhost. Sử dụng 0.0.0.0 để liên kết với tất cả các giao diện.
env PLAYWRIGHT_MCP_HOST
--ignore-https-errorsbỏ qua lỗi https
env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS
--init-page <path...>đường dẫn đến tệp TypeScript để đánh giá trên đối tượng trang Playwright
env PLAYWRIGHT_MCP_INIT_PAGE
--init-script <path...>đường dẫn đến tệp JavaScript để thêm làm tập lệnh khởi tạo. Tập lệnh sẽ được đánh giá trong mỗi trang trước bất kỳ tập lệnh nào của trang. Có thể chỉ định nhiều lần.
env PLAYWRIGHT_MCP_INIT_SCRIPT
--isolatedgiữ hồ sơ trình duyệt trong bộ nhớ, không lưu vào đĩa.
env PLAYWRIGHT_MCP_ISOLATED
--image-responses có gửi phản hồi hình ảnh cho máy khách hay không. Có thể là "allow" hoặc "omit", Mặc định là "allow".
env PLAYWRIGHT_MCP_IMAGE_RESPONSES
--no-sandboxtắt sandbox cho tất cả các loại tiến trình thường được sandbox.
env PLAYWRIGHT_MCP_NO_SANDBOX
--output-dir đường dẫn đến thư mục cho các tệp đầu ra.
env PLAYWRIGHT_MCP_OUTPUT_DIR
--output-max-size Ngưỡng để loại bỏ các tệp đầu ra cũ, tính bằng byte.
env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE
--output-mode lưu ảnh chụp nhanh, thông báo console, nhật ký mạng vào tệp hay đầu ra tiêu chuẩn. Có thể là "file" hoặc "stdout". Mặc định là "stdout".
env PLAYWRIGHT_MCP_OUTPUT_MODE
--port cổng để lắng nghe cho truyền tải SSE.
env PLAYWRIGHT_MCP_PORT
--proxy-bypass các miền được bỏ qua proxy, phân tách bằng dấu phẩy, ví dụ ".com,chromium.org,.domain.com"
env PLAYWRIGHT_MCP_PROXY_BYPASS
--proxy-server chỉ định máy chủ proxy, ví dụ "http://myproxy:3128" hoặc "socks5://myproxy:8080"
env PLAYWRIGHT_MCP_PROXY_SERVER
--sandboxbật sandbox cho tất cả các loại tiến trình thường không được sandbox.
env PLAYWRIGHT_MCP_SANDBOX
--save-sessionCó lưu phiên Playwright MCP vào thư mục đầu ra hay không.
env PLAYWRIGHT_MCP_SAVE_SESSION
--secrets đường dẫn đến tệp chứa bí mật ở định dạng dotenv
env PLAYWRIGHT_MCP_SECRETS_FILE
--shared-browser-contexttái sử dụng cùng một ngữ cảnh trình duyệt giữa tất cả các máy khách HTTP được kết nối.
env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT
--snapshot-mode khi chụp ảnh nhanh cho phản hồi, chỉ định chế độ sử dụng. Có thể là "full" hoặc "none". Mặc định là "full".
env PLAYWRIGHT_MCP_SNAPSHOT_MODE
--storage-state đường dẫn đến tệp trạng thái lưu trữ cho các phiên cô lập.
env PLAYWRIGHT_MCP_STORAGE_STATE
--test-id-attribute chỉ định thuộc tính để sử dụng cho test id, mặc định là "data-testid"
env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE
--timeout-action chỉ định thời gian chờ hành động tính bằng mili giây, mặc định là 5000ms
env PLAYWRIGHT_MCP_TIMEOUT_ACTION
--timeout-navigation chỉ định thời gian chờ điều hướng tính bằng mili giây, mặc định là 60000ms
env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION
--user-agent chỉ định chuỗi tác nhân người dùng
env PLAYWRIGHT_MCP_USER_AGENT
--user-data-dir đường dẫn đến thư mục dữ liệu người dùng. Nếu không được chỉ định, một thư mục tạm thời sẽ được tạo.
env PLAYWRIGHT_MCP_USER_DATA_DIR
--viewport-size chỉ định kích thước khung nhìn trình duyệt bằng pixel, ví dụ "1280x720"
env PLAYWRIGHT_MCP_VIEWPORT_SIZE

Hồ sơ người dùng

Bạn có thể chạy Playwright MCP với hồ sơ cố định như một trình duyệt thông thường (mặc định), trong các ngữ cảnh cô lập cho các phiên kiểm thử, hoặc kết nối với trình duyệt hiện có của bạn bằng tiện ích mở rộng trình duyệt.

Hồ sơ cố định

Tất cả thông tin đã đăng nhập sẽ được lưu trữ trong hồ sơ cố định, bạn có thể xóa nó giữa các phiên nếu muốn xóa trạng thái ngoại tuyến. Hồ sơ cố định nằm ở các vị trí sau và bạn có thể ghi đè nó bằng đối số --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} được lấy từ thư mục gốc không gian làm việc của máy khách MCP, vì vậy các dự án khác nhau sẽ tự động có các hồ sơ riêng biệt.

[!IMPORTANT] Một hồ sơ cố định chỉ có thể được sử dụng bởi một phiên bản trình duyệt tại một thời điểm, vì vậy các máy khách MCP đồng thời chia sẻ cùng một không gian làm việc sẽ xung đột. Để chạy nhiều máy khách song song, hãy khởi động mỗi máy khách bổ sung với --isolated hoặc trỏ nó đến một --user-data-dir riêng biệt.

Cô lập

Trong chế độ cô lập, mỗi phiên được bắt đầu trong hồ sơ cô lập. Mỗi khi bạn yêu cầu MCP đóng trình duyệt, phiên sẽ kết thúc và tất cả trạng thái lưu trữ cho phiên này sẽ bị mất. Bạn có thể cung cấp trạng thái lưu trữ ban đầu cho trình duyệt thông qua contextOptions của cấu hình hoặc thông qua đối số --storage-state. Tìm hiểu thêm về trạng thái lưu trữ tại đây.

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

Tiện ích mở rộng trình duyệt

Playwright MCP Chrome Extension cho phép bạn kết nối với các tab trình duyệt hiện có và tận dụng các phiên đã đăng nhập và trạng thái trình duyệt của bạn. Xem microsoft/playwright › packages/extension để biết hướng dẫn cài đặt và thiết lập.

Trạng thái ban đầu

Có nhiều cách để cung cấp trạng thái ban đầu cho ngữ cảnh trình duyệt hoặc một trang.

Đối với trạng thái lưu trữ, bạn có thể:

  • Bắt đầu với một thư mục dữ liệu người dùng bằng đối số --user-data-dir. Điều này sẽ duy trì tất cả dữ liệu trình duyệt giữa các phiên.
  • Bắt đầu với một tệp trạng thái lưu trữ bằng đối số --storage-state. Điều này sẽ tải cookie và bộ nhớ cục bộ từ tệp vào một ngữ cảnh trình duyệt cô lập.

Đối với trạng thái trang, bạn có thể sử dụng:

  • --init-page để trỏ đến một tệp TypeScript sẽ được đánh giá trên đối tượng trang Playwright. Điều này cho phép bạn chạy mã tùy ý để thiết lập trang.
// 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 để trỏ đến một tệp JavaScript sẽ được thêm làm tập lệnh khởi tạo. Tập lệnh sẽ được đánh giá trong mỗi trang trước bất kỳ tập lệnh nào của trang. Điều này hữu ích để ghi đè các API trình duyệt hoặc thiết lập môi trường.
// init-script.js
window.isPlaywrightMCP = true;

Tệp cấu hình

Máy chủ Playwright MCP có thể được cấu hình bằng tệp cấu hình JSON. Bạn có thể chỉ định tệp cấu hình bằng tùy chọn dòng lệnh --config:

npx @playwright/mcp@latest --config path/to/config.json
Lược đồ tệp cấu hình
{
  /**
   * 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;
  };

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

  /**
   * 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' | 'none';
}

Máy chủ MCP độc lập

Khi chạy trình duyệt có giao diện trên hệ thống không có màn hình hoặc từ các tiến trình worker của IDE, hãy chạy máy chủ MCP từ môi trường có DISPLAY và truyền cờ --port để kích hoạt truyền tải HTTP.

npx @playwright/mcp@latest --port 8931

Và sau đó trong cấu hình máy khách MCP, đặt url thành điểm cuối HTTP:

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

Bảo mật

Playwright MCP không phải là ranh giới bảo mật. Xem Thực hành tốt nhất về bảo mật MCP để được hướng dẫn bảo mật triển khai của bạn.

Docker

LƯU Ý: Việc triển khai Docker hiện chỉ hỗ trợ chromium headless.

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

Hoặc nếu bạn muốn chạy container như một dịch vụ lâu dài thay vì để máy khách MCP khởi tạo nó, hãy sử dụng:

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

Máy chủ sẽ lắng nghe trên cổng máy chủ 8931 và có thể được truy cập bởi bất kỳ máy khách MCP nào.

Bạn có thể tự xây dựng hình ảnh Docker.

docker build -t mcr.microsoft.com/playwright/mcp .
Sử dụng theo chương trình
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);

  // ...
});

Công cụ

Tự động hóa cốt lõi - **browser_click**
  • Tiêu đề: Nhấp chuột
  • Mô tả: Thực hiện thao tác nhấp chuột trên trang web
  • Tham số:
    • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
    • target (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
    • doubleClick (boolean, tùy chọn): Có thực hiện nhấp đúp thay vì nhấp đơn hay không
    • button (chuỗi, tùy chọn): Nút chuột để nhấp, mặc định là chuột trái
    • modifiers (mảng, tùy chọn): Các phím bổ trợ cần nhấn
  • Chỉ đọc: false
  • browser_close
    • Tiêu đề: Đóng trình duyệt
    • Mô tả: Đóng trang hiện tại
    • Tham số: Không có
    • Chỉ đọc: false
  • browser_console_messages
    • Tiêu đề: Lấy thông báo từ bảng điều khiển
    • Mô tả: Trả về tất cả thông báo từ bảng điều khiển
    • Tham số:
      • level (chuỗi): Cấp độ của thông báo bảng điều khiển cần trả về. Mỗi cấp độ bao gồm các thông báo của cấp độ nghiêm trọng hơn. Mặc định là "info".
      • all (boolean, tùy chọn): Trả về tất cả thông báo bảng điều khiển kể từ đầu phiên, không chỉ từ lần điều hướng cuối cùng. Mặc định là false.
      • filename (chuỗi, tùy chọn): Tên tệp để lưu thông báo bảng điều khiển. Nếu không được cung cấp, thông báo được trả về dưới dạng văn bản.
    • Chỉ đọc: true
  • browser_drag
    • Tiêu đề: Kéo chuột
    • Mô tả: Thực hiện thao tác kéo và thả giữa hai phần tử
    • Tham số:
      • startElement (chuỗi, tùy chọn): Mô tả phần tử nguồn dễ đọc dùng để xin quyền tương tác với phần tử
      • startTarget (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • endElement (chuỗi, tùy chọn): Mô tả phần tử đích dễ đọc dùng để xin quyền tương tác với phần tử
      • endTarget (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
    • Chỉ đọc: false
  • browser_drop
    • Tiêu đề: Thả tệp hoặc dữ liệu vào phần tử
    • Mô tả: Thả tệp hoặc dữ liệu kiểu MIME vào một phần tử, như thể được kéo từ bên ngoài trang. Phải cung cấp ít nhất một trong hai "paths" hoặc "data".
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • paths (mảng, tùy chọn): Đường dẫn tuyệt đối đến các tệp cần thả vào phần tử.
      • data (đối tượng, tùy chọn): Dữ liệu cần thả, dưới dạng bản đồ kiểu MIME với giá trị chuỗi (ví dụ: {"text/plain": "xin chào", "text/uri-list": "https://example.com"}).
    • Chỉ đọc: false
  • browser_evaluate
    • Tiêu đề: Đánh giá JavaScript
    • Mô tả: Đánh giá biểu thức JavaScript trên trang hoặc phần tử
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi, tùy chọn): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • function (chuỗi): () => { /* mã / } hoặc (element) => { / mã */ } khi phần tử được cung cấp
      • filename (chuỗi, tùy chọn): Tên tệp để lưu kết quả. Nếu không được cung cấp, kết quả được trả về dưới dạng văn bản.
    • Chỉ đọc: false
  • browser_file_upload
    • Tiêu đề: Tải tệp lên
    • Mô tả: Tải lên một hoặc nhiều tệp
    • Tham số:
      • paths (mảng, tùy chọn): Đường dẫn tuyệt đối đến các tệp cần tải lên. Có thể là một tệp hoặc nhiều tệp. Nếu bỏ qua, hộp thoại chọn tệp sẽ bị hủy.
    • Chỉ đọc: false
  • browser_fill_form
    • Tiêu đề: Điền biểu mẫu
    • Mô tả: Điền nhiều trường biểu mẫu
    • Tham số:
      • fields (mảng): Các trường cần điền
    • Chỉ đọc: false
  • browser_find
    • Tiêu đề: Tìm trong ảnh chụp nhanh trang
    • Mô tả: Tìm kiếm văn bản hoặc biểu thức chính quy trong ảnh chụp nhanh trợ năng của trang hiện tại. Trả về các nút ảnh chụp nhanh khớp với một vài dòng ngữ cảnh xung quanh (giống như đoạn trích tìm kiếm), mỗi nút được hiển thị dưới đường dẫn từ gốc của cây, cách này ít tốn kém hơn so với việc chụp toàn bộ ảnh chụp nhanh khi bạn chỉ cần định vị một phần tử và tham chiếu của nó.
    • Tham số:
      • text (chuỗi, tùy chọn): Văn bản thuần túy để tìm kiếm trong ảnh chụp nhanh trang (khớp chuỗi con không phân biệt chữ hoa chữ thường). Cung cấp văn bản hoặc biểu thức chính quy, không phải cả hai.
      • regex (chuỗi, tùy chọn): Biểu thức chính quy để tìm kiếm trong ảnh chụp nhanh trang. Mặc định khớp phân biệt chữ hoa chữ thường; bọc mẫu trong dấu gạch chéo để thêm cờ, ví dụ: "/error/i" cho không phân biệt chữ hoa chữ thường. Cung cấp văn bản hoặc biểu thức chính quy, không phải cả hai.
    • Chỉ đọc: true
  • browser_handle_dialog
    • Tiêu đề: Xử lý hộp thoại
    • Mô tả: Xử lý một hộp thoại
    • Tham số:
      • accept (boolean): Có chấp nhận hộp thoại hay không.
      • promptText (chuỗi, tùy chọn): Văn bản của lời nhắc trong trường hợp hộp thoại nhắc.
    • Chỉ đọc: false
  • browser_hover
    • Tiêu đề: Di chuột
    • Mô tả: Di chuột qua phần tử trên trang
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
    • Chỉ đọc: false
  • browser_navigate
    • Tiêu đề: Điều hướng đến URL
    • Mô tả: Điều hướng đến một URL
    • Tham số:
      • url (chuỗi): URL cần điều hướng đến
    • Chỉ đọc: false
  • browser_navigate_back
    • Tiêu đề: Quay lại
    • Mô tả: Quay lại trang trước đó trong lịch sử
    • Tham số: Không có
    • Chỉ đọc: false
  • browser_network_request
    • Tiêu đề: Hiển thị chi tiết yêu cầu mạng
    • Mô tả: Trả về chi tiết đầy đủ (tiêu đề và nội dung) của một yêu cầu mạng đơn lẻ, hoặc một phần đơn lẻ nếu part được đặt. Sử dụng số từ browser_network_requests.
    • Tham số:
      • index (số nguyên): Chỉ mục dựa trên 1 của yêu cầu, như được in bởi browser_network_requests.
      • part (chuỗi, tùy chọn): Chỉ trả về phần này của yêu cầu. Bỏ qua để trả về chi tiết đầy đủ.
      • filename (chuỗi, tùy chọn): Tên tệp để lưu kết quả. Nếu không được cung cấp, đầu ra được trả về dưới dạng văn bản.
    • Chỉ đọc: true
  • browser_network_requests
    • Tiêu đề: Liệt kê yêu cầu mạng
    • Mô tả: Trả về danh sách được đánh số các yêu cầu mạng kể từ khi tải trang. Sử dụng browser_network_request với số để lấy chi tiết đầy đủ.
    • Tham số:
      • static (boolean): Có bao gồm các tài nguyên tĩnh thành công như hình ảnh, phông chữ, tập lệnh, v.v. hay không. Mặc định là false.
      • filter (chuỗi, tùy chọn): Chỉ trả về các yêu cầu có URL khớp với biểu thức chính quy này (ví dụ: "/api/.*user").
      • filename (chuỗi, tùy chọn): Tên tệp để lưu các yêu cầu mạng. Nếu không được cung cấp, các yêu cầu được trả về dưới dạng văn bản.
    • Chỉ đọc: true
  • browser_press_key
    • Tiêu đề: Nhấn một phím
    • Mô tả: Nhấn một phím trên bàn phím
    • Tham số:
      • key (chuỗi): Tên của phím cần nhấn hoặc một ký tự để tạo, chẳng hạn như ArrowLeft hoặc a
    • Chỉ đọc: false
  • browser_resize
    • Tiêu đề: Thay đổi kích thước cửa sổ trình duyệt
    • Mô tả: Thay đổi kích thước cửa sổ trình duyệt
    • Tham số:
      • width (số): Chiều rộng của cửa sổ trình duyệt
      • height (số): Chiều cao của cửa sổ trình duyệt
    • Chỉ đọc: false
  • browser_run_code_unsafe
    • Tiêu đề: Chạy mã Playwright (không an toàn)
    • Mô tả: Chạy một đoạn mã Playwright. Không an toàn: thực thi JavaScript tùy ý trong tiến trình máy chủ Playwright và tương đương với RCE.
    • Tham số:
      • code (chuỗi, tùy chọn): Một hàm JavaScript chứa mã Playwright để thực thi. Nó sẽ được gọi với một đối số duy nhất, page, mà bạn có thể sử dụng cho bất kỳ tương tác trang nào. Ví dụ: async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }
      • filename (chuỗi, tùy chọn): Tải mã từ tệp được chỉ định. Nếu cả code và filename đều được cung cấp, code sẽ bị bỏ qua.
    • Chỉ đọc: false
  • browser_select_option
    • Tiêu đề: Chọn tùy chọn
    • Mô tả: Chọn một tùy chọn trong danh sách thả xuống
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • values (mảng): Mảng các giá trị để chọn trong danh sách thả xuống. Đây có thể là một giá trị đơn hoặc nhiều giá trị.
    • Chỉ đọc: false
  • browser_snapshot
    • Tiêu đề: Ảnh chụp nhanh trang
    • Mô tả: Chụp ảnh chụp nhanh trợ năng của trang hiện tại, cách này tốt hơn ảnh chụp màn hình
    • Tham số:
      • target (chuỗi, tùy chọn): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • filename (chuỗi, tùy chọn): Lưu ảnh chụp nhanh vào tệp markdown thay vì trả về trong phản hồi.
      • depth (số, tùy chọn): Giới hạn độ sâu của cây ảnh chụp nhanh
      • boxes (boolean, tùy chọn): Bao gồm hộp giới hạn của mỗi phần tử dưới dạng [box=x,y,width,height] trong ảnh chụp nhanh. Tọa độ tương đối với khung nhìn, tính bằng pixel CSS (Element.getBoundingClientRect)
    • Chỉ đọc: true
  • browser_take_screenshot
    • Tiêu đề: Chụp ảnh màn hình
    • Mô tả: Chụp ảnh màn hình của trang hiện tại. Bạn không thể thực hiện hành động dựa trên ảnh chụp màn hình, hãy sử dụng browser_snapshot cho các hành động.
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi, tùy chọn): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • type (chuỗi): Định dạng ảnh cho ảnh chụp màn hình. Mặc định là png.
      • filename (chuỗi, tùy chọn): Tên tệp để lưu ảnh chụp màn hình. Mặc định là page-{timestamp}.{png|jpeg} nếu không được chỉ định. Nên dùng tên tệp tương đối để ở trong thư mục đầu ra.
      • fullPage (boolean, tùy chọn): Khi true, chụp ảnh màn hình của toàn bộ trang có thể cuộn, thay vì chỉ khung nhìn hiện tại. Không thể sử dụng với ảnh chụp màn hình phần tử.
      • scale (chuỗi): Tỷ lệ độ phân giải ảnh. "css" tạo ra ảnh chụp màn hình có kích thước bằng pixel CSS (nhỏ hơn, nhất quán trên các thiết bị). "device" tạo ra ảnh chụp màn hình độ phân giải cao sử dụng pixel thiết bị (lớn hơn, tính đến tỷ lệ pixel của thiết bị). Mặc định là css.
    • Chỉ đọc: true
  • browser_type
    • Tiêu đề: Nhập văn bản
    • Mô tả: Nhập văn bản vào phần tử có thể chỉnh sửa
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc dùng để xin quyền tương tác với phần tử
      • target (chuỗi): Tham chiếu chính xác đến phần tử đích từ ảnh chụp nhanh trang, hoặc bộ chọn phần tử duy nhất
      • text (chuỗi): Văn bản để nhập vào phần tử
      • submit (boolean, tùy chọn): Có gửi văn bản đã nhập hay không (nhấn Enter sau khi nhập)
      • slowly (boolean, tùy chọn): Có nhập từng ký tự một hay không. Hữu ích để kích hoạt trình xử lý phím trong trang. Theo mặc định, toàn bộ văn bản được điền cùng một lúc.
    • Chỉ đọc: false
  • browser_wait_for
    • Tiêu đề: Chờ
    • Mô tả: Chờ văn bản xuất hiện hoặc biến mất hoặc một khoảng thời gian nhất định trôi qua
    • Tham số:
      • time (số, tùy chọn): Thời gian chờ tính bằng giây
      • text (chuỗi, tùy chọn): Văn bản cần chờ
      • textGone (chuỗi, tùy chọn): Văn bản cần chờ biến mất
    • Chỉ đọc: false
Quản lý tab
  • browser_tabs
    • Tiêu đề: Quản lý tab
    • Mô tả: Liệt kê, tạo, đóng hoặc chọn một tab trình duyệt.
    • Tham số:
      • action (chuỗi): Thao tác cần thực hiện
      • index (số, tùy chọn): Chỉ mục tab, dùng cho đóng/chọn. Nếu bỏ qua khi đóng, tab hiện tại sẽ bị đóng.
      • url (chuỗi, tùy chọn): URL để điều hướng đến trong tab mới, dùng cho tạo mới.
    • Chỉ đọc: false
Cài đặt trình duyệt
Cấu hình (chọn tham gia qua --caps=config)
  • browser_get_config
    • Tiêu đề: Lấy cấu hình
    • Mô tả: Lấy cấu hình đã được giải quyết cuối cùng sau khi hợp nhất các tùy chọn CLI, biến môi trường và tệp cấu hình.
    • Tham số: Không có
    • Chỉ đọc: true
Mạng (chọn tham gia qua --caps=network)
  • browser_network_state_set
    • Tiêu đề: Đặt trạng thái mạng
    • Mô tả: Đặt trạng thái mạng của trình duyệt thành trực tuyến hoặc ngoại tuyến. Khi ngoại tuyến, tất cả các yêu cầu mạng sẽ thất bại.
    • Tham số:
      • state (chuỗi): Đặt thành "offline" để mô phỏng chế độ ngoại tuyến, "online" để khôi phục kết nối mạng
    • Chỉ đọc: false
  • browser_route
    • Tiêu đề: Giả lập yêu cầu mạng
    • Mô tả: Thiết lập một tuyến đường để giả lập các yêu cầu mạng khớp với một mẫu URL
    • Tham số:
      • pattern (chuỗi): Mẫu URL để khớp (ví dụ: "/api/users", "/*.{png,jpg}")
      • status (số, tùy chọn): Mã trạng thái HTTP để trả về (mặc định: 200)
      • body (chuỗi, tùy chọn): Nội dung phản hồi (văn bản hoặc chuỗi JSON)
      • contentType (chuỗi, tùy chọn): Tiêu đề Content-Type (ví dụ: "application/json", "text/html")
      • headers (mảng, tùy chọn): Các tiêu đề cần thêm vào theo định dạng "Tên: Giá trị"
      • removeHeaders (chuỗi, tùy chọn): Danh sách tên tiêu đề cần xóa khỏi yêu cầu, phân tách bằng dấu phẩy
    • Chỉ đọc: false
  • browser_route_list
    • Tiêu đề: Liệt kê các tuyến mạng
    • Mô tả: Liệt kê tất cả các tuyến mạng đang hoạt động
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_unroute
    • Tiêu đề: Xóa các tuyến mạng
    • Mô tả: Xóa các tuyến mạng khớp với một mẫu (hoặc tất cả các tuyến nếu không chỉ định mẫu)
    • Tham số:
      • pattern (chuỗi, tùy chọn): Mẫu URL cần hủy tuyến (bỏ qua để xóa tất cả các tuyến)
    • Chỉ đọc: false
Lưu trữ (chọn tham gia qua --caps=storage)
  • browser_cookie_clear
    • Tiêu đề: Xóa cookie
    • Mô tả: Xóa tất cả cookie
    • Tham số: Không có
    • Chỉ đọc: false
  • browser_cookie_delete
    • Tiêu đề: Xóa cookie
    • Mô tả: Xóa một cookie cụ thể
    • Tham số:
      • name (chuỗi): Tên cookie cần xóa
    • Chỉ đọc: false
  • browser_cookie_get
    • Tiêu đề: Lấy cookie
    • Mô tả: Lấy một cookie cụ thể theo tên
    • Tham số:
      • name (chuỗi): Tên cookie cần lấy
    • Chỉ đọc: true
  • browser_cookie_list
    • Tiêu đề: Liệt kê cookie
    • Mô tả: Liệt kê tất cả cookie (tùy chọn lọc theo tên miền/đường dẫn)
    • Tham số:
      • domain (chuỗi, tùy chọn): Lọc cookie theo tên miền
      • path (chuỗi, tùy chọn): Lọc cookie theo đường dẫn
    • Chỉ đọc: true
  • browser_cookie_set
    • Tiêu đề: Đặt cookie
    • Mô tả: Đặt một cookie với các cờ tùy chọn (domain, path, expires, httpOnly, secure, sameSite)
    • Tham số:
      • name (chuỗi): Tên cookie
      • value (chuỗi): Giá trị cookie
      • domain (chuỗi, tùy chọn): Tên miền cookie
      • path (chuỗi, tùy chọn): Đường dẫn cookie
      • expires (số, tùy chọn): Thời gian hết hạn cookie dưới dạng dấu thời gian Unix
      • httpOnly (boolean, tùy chọn): Cookie có phải là HTTP only hay không
      • secure (boolean, tùy chọn): Cookie có phải là secure hay không
      • sameSite (chuỗi, tùy chọn): Thuộc tính SameSite của cookie
    • Chỉ đọc: false
  • browser_localstorage_clear
    • Tiêu đề: Xóa localStorage
    • Mô tả: Xóa tất cả localStorage
    • Tham số: Không có
    • Chỉ đọc: false
  • browser_localstorage_delete
    • Tiêu đề: Xóa mục localStorage
    • Mô tả: Xóa một mục localStorage
    • Tham số:
      • key (chuỗi): Khóa cần xóa
    • Chỉ đọc: false
  • browser_localstorage_get
    • Tiêu đề: Lấy mục localStorage
    • Mô tả: Lấy một mục localStorage theo khóa
    • Tham số:
      • key (chuỗi): Khóa cần lấy
    • Chỉ đọc: true
  • browser_localstorage_list
    • Tiêu đề: Liệt kê localStorage
    • Mô tả: Liệt kê tất cả các cặp khóa-giá trị localStorage
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_localstorage_set
    • Tiêu đề: Đặt mục localStorage
    • Mô tả: Đặt một mục localStorage
    • Tham số:
      • key (chuỗi): Khóa cần đặt
      • value (chuỗi): Giá trị cần đặt
    • Chỉ đọc: false
  • browser_sessionstorage_clear
    • Tiêu đề: Xóa sessionStorage
    • Mô tả: Xóa tất cả sessionStorage
    • Tham số: Không có
    • Chỉ đọc: false
  • browser_sessionstorage_delete
    • Tiêu đề: Xóa mục sessionStorage
    • Mô tả: Xóa một mục sessionStorage
    • Tham số:
      • key (chuỗi): Khóa cần xóa
    • Chỉ đọc: false
  • browser_sessionstorage_get
    • Tiêu đề: Lấy mục sessionStorage
    • Mô tả: Lấy một mục sessionStorage theo khóa
    • Tham số:
      • key (chuỗi): Khóa cần lấy
    • Chỉ đọc: true
  • browser_sessionstorage_list
    • Tiêu đề: Liệt kê sessionStorage
    • Mô tả: Liệt kê tất cả các cặp khóa-giá trị sessionStorage
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_sessionstorage_set
    • Tiêu đề: Đặt mục sessionStorage
    • Mô tả: Đặt một mục sessionStorage
    • Tham số:
      • key (chuỗi): Khóa cần đặt
      • value (chuỗi): Giá trị cần đặt
    • Chỉ đọc: false
  • browser_set_storage_state
    • Tiêu đề: Khôi phục trạng thái lưu trữ
    • Mô tả: Khôi phục trạng thái lưu trữ (cookie, local storage) từ một tệp. Thao tác này sẽ xóa cookie và local storage hiện có trước khi khôi phục.
    • Tham số:
      • filename (chuỗi): Đường dẫn đến tệp trạng thái lưu trữ để khôi phục từ đó
    • Chỉ đọc: false
  • browser_storage_state
    • Tiêu đề: Lưu trạng thái lưu trữ
    • Mô tả: Lưu trạng thái lưu trữ (cookie, local storage) vào một tệp để tái sử dụng sau
    • Tham số:
      • filename (chuỗi, tùy chọn): Tên tệp để lưu trạng thái lưu trữ. Mặc định là storage-state-{timestamp}.json nếu không được chỉ định.
    • Chỉ đọc: true
DevTools (chọn tham gia qua --caps=devtools)
  • browser_annotate
    • Tiêu đề: Chú thích trang hiện tại
    • Mô tả: Mở Playwright Dashboard ở chế độ chú thích cho trang hiện tại và chờ người dùng vẽ chú thích. Trả về ảnh chụp màn hình đã chú thích, ảnh chụp nhanh ARIA và danh sách các chú thích.
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_hide_highlight
    • Tiêu đề: Ẩn đánh dấu phần tử
    • Mô tả: Xóa lớp phủ đánh dấu đã được thêm trước đó cho phần tử.
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc được sử dụng khi thêm đánh dấu; phải khớp với giá trị đã truyền cho browser_highlight.
      • target (chuỗi, tùy chọn): Tham chiếu phần tử đích chính xác từ ảnh chụp nhanh trang, hoặc một bộ chọn phần tử duy nhất
    • Chỉ đọc: true
  • browser_highlight
    • Tiêu đề: Đánh dấu phần tử
    • Mô tả: Hiển thị lớp phủ đánh dấu liên tục xung quanh phần tử trên trang.
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc được sử dụng để xin phép tương tác với phần tử
      • target (chuỗi): Tham chiếu phần tử đích chính xác từ ảnh chụp nhanh trang, hoặc một bộ chọn phần tử duy nhất
      • style (chuỗi, tùy chọn): CSS nội tuyến bổ sung áp dụng cho lớp phủ đánh dấu, ví dụ: "outline: 2px dashed red".
    • Chỉ đọc: true
  • browser_resume
    • Tiêu đề: Tiếp tục thực thi script đã tạm dừng
    • Mô tả: Tiếp tục thực thi script sau khi nó bị tạm dừng. Khi được gọi với step đặt thành true, việc thực thi sẽ tạm dừng lại trước hành động tiếp theo.
    • Tham số:
      • step (boolean, tùy chọn): Khi true, việc thực thi sẽ tạm dừng lại trước hành động tiếp theo, cho phép gỡ lỗi từng bước.
      • location (chuỗi, tùy chọn): Tạm dừng thực thi tại một : cụ thể, ví dụ: "example.spec.ts:42".
    • Chỉ đọc: false
  • browser_start_tracing
    • Tiêu đề: Bắt đầu tracing
    • Mô tả: Bắt đầu ghi trace
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_start_video
    • Tiêu đề: Bắt đầu quay video
    • Mô tả: Bắt đầu quay video
    • Tham số:
      • filename (chuỗi, tùy chọn): Tên tệp để lưu video.
      • size (đối tượng, tùy chọn): Kích thước video
    • Chỉ đọc: true
  • browser_stop_tracing
    • Tiêu đề: Dừng tracing
    • Mô tả: Dừng ghi trace
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_stop_video
    • Tiêu đề: Dừng quay video
    • Mô tả: Dừng quay video
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_video_chapter
    • Tiêu đề: Chương video
    • Mô tả: Thêm điểm đánh dấu chương vào bản ghi video. Hiển thị thẻ chương toàn màn hình với nền mờ.
    • Tham số:
      • title (chuỗi): Tiêu đề chương
      • description (chuỗi, tùy chọn): Mô tả chương
      • duration (số, tùy chọn): Thời lượng tính bằng mili giây để hiển thị thẻ chương
    • Chỉ đọc: true
  • browser_video_hide_actions
    • Tiêu đề: Ẩn lớp phủ hành động
    • Mô tả: Dừng chú thích các hành động được thực hiện trên trang.
    • Tham số: Không có
    • Chỉ đọc: true
  • browser_video_show_actions
    • Tiêu đề: Hiển thị lớp phủ hành động
    • Mô tả: Chú thích các hành động tiếp theo được thực hiện trên trang bằng một chú thích gọi tên hành động và đánh dấu phần tử đích. Hữu ích khi đang quay video hoặc phát trực tiếp màn hình.
    • Tham số:
      • duration (số, tùy chọn): Thời gian mỗi chú thích hành động ở trên màn hình, tính bằng mili giây. Mặc định là 500.
      • position (chuỗi, tùy chọn): Vị trí đặt tiêu đề hành động so với trang. Mặc định là top-right.
      • cursor (chuỗi, tùy chọn): Trang trí con trỏ cho các hành động con trỏ. "pointer" (mặc định) tạo hiệu ứng động con trỏ chuột từ điểm hành động trước đó đến điểm tiếp theo; "none" vô hiệu hóa trang trí con trỏ.
    • Chỉ đọc: true
Dựa trên tọa độ (chọn tham gia qua --caps=vision)
  • browser_mouse_click_xy
    • Tiêu đề: Nhấp chuột
    • Mô tả: Nhấp nút chuột tại một vị trí nhất định
    • Tham số:
      • x (số): Tọa độ X
      • y (số): Tọa độ Y
      • button (chuỗi, tùy chọn): Nút để nhấp, mặc định là bên trái
      • clickCount (số, tùy chọn): Số lần nhấp, mặc định là 1
      • delay (số, tùy chọn): Thời gian chờ giữa nhấn và thả chuột tính bằng mili giây, mặc định là 0
    • Chỉ đọc: false
  • browser_mouse_down
    • Tiêu đề: Nhấn giữ chuột
    • Mô tả: Nhấn giữ chuột
    • Tham số:
      • button (chuỗi, tùy chọn): Nút để nhấn, mặc định là bên trái
    • Chỉ đọc: false
  • browser_mouse_drag_xy
    • Tiêu đề: Kéo chuột
    • Mô tả: Kéo nút chuột trái đến một vị trí nhất định
    • Tham số:
      • startX (số): Tọa độ X bắt đầu
      • startY (số): Tọa độ Y bắt đầu
      • endX (số): Tọa độ X kết thúc
      • endY (số): Tọa độ Y kết thúc
    • Chỉ đọc: false
  • browser_mouse_move_xy
    • Tiêu đề: Di chuyển chuột
    • Mô tả: Di chuyển chuột đến một vị trí nhất định
    • Tham số:
      • x (số): Tọa độ X
      • y (số): Tọa độ Y
    • Chỉ đọc: false
  • browser_mouse_up
    • Tiêu đề: Thả chuột
    • Mô tả: Thả chuột
    • Tham số:
      • button (chuỗi, tùy chọn): Nút để thả, mặc định là bên trái
    • Chỉ đọc: false
  • browser_mouse_wheel
    • Tiêu đề: Cuộn bánh xe chuột
    • Mô tả: Cuộn bánh xe chuột
    • Tham số:
      • deltaX (số): Delta X
      • deltaY (số): Delta Y
    • Chỉ đọc: false
Tạo PDF (chọn tham gia qua --caps=pdf)
  • browser_pdf_save
    • Tiêu đề: Lưu dưới dạng PDF
    • Mô tả: Lưu trang dưới dạng PDF
    • Tham số:
      • filename (chuỗi, tùy chọn): Tên tệp để lưu pdf. Mặc định là page-{timestamp}.pdf nếu không được chỉ định. Nên dùng tên tệp tương đối để nằm trong thư mục đầu ra.
    • Chỉ đọc: true
Xác nhận kiểm thử (chọn tham gia qua --caps=testing)
  • browser_generate_locator
    • Tiêu đề: Tạo bộ định vị cho phần tử
    • Mô tả: Tạo bộ định vị cho phần tử đã cho để sử dụng trong kiểm thử
    • Tham số:
      • element (chuỗi, tùy chọn): Mô tả phần tử dễ đọc được sử dụng để xin phép tương tác với phần tử
      • target (chuỗi): Tham chiếu phần tử đích chính xác từ ảnh chụp nhanh trang, hoặc một bộ chọn phần tử duy nhất
    • Chỉ đọc: true
  • browser_verify_element_visible
    • Tiêu đề: Xác minh phần tử hiển thị
    • Mô tả: Xác minh phần tử hiển thị trên trang
    • Tham số:
      • role (chuỗi): VAI TRÒ của phần tử. Có thể tìm thấy trong ảnh chụp nhanh như sau: - {ROLE} "Accessible Name":
      • accessibleName (chuỗi): TÊN_TRUY_CẬP của phần tử. Có thể tìm thấy trong ảnh chụp nhanh như sau: - role "{ACCESSIBLE_NAME}"
    • Chỉ đọc: false
  • browser_verify_list_visible
    • Tiêu đề: Xác minh danh sách hiển thị
    • Mô tả: Xác minh danh sách hiển thị trên trang
    • Tham số:
      • element (chuỗi): Mô tả danh sách dễ đọc
      • target (chuỗi): Tham chiếu phần tử đích chính xác trỏ đến danh sách
      • items (mảng): Các mục cần xác minh
    • Chỉ đọc: false
  • browser_verify_text_visible
    • Tiêu đề: Xác minh văn bản hiển thị
    • Mô tả: Xác minh văn bản hiển thị trên trang. Nên dùng browser_verify_element_visible nếu có thể.
    • Tham số:
      • text (chuỗi): VĂN BẢN cần xác minh. Có thể tìm thấy trong ảnh chụp nhanh như sau: - role "Accessible Name": {TEXT} hoặc như sau: - text: {TEXT}
    • Chỉ đọc: false
  • browser_verify_value
    • Tiêu đề: Xác minh giá trị
    • Mô tả: Xác minh giá trị phần tử
    • Tham số:
      • type (chuỗi): Loại của phần tử
      • element (chuỗi): Mô tả phần tử dễ đọc
      • target (chuỗi): Tham chiếu phần tử đích chính xác từ ảnh chụp nhanh trang
      • value (chuỗi): Giá trị cần xác minh. Đối với hộp kiểm, sử dụng "true" hoặc "false".
    • Chỉ đọc: false