Playwright MCP
공식공식 Playwright MCP 서버로, Claude, Cursor 및 기타 AI 에이전트에서 브라우저 자동화, 페이지 검사, 스크린샷 및 웹 상호작용을 지원합니다.
Playwright MCP(으)로 무엇을 할 수 있나요?
- 웹 페이지 탐색 및 상호작용 — Playwright의 브라우저 자동화를 사용해 URL 열기, 요소 클릭, 양식 작성 또는 구조화된 접근성 스냅샷 추출을 어시스턴트에 요청하세요.
- 브라우저 동작 구성 —
--browser,--device,--viewport-size,--user-agent인수를 통해 브라우저 유형, 뷰포트 크기, 기기 에뮬레이션 또는 사용자 에이전트를 설정하세요. - 세션 및 인증 관리 — 영구 프로필(
--user-data-dir), 격리된 세션(--isolated) 또는 저장소 상태 파일(--storage-state)을 사용하여 실행 간 로그인 상태를 제어하세요. - 기존 브라우저에 연결 —
--extension플래그를 사용해 실행 중인 Chrome 또는 Edge 인스턴스에 연결하여 재인증 없이 로그인된 세션을 재사용하세요. - 출력 및 스냅샷 제어 —
--output-dir,--output-mode,--snapshot-mode를 사용해 콘솔 메시지, 네트워크 로그 및 접근성 스냅샷을 파일이나 표준 출력으로 캡처하세요.
문서
Playwright MCP
Playwright을 사용하여 브라우저 자동화 기능을 제공하는 MCP(Model Context Protocol) 서버입니다. 이 서버를 통해 LLM은 구조화된 접근성 스냅샷을 통해 웹 페이지와 상호 작용할 수 있으므로 스크린샷이나 시각적으로 조정된 모델이 필요하지 않습니다.
Playwright MCP vs Playwright CLI
이 패키지는 Playwright에 대한 MCP 인터페이스를 제공합니다. 코딩 에이전트를 사용하는 경우 대신 CLI+SKILLS를 사용하는 것이 좋습니다.
-
CLI: 최신 코딩 에이전트는 CLI 호출이 더 토큰 효율적이기 때문에 MCP보다 SKILL로 노출되는 CLI 기반 워크플로를 점점 더 선호합니다. 즉, 대규모 도구 스키마와 장황한 접근성 트리를 모델 컨텍스트에 로드하지 않아도 되므로 에이전트가 간결하고 목적에 맞게 구축된 명령을 통해 작업할 수 있습니다. 따라서 CLI + SKILLS는 제한된 컨텍스트 창 내에서 브라우저 자동화와 대규모 코드베이스, 테스트, 추론 간의 균형을 유지해야 하는 처리량이 높은 코딩 에이전트에 더 적합합니다.
SKILLS가 포함된 Playwright CLI에 대해 자세히 알아보기. -
MCP: MCP는 탐색적 자동화, 자가 치유 테스트 또는 지속적인 브라우저 컨텍스트 유지가 토큰 비용 문제보다 중요한 장기 실행 자율 워크플로와 같이 영구 상태, 풍부한 내부 검사 및 페이지 구조에 대한 반복적 추론의 이점을 활용하는 특수 에이전트 루프와 여전히 관련이 있습니다.
주요 기능
- 빠르고 가벼움. 픽셀 기반 입력이 아닌 Playwright의 접근성 트리를 사용합니다.
- LLM 친화적. 비전 모델이 필요 없으며 구조화된 데이터만으로 작동합니다.
- 결정적 도구 적용. 스크린샷 기반 접근 방식에서 흔히 발생하는 모호성을 방지합니다.
요구 사항
- Node.js 18 이상
- VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie 또는 기타 MCP 클라이언트
시작하기
먼저 클라이언트와 함께 Playwright MCP 서버를 설치합니다.
표준 구성은 대부분의 도구에서 작동합니다:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Amp
Amp VS Code 확장 설정 화면을 통해 또는 settings.json 파일을 업데이트하여 추가합니다:
"amp.mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
Amp CLI 설정:
아래 amp mcp add 명령을 통해 추가합니다.
amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity
Antigravity 설정을 통해 또는 구성 파일을 업데이트하여 추가합니다:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Code
Claude Code CLI를 사용하여 Playwright MCP 서버를 추가합니다:
claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop
MCP 설치 가이드를 따르고 위의 표준 구성을 사용합니다.
Cline
MCP 서버 구성 섹션의 지침을 따릅니다.
예: 로컬 설정
cline_mcp_settings.json 파일에 다음을 추가합니다:
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"timeout": 30,
"args": [
"-y",
"@playwright/mcp@latest"
],
"disabled": false
}
}
}
Codex
Codex CLI를 사용하여 Playwright MCP 서버를 추가합니다:
codex mcp add playwright npx "@playwright/mcp@latest"
또는 구성 파일 ~/.codex/config.toml을(를) 만들거나 편집하고 다음을 추가합니다:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
자세한 내용은 Codex MCP 문서를 참조하세요.
Copilot
Copilot CLI를 사용하여 대화형으로 Playwright MCP 서버를 추가합니다:
/mcp add
또는 구성 파일 ~/.copilot/mcp-config.json을(를) 만들거나 편집하고 다음을 추가합니다:
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@playwright/mcp@latest"
]
}
}
}
자세한 내용은 Copilot CLI 문서를 참조하세요.
Cursor
버튼을 클릭하여 설치:
또는 수동으로 설치:
Cursor Settings -> MCP -> Add new MCP Server로 이동합니다. 원하는 이름을 지정하고 command 유형과 npx @playwright/mcp@latest 명령을 사용합니다. Edit을(를) 클릭하여 구성을 확인하거나 인수와 같은 명령을 추가할 수도 있습니다.
Factory
Factory CLI를 사용하여 Playwright MCP 서버를 추가합니다:
droid mcp add playwright "npx @playwright/mcp@latest"
또는 Factory droid 내에서 /mcp을(를) 입력하여 MCP 서버 관리를 위한 대화형 UI를 엽니다.
자세한 내용은 Factory MCP 문서를 참조하세요.
Gemini CLI
MCP 설치 가이드를 따르고 위의 표준 구성을 사용합니다.
Goose
버튼을 클릭하여 설치:
또는 수동으로 설치:
Advanced settings -> Extensions -> Add custom extension로 이동합니다. 원하는 이름을 지정하고 STDIO 유형을 사용하며 command을(를) npx @playwright/mcp(으)로 설정합니다. "확장 프로그램 추가"를 클릭합니다.
Grok
Grok CLI를 사용하여 Playwright MCP 서버를 추가합니다:
grok mcp add playwright -- npx @playwright/mcp@latest
또는 구성 파일 ~/.grok/config.toml을(를) 만들거나 편집하고 다음을 추가합니다:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
자세한 내용은 Grok MCP 문서를 참조하세요.
Junie
Junie CLI에서 Playwright MCP 서버를 추가하려면:
/mcp입력Ctrl+A을(를) 눌러 새 MCP 서버 추가- 목록에서 Playwright 선택
또는 .junie/mcp/mcp.json에 추가:
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}
자세한 내용은 Junie MCP 구성 문서를 참조하세요.
Kiro
MCP 서버 문서를 따릅니다. 예를 들어 .kiro/settings/mcp.json에서:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
LM Studio
버튼을 클릭하여 설치:
또는 수동으로 설치:
오른쪽 사이드바의 Program -> Install -> Edit mcp.json로 이동합니다. 위의 표준 구성을 사용합니다.
opencode
MCP 서버 문서를 따릅니다. 예를 들어 ~/.config/opencode/opencode.json에서:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest"
],
"enabled": true
}
}
}
Qodo Gen
VSCode 또는 IntelliJ에서 Qodo Gen 채팅 패널 열기 → 추가 도구 연결 → + 새 MCP 추가 → 위의 표준 구성을 붙여넣습니다.
저장을 클릭합니다.
VS Code
버튼을 클릭하여 설치:
또는 수동으로 설치:
MCP 설치 가이드를 따르고 위의 표준 구성을 사용합니다. VS Code CLI를 사용하여 Playwright MCP 서버를 설치할 수도 있습니다:
# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
설치 후 VS Code에서 GitHub Copilot 에이전트와 함께 Playwright MCP 서버를 사용할 수 있습니다.
Warp
Settings -> AI -> Manage MCP Servers -> + Add로 이동하여 MCP 서버 추가합니다. 위의 표준 구성을 사용합니다.
또는 Warp 프롬프트에서 슬래시 명령 /add-mcp을(를) 사용하고 위의 표준 구성을 붙여넣습니다:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurf
Windsurf MCP 문서를 따릅니다. 위의 표준 구성을 사용합니다.
구성
Playwright MCP 서버는 다음 인수를 지원합니다. 위의 JSON 구성에서 "args" 목록의 일부로 제공할 수 있습니다:
| 옵션 | 설명 |
|---|---|
| --allowed-hosts <hosts...> | 이 서버가 제공을 허용하는 호스트의 쉼표로 구분된 목록입니다. 기본값은 서버가 바인딩된 호스트입니다. 호스트 확인을 비활성화하려면 '*'를 전달하세요. env PLAYWRIGHT_MCP_ALLOWED_HOSTS |
| --allowed-origins | 브라우저가 요청하도록 허용할 신뢰할 수 있는 출처의 세미콜론으로 구분된 목록입니다. 기본값은 모두 허용입니다. 중요: 보안 경계 역할을 하지 않으며 리디렉션에 영향을 주지 않습니다. env PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | 작업 영역 루트 외부의 파일에 대한 액세스를 허용합니다. file:// URL에 대한 무제한 액세스도 허용합니다. 기본적으로 파일 시스템 액세스는 작업 영역 루트 디렉터리(또는 루트가 구성되지 않은 경우 cwd)로만 제한되며 file:// URL로의 탐색이 차단됩니다. env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS |
| --blocked-origins | 브라우저가 요청하지 못하도록 차단할 출처의 세미콜론으로 구분된 목록입니다. 차단 목록은 허용 목록보다 먼저 평가됩니다. 허용 목록 없이 사용하면 차단 목록과 일치하지 않는 요청은 여전히 허용됩니다. 중요: 보안 경계 역할을 하지 않으며 리디렉션에 영향을 주지 않습니다. env PLAYWRIGHT_MCP_BLOCKED_ORIGINS |
| --block-service-workers | 서비스 워커를 차단합니다. env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS |
| --browser | 사용할 브라우저 또는 Chrome 채널, 가능한 값: chrome, firefox, webkit, msedge. env PLAYWRIGHT_MCP_BROWSER |
| --caps | 활성화할 추가 기능의 쉼표로 구분된 목록, 가능한 값: vision, pdf, devtools. env PLAYWRIGHT_MCP_CAPS |
| --cdp-endpoint | 연결할 CDP 엔드포인트입니다. env PLAYWRIGHT_MCP_CDP_ENDPOINT |
| --cdp-header <headers...> | 연결 요청과 함께 보낼 CDP 헤더로, 여러 개를 지정할 수 있습니다. env PLAYWRIGHT_MCP_CDP_HEADERS |
| --cdp-timeout | CDP 엔드포인트 연결에 대한 밀리초 단위의 타임아웃, 기본값은 30000ms입니다. env PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen | 코드 생성에 사용할 언어를 지정합니다. 가능한 값: "typescript", "none". 기본값은 "typescript"입니다. env PLAYWRIGHT_MCP_CODEGEN |
| --config | 구성 파일의 경로입니다. env PLAYWRIGHT_MCP_CONFIG |
| --console-level | 반환할 콘솔 메시지 수준: "error", "warning", "info", "debug". 각 수준에는 더 심각한 수준의 메시지가 포함됩니다. env PLAYWRIGHT_MCP_CONSOLE_LEVEL |
| --device | 에뮬레이트할 기기, 예: "iPhone 15" env PLAYWRIGHT_MCP_DEVICE |
| --mobile | 일반적인 모바일 기기를 에뮬레이트합니다(Chromium의 경우 Pixel 10, WebKit의 경우 iPhone 17). 모바일 페이지는 일반적으로 더 가벼워 토큰을 절약합니다. --device와 함께 사용할 수 없습니다. env PLAYWRIGHT_MCP_MOBILE |
| --executable-path | 브라우저 실행 파일의 경로입니다. env PLAYWRIGHT_MCP_EXECUTABLE_PATH |
| --extension | 실행 중인 브라우저 인스턴스에 연결합니다(Edge/Chrome만 해당). "Playwright Extension"이 설치되어 있어야 합니다. env PLAYWRIGHT_MCP_EXTENSION |
| --endpoint | 연결할 바인딩된 브라우저 엔드포인트입니다. env PLAYWRIGHT_MCP_ENDPOINT |
| --grant-permissions <permissions...> | 브라우저 컨텍스트에 부여할 권한 목록, 예: "geolocation", "clipboard-read", "clipboard-write". env PLAYWRIGHT_MCP_GRANT_PERMISSIONS |
| --headless | 브라우저를 헤드리스 모드로 실행합니다. 기본값은 헤드 모드입니다. env PLAYWRIGHT_MCP_HEADLESS |
| --host | 서버를 바인딩할 호스트입니다. 기본값은 localhost입니다. 모든 인터페이스에 바인딩하려면 0.0.0.0을 사용하세요. env PLAYWRIGHT_MCP_HOST |
| --ignore-https-errors | https 오류를 무시합니다. env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS |
| --init-page <path...> | Playwright 페이지 객체에서 평가할 TypeScript 파일의 경로입니다. env PLAYWRIGHT_MCP_INIT_PAGE |
| --init-script <path...> | 초기화 스크립트로 추가할 JavaScript 파일의 경로입니다. 이 스크립트는 페이지의 모든 스크립트보다 먼저 각 페이지에서 평가됩니다. 여러 번 지정할 수 있습니다. env PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | 브라우저 프로필을 메모리에 유지하고 디스크에 저장하지 않습니다. env PLAYWRIGHT_MCP_ISOLATED |
| --image-responses | 클라이언트에 이미지 응답을 보낼지 여부입니다. "allow" 또는 "omit"이 될 수 있으며, 기본값은 "allow"입니다. env PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | 일반적으로 샌드박스 처리되는 모든 프로세스 유형에 대해 샌드박스를 비활성화합니다. env PLAYWRIGHT_MCP_NO_SANDBOX |
| --output-dir | 출력 파일을 위한 디렉터리 경로입니다. env PLAYWRIGHT_MCP_OUTPUT_DIR |
| --output-max-size | 오래된 출력 파일을 제거하기 위한 임계값(바이트)입니다. env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE |
| --output-mode | 스냅샷, 콘솔 메시지, 네트워크 로그를 파일 또는 표준 출력으로 저장할지 여부입니다. "file" 또는 "stdout"이 될 수 있습니다. 기본값은 "stdout"입니다. env PLAYWRIGHT_MCP_OUTPUT_MODE |
| --port | SSE 전송을 위해 수신 대기할 포트입니다. env PLAYWRIGHT_MCP_PORT |
| --proxy-bypass | 프록시를 우회할 쉼표로 구분된 도메인, 예: ".com,chromium.org,.domain.com" env PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server | 프록시 서버를 지정합니다, 예: "http://myproxy:3128" 또는 "socks5://myproxy:8080" env PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | 일반적으로 샌드박스 처리되지 않는 모든 프로세스 유형에 대해 샌드박스를 활성화합니다. env PLAYWRIGHT_MCP_SANDBOX |
| --save-session | Playwright MCP 세션을 출력 디렉터리에 저장할지 여부입니다. env PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets | dotenv 형식의 비밀이 포함된 파일의 경로입니다. env PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | 연결된 모든 HTTP 클라이언트 간에 동일한 브라우저 컨텍스트를 재사용합니다. env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-mode | 응답을 위해 스냅샷을 찍을 때 사용할 모드를 지정합니다. "full" 또는 "none"이 될 수 있습니다. 기본값은 "full"입니다. env PLAYWRIGHT_MCP_SNAPSHOT_MODE |
| --storage-state | 격리된 세션을 위한 스토리지 상태 파일의 경로입니다. env PLAYWRIGHT_MCP_STORAGE_STATE |
| --test-id-attribute | 테스트 ID에 사용할 속성을 지정합니다. 기본값은 "data-testid"입니다. env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action | 작업 타임아웃을 밀리초 단위로 지정합니다. 기본값은 5000ms입니다. env PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation | 탐색 타임아웃을 밀리초 단위로 지정합니다. 기본값은 60000ms입니다. env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --user-agent | 사용자 에이전트 문자열을 지정합니다. env PLAYWRIGHT_MCP_USER_AGENT |
| --user-data-dir | 사용자 데이터 디렉터리의 경로입니다. 지정하지 않으면 임시 디렉터리가 생성됩니다. env PLAYWRIGHT_MCP_USER_DATA_DIR |
| --viewport-size | 브라우저 뷰포트 크기를 픽셀 단위로 지정합니다, 예: "1280x720" env PLAYWRIGHT_MCP_VIEWPORT_SIZE |
사용자 프로필
Playwright MCP를 일반 브라우저처럼 영구 프로필로 실행하거나(기본값), 테스트 세션을 위해 격리된 컨텍스트에서 실행하거나, 브라우저 확장 프로그램을 사용하여 기존 브라우저에 연결할 수 있습니다.
영구 프로필
로그인된 모든 정보는 영구 프로필에 저장되며, 오프라인 상태를 지우려면 세션 간에 삭제할 수 있습니다.
영구 프로필은 다음 위치에 있으며 --user-data-dir 인수를 사용하여 재정의할 수 있습니다.
# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}
# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}
# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}
{workspace-hash}은(는) MCP 클라이언트의 작업 영역 루트에서 파생되므로 프로젝트마다 자동으로 별도의 프로필이 생성됩니다.
[!IMPORTANT] 영구 프로필은 한 번에 하나의 브라우저 인스턴스에서만 사용할 수 있으므로 동일한 작업 영역을 공유하는 동시 MCP 클라이언트는 충돌합니다. 여러 클라이언트를 병렬로 실행하려면 각 추가 클라이언트를
--isolated로 시작하거나 별도의--user-data-dir을(를) 지정하세요.
격리됨
격리 모드에서는 각 세션이 격리된 프로필에서 시작됩니다. MCP에 브라우저를 닫도록 요청할 때마다
세션이 종료되고 이 세션의 모든 스토리지 상태가 손실됩니다. 구성의 contextOptions 또는 --storage-state 인수를 통해 브라우저에 초기 스토리지 상태를 제공할 수 있습니다. 스토리지 상태에 대한 자세한 내용은 여기에서 확인하세요.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
브라우저 확장 프로그램
Playwright MCP Chrome 확장 프로그램을 사용하면 기존 브라우저 탭에 연결하고 로그인된 세션 및 브라우저 상태를 활용할 수 있습니다. 설치 및 설정 지침은 microsoft/playwright › packages/extension을(를) 참조하세요.
초기 상태
브라우저 컨텍스트나 페이지에 초기 상태를 제공하는 여러 가지 방법이 있습니다.
스토리지 상태의 경우 다음 중 하나를 수행할 수 있습니다.
--user-data-dir인수를 사용하여 사용자 데이터 디렉터리로 시작합니다. 이렇게 하면 모든 브라우저 데이터가 세션 간에 유지됩니다.--storage-state인수를 사용하여 스토리지 상태 파일로 시작합니다. 이렇게 하면 파일에서 쿠키와 로컬 스토리지가 격리된 브라우저 컨텍스트로 로드됩니다.
페이지 상태의 경우 다음을 사용할 수 있습니다.
--init-page을(를) 사용하여 Playwright 페이지 객체에서 평가될 TypeScript 파일을 가리킵니다. 이를 통해 페이지 설정을 위한 임의의 코드를 실행할 수 있습니다.
// init-page.ts
export default async ({ page }) => {
await page.context().grantPermissions(['geolocation']);
await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
await page.setViewportSize({ width: 1280, height: 720 });
};
--init-script을(를) 사용하여 초기화 스크립트로 추가될 JavaScript 파일을 가리킵니다. 이 스크립트는 페이지의 모든 스크립트보다 먼저 각 페이지에서 평가됩니다. 이는 브라우저 API를 재정의하거나 환경을 설정하는 데 유용합니다.
// init-script.js
window.isPlaywrightMCP = true;
구성 파일
Playwright MCP 서버는 JSON 구성 파일을 사용하여 구성할 수 있습니다. --config 명령줄 옵션을 사용하여 구성 파일을 지정할 수 있습니다.
npx @playwright/mcp@latest --config path/to/config.json
구성 파일 스키마
{
/**
* The browser to use.
*/
browser?: {
/**
* The type of browser to use.
*/
browserName?: 'chromium' | 'firefox' | 'webkit';
/**
* Keep the browser profile in memory, do not save it to disk.
*/
isolated?: boolean;
/**
* Path to a user data directory for browser profile persistence.
* Temporary directory is created by default.
*/
userDataDir?: string;
/**
* Launch options passed to
* @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
*
* This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
*/
launchOptions?: playwright.LaunchOptions;
/**
* Context options for the browser context.
*
* This is useful for settings options like `viewport`.
*/
contextOptions?: playwright.BrowserContextOptions;
/**
* Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
*/
cdpEndpoint?: string;
/**
* CDP headers to send with the connect request.
*/
cdpHeaders?: Record<string, string>;
/**
* Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
*/
cdpTimeout?: number;
/**
* Remote endpoint to connect to an existing Playwright server. May be a
* WebSocket URL string, or a [ConnectOptions] object that mirrors the
* `connectOptions` shape used by the test runner. When passed as an object,
* `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
* underlying connect call.
*/
remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };
/**
* Paths to TypeScript files to add as initialization scripts for Playwright page.
*/
initPage?: string[];
/**
* Paths to JavaScript files to add as initialization scripts.
* The scripts will be evaluated in every page before any of the page's scripts.
*/
initScript?: string[];
},
/**
* Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
* config is ignored.
* Requires the "Playwright Extension" to be installed.
*/
extension?: boolean;
server?: {
/**
* The port to listen on for SSE or MCP transport.
*/
port?: number;
/**
* The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
*/
host?: string;
/**
* The hosts this server is allowed to serve from. Defaults to the host server is bound to.
* This is not for CORS, but rather for the DNS rebinding protection.
*/
allowedHosts?: string[];
},
/**
* List of enabled tool capabilities. Possible values:
* - 'core': Core browser automation features.
* - 'pdf': PDF generation and manipulation.
* - 'vision': Coordinate-based interactions.
* - 'devtools': Developer tools features.
*/
capabilities?: ToolCapability[];
/**
* Whether to save the Playwright session into the output directory.
*/
saveSession?: boolean;
/**
* 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';
}
독립형 MCP 서버
디스플레이가 없는 시스템이나 IDE의 작업자 프로세스에서 헤드 브라우저를 실행할 때는
DISPLAY가 있는 환경에서 MCP 서버를 실행하고 --port 플래그를 전달하여 HTTP 전송을 활성화하세요.
npx @playwright/mcp@latest --port 8931
그런 다음 MCP 클라이언트 구성에서 url을(를) HTTP 엔드포인트로 설정합니다.
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
보안
Playwright MCP는 보안 경계가 아닙니다. 배포 보안에 대한 지침은 MCP 보안 모범 사례를 참조하세요.
Docker
참고: Docker 구현은 현재 헤드리스 chromium만 지원합니다.
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
또는 MCP 클라이언트가 컨테이너를 생성하도록 하는 대신 장기 실행 서비스로 컨테이너를 실행하려면 다음을 사용하세요.
docker run -d -i --rm --init --pull=always \
--entrypoint node \
--name playwright \
-p 8931:8931 \
mcr.microsoft.com/playwright/mcp \
/app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0
서버는 호스트 포트 8931에서 수신 대기하며 모든 MCP 클라이언트에서 연결할 수 있습니다.
Docker 이미지를 직접 빌드할 수 있습니다.
docker build -t mcr.microsoft.com/playwright/mcp .
프로그래밍 방식 사용
import http from 'http';
import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
http.createServer(async (req, res) => {
// ...
// Creates a headless Playwright MCP server with SSE transport
const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
const transport = new SSEServerTransport('/messages', res);
await connection.connect(transport);
// ...
});
도구
핵심 자동화
- **browser_click**- 제목: 클릭
- 설명: 웹 페이지에서 클릭을 수행합니다
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자doubleClick(불리언, 선택 사항): 단일 클릭 대신 더블 클릭을 수행할지 여부button(문자열, 선택 사항): 클릭할 버튼, 기본값은 왼쪽modifiers(배열, 선택 사항): 누를 보조 키
- 읽기 전용: false
- browser_close
- 제목: 브라우저 닫기
- 설명: 페이지를 닫습니다
- 매개변수: 없음
- 읽기 전용: false
- browser_console_messages
- 제목: 콘솔 메시지 가져오기
- 설명: 모든 콘솔 메시지를 반환합니다
- 매개변수:
level(문자열): 반환할 콘솔 메시지의 레벨입니다. 각 레벨에는 더 심각한 레벨의 메시지가 포함됩니다. 기본값은 "info"입니다.all(불리언, 선택 사항): 마지막 탐색 이후뿐만 아니라 세션 시작 이후의 모든 콘솔 메시지를 반환합니다. 기본값은 false입니다.filename(문자열, 선택 사항): 콘솔 메시지를 저장할 파일 이름입니다. 제공되지 않으면 메시지가 텍스트로 반환됩니다.
- 읽기 전용: true
- browser_drag
- 제목: 마우스 드래그
- 설명: 두 요소 간에 드래그 앤 드롭을 수행합니다
- 매개변수:
startElement(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 소스 요소 설명startTarget(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자endElement(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 대상 요소 설명endTarget(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
- 읽기 전용: false
- browser_drop
- 제목: 요소에 파일 또는 데이터 드롭
- 설명: 페이지 외부에서 드래그한 것처럼 요소에 파일 또는 MIME 유형 데이터를 드롭합니다. "paths" 또는 "data" 중 하나 이상을 제공해야 합니다.
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자paths(배열, 선택 사항): 요소에 드롭할 파일의 절대 경로입니다.data(객체, 선택 사항): MIME 유형을 문자열 값에 매핑한 드롭할 데이터입니다 (예: {"text/plain": "hello", "text/uri-list": "https://example.com"}).
- 읽기 전용: false
- browser_evaluate
- 제목: JavaScript 평가
- 설명: 페이지 또는 요소에서 JavaScript 표현식을 평가합니다
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열, 선택 사항): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자function(문자열): () => { /* code / } 또는 요소가 제공된 경우 (element) => { / code */ }filename(문자열, 선택 사항): 결과를 저장할 파일 이름입니다. 제공되지 않으면 결과가 텍스트로 반환됩니다.
- 읽기 전용: false
- browser_file_upload
- 제목: 파일 업로드
- 설명: 하나 이상의 파일을 업로드합니다
- 매개변수:
paths(배열, 선택 사항): 업로드할 파일의 절대 경로입니다. 단일 파일 또는 여러 파일이 될 수 있습니다. 생략하면 파일 선택기가 취소됩니다.
- 읽기 전용: false
- browser_fill_form
- 제목: 양식 채우기
- 설명: 여러 양식 필드를 채웁니다
- 매개변수:
fields(배열): 채울 필드
- 읽기 전용: false
- browser_find
- 제목: 페이지 스냅샷에서 찾기
- 설명: 현재 페이지의 접근성 스냅샷에서 텍스트 또는 정규 표현식을 검색합니다. 일치하는 스냅샷 노드를 주변 컨텍스트 몇 줄(검색 스니펫과 유사)과 함께 반환하며, 각각은 트리 루트로부터의 경로 아래에 표시됩니다. 이는 요소와 해당 참조를 찾기만 하면 될 때 전체 스냅샷을 캡처하는 것보다 저렴합니다.
- 매개변수:
text(문자열, 선택 사항): 페이지 스냅샷에서 검색할 일반 텍스트입니다 (대소문자 구분 없는 부분 문자열 일치). 텍스트 또는 정규 표현식 중 하나만 제공해야 합니다.regex(문자열, 선택 사항): 페이지 스냅샷에서 검색할 정규 표현식입니다. 기본적으로 대소문자를 구분합니다. 플래그를 추가하려면 패턴을 슬래시로 묶으십시오 (예: 대소문자 구분 없는 경우 "/error/i"). 텍스트 또는 정규 표현식 중 하나만 제공해야 합니다.
- 읽기 전용: true
- browser_handle_dialog
- 제목: 대화 상자 처리
- 설명: 대화 상자를 처리합니다
- 매개변수:
accept(불리언): 대화 상자를 수락할지 여부입니다.promptText(문자열, 선택 사항): 프롬프트 대화 상자인 경우 프롬프트 텍스트입니다.
- 읽기 전용: false
- browser_hover
- 제목: 마우스 호버
- 설명: 페이지의 요소 위에 마우스를 올립니다
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
- 읽기 전용: false
- browser_navigate
- 제목: URL로 이동
- 설명: URL로 이동합니다
- 매개변수:
url(문자열): 이동할 URL
- 읽기 전용: false
- browser_navigate_back
- 제목: 뒤로 가기
- 설명: 히스토리에서 이전 페이지로 돌아갑니다
- 매개변수: 없음
- 읽기 전용: false
- browser_network_request
- 제목: 네트워크 요청 세부 정보 표시
- 설명: 단일 네트워크 요청의 전체 세부 정보(헤더 및 본문)를 반환하거나,
part이 설정된 경우 단일 부분을 반환합니다. browser_network_requests의 번호를 사용하십시오. - 매개변수:
index(정수): browser_network_requests에 의해 출력된 요청의 1 기반 인덱스입니다.part(문자열, 선택 사항): 요청의 이 부분만 반환합니다. 전체 세부 정보를 반환하려면 생략하십시오.filename(문자열, 선택 사항): 결과를 저장할 파일 이름입니다. 제공되지 않으면 출력이 텍스트로 반환됩니다.
- 읽기 전용: true
- browser_network_requests
- 제목: 네트워크 요청 목록
- 설명: 페이지 로드 이후의 네트워크 요청 번호 목록을 반환합니다. 전체 세부 정보를 얻으려면 번호와 함께 browser_network_request를 사용하십시오.
- 매개변수:
static(불리언): 이미지, 글꼴, 스크립트 등과 같은 성공적인 정적 리소스를 포함할지 여부입니다. 기본값은 false입니다.filter(문자열, 선택 사항): URL이 이 정규 표현식과 일치하는 요청만 반환합니다 (예: "/api/.*user").filename(문자열, 선택 사항): 네트워크 요청을 저장할 파일 이름입니다. 제공되지 않으면 요청이 텍스트로 반환됩니다.
- 읽기 전용: true
- browser_press_key
- 제목: 키 누르기
- 설명: 키보드의 키를 누릅니다
- 매개변수:
key(문자열): 누를 키의 이름 또는 생성할 문자 (예:ArrowLeft또는a)
- 읽기 전용: false
- browser_resize
- 제목: 브라우저 창 크기 조정
- 설명: 브라우저 창 크기를 조정합니다
- 매개변수:
width(숫자): 브라우저 창의 너비height(숫자): 브라우저 창의 높이
- 읽기 전용: false
- browser_run_code_unsafe
- 제목: Playwright 코드 실행 (안전하지 않음)
- 설명: Playwright 코드 스니펫을 실행합니다. 안전하지 않음: Playwright 서버 프로세스에서 임의의 JavaScript를 실행하며 RCE와 동등합니다.
- 매개변수:
code(문자열, 선택 사항): 실행할 Playwright 코드가 포함된 JavaScript 함수입니다. 페이지 상호 작용에 사용할 수 있는 단일 인수 page와 함께 호출됩니다. 예:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }filename(문자열, 선택 사항): 지정된 파일에서 코드를 로드합니다. 코드와 파일 이름이 모두 제공되면 코드는 무시됩니다.
- 읽기 전용: false
- browser_select_option
- 제목: 옵션 선택
- 설명: 드롭다운에서 옵션을 선택합니다
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자values(배열): 드롭다운에서 선택할 값의 배열입니다. 단일 값 또는 여러 값이 될 수 있습니다.
- 읽기 전용: false
- browser_snapshot
- 제목: 페이지 스냅샷
- 설명: 현재 페이지의 접근성 스냅샷을 캡처합니다. 스크린샷보다 낫습니다.
- 매개변수:
target(문자열, 선택 사항): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자filename(문자열, 선택 사항): 응답으로 반환하는 대신 스냅샷을 마크다운 파일에 저장합니다.depth(숫자, 선택 사항): 스냅샷 트리의 깊이를 제한합니다.boxes(불리언, 선택 사항): 스냅샷에 각 요소의 경계 상자를 [box=x,y,width,height]로 포함합니다. 좌표는 뷰포트 기준이며 CSS 픽셀 단위입니다 (Element.getBoundingClientRect).
- 읽기 전용: true
- browser_take_screenshot
- 제목: 스크린샷 찍기
- 설명: 현재 페이지의 스크린샷을 찍습니다. 스크린샷을 기반으로 작업을 수행할 수 없으므로 작업에는 browser_snapshot을 사용하십시오.
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열, 선택 사항): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자type(문자열): 스크린샷의 이미지 형식입니다. 기본값은 png입니다.filename(문자열, 선택 사항): 스크린샷을 저장할 파일 이름입니다. 지정하지 않으면 기본값은page-{timestamp}.{png|jpeg}입니다. 출력 디렉터리 내에 유지하려면 상대 파일 이름을 선호하십시오.fullPage(불리언, 선택 사항): true인 경우 현재 보이는 뷰포트 대신 스크롤 가능한 전체 페이지의 스크린샷을 찍습니다. 요소 스크린샷과 함께 사용할 수 없습니다.scale(문자열): 이미지 해상도 배율입니다. "css"는 CSS 픽셀 크기의 스크린샷을 생성합니다 (더 작고 기기 간 일관됨). "device"는 기기 픽셀을 사용하는 고해상도 스크린샷을 생성합니다 (더 크고 기기 픽셀 비율을 고려함). 기본값은 css입니다.
- 읽기 전용: true
- browser_type
- 제목: 텍스트 입력
- 설명: 편집 가능한 요소에 텍스트를 입력합니다
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자text(문자열): 요소에 입력할 텍스트submit(불리언, 선택 사항): 입력된 텍스트를 제출할지 여부입니다 (이후 Enter 키 누름).slowly(불리언, 선택 사항): 한 번에 한 문자씩 입력할지 여부입니다. 페이지에서 키 핸들러를 트리거하는 데 유용합니다. 기본적으로 전체 텍스트가 한 번에 채워집니다.
- 읽기 전용: false
- browser_wait_for
- 제목: 대기
- 설명: 텍스트가 나타나거나 사라질 때까지 또는 지정된 시간이 경과할 때까지 대기합니다.
- 매개변수:
time(숫자, 선택 사항): 대기할 시간(초)text(문자열, 선택 사항): 나타날 때까지 대기할 텍스트textGone(문자열, 선택 사항): 사라질 때까지 대기할 텍스트
- 읽기 전용: false
탭 관리
- browser_tabs
- 제목: 탭 관리
- 설명: 브라우저 탭을 나열, 생성, 닫기 또는 선택합니다.
- 매개변수:
action(문자열): 수행할 작업index(숫자, 선택 사항): 탭 인덱스, 닫기/선택에 사용됩니다. 닫기 시 생략하면 현재 탭이 닫힙니다.url(문자열, 선택 사항): 새 탭에서 이동할 URL, 새 탭 생성 시 사용됩니다.
- 읽기 전용: false
브라우저 설치
구성 (--caps=config를 통해 선택적 활성화)
- browser_get_config
- 제목: 구성 가져오기
- 설명: CLI 옵션, 환경 변수 및 구성 파일을 병합한 최종 해석된 구성을 가져옵니다.
- 매개변수: 없음
- 읽기 전용: true
네트워크 (--caps=network를 통해 선택적 활성화)
- browser_network_state_set
- 제목: 네트워크 상태 설정
- 설명: 브라우저 네트워크 상태를 온라인 또는 오프라인으로 설정합니다. 오프라인 시 모든 네트워크 요청이 실패합니다.
- 매개변수:
state(문자열): 오프라인 모드를 시뮬레이션하려면 "offline", 네트워크 연결을 복원하려면 "online"으로 설정합니다.
- 읽기 전용: false
- browser_route
- 제목: 네트워크 요청 모의 처리
- 설명: URL 패턴과 일치하는 네트워크 요청을 모의 처리하도록 경로를 설정합니다.
- 매개변수:
pattern(문자열): 일치시킬 URL 패턴 (예: "/api/users", "/*.{png,jpg}")status(숫자, 선택 사항): 반환할 HTTP 상태 코드 (기본값: 200)body(문자열, 선택 사항): 응답 본문 (텍스트 또는 JSON 문자열)contentType(문자열, 선택 사항): Content-Type 헤더 (예: "application/json", "text/html")headers(배열, 선택 사항): "이름: 값" 형식으로 추가할 헤더removeHeaders(문자열, 선택 사항): 요청에서 제거할 헤더 이름의 쉼표로 구분된 목록
- 읽기 전용: false
- browser_route_list
- 제목: 네트워크 경로 나열
- 설명: 모든 활성 네트워크 경로를 나열합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_unroute
- 제목: 네트워크 경로 제거
- 설명: 패턴과 일치하는 네트워크 경로를 제거합니다 (패턴이 지정되지 않은 경우 모든 경로 제거).
- 매개변수:
pattern(문자열, 선택 사항): 경로를 제거할 URL 패턴 (모든 경로를 제거하려면 생략)
- 읽기 전용: false
저장소 (--caps=storage를 통해 선택적 활성화)
- browser_cookie_clear
- 제목: 쿠키 지우기
- 설명: 모든 쿠키를 지웁니다.
- 매개변수: 없음
- 읽기 전용: false
- browser_cookie_delete
- 제목: 쿠키 삭제
- 설명: 특정 쿠키를 삭제합니다.
- 매개변수:
name(문자열): 삭제할 쿠키 이름
- 읽기 전용: false
- browser_cookie_get
- 제목: 쿠키 가져오기
- 설명: 이름으로 특정 쿠키를 가져옵니다.
- 매개변수:
name(문자열): 가져올 쿠키 이름
- 읽기 전용: true
- browser_cookie_list
- 제목: 쿠키 나열
- 설명: 모든 쿠키를 나열합니다 (선택적으로 도메인/경로로 필터링).
- 매개변수:
domain(문자열, 선택 사항): 도메인으로 쿠키 필터링path(문자열, 선택 사항): 경로로 쿠키 필터링
- 읽기 전용: true
- browser_cookie_set
- 제목: 쿠키 설정
- 설명: 선택적 플래그(domain, path, expires, httpOnly, secure, sameSite)와 함께 쿠키를 설정합니다.
- 매개변수:
name(문자열): 쿠키 이름value(문자열): 쿠키 값domain(문자열, 선택 사항): 쿠키 도메인path(문자열, 선택 사항): 쿠키 경로expires(숫자, 선택 사항): Unix 타임스탬프로 나타낸 쿠키 만료 시간httpOnly(부울, 선택 사항): 쿠키의 HTTP 전용 여부secure(부울, 선택 사항): 쿠키의 보안 여부sameSite(문자열, 선택 사항): 쿠키 SameSite 속성
- 읽기 전용: false
- browser_localstorage_clear
- 제목: localStorage 지우기
- 설명: 모든 localStorage를 지웁니다.
- 매개변수: 없음
- 읽기 전용: false
- browser_localstorage_delete
- 제목: localStorage 항목 삭제
- 설명: localStorage 항목을 삭제합니다.
- 매개변수:
key(문자열): 삭제할 키
- 읽기 전용: false
- browser_localstorage_get
- 제목: localStorage 항목 가져오기
- 설명: 키로 localStorage 항목을 가져옵니다.
- 매개변수:
key(문자열): 가져올 키
- 읽기 전용: true
- browser_localstorage_list
- 제목: localStorage 나열
- 설명: 모든 localStorage 키-값 쌍을 나열합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_localstorage_set
- 제목: localStorage 항목 설정
- 설명: localStorage 항목을 설정합니다.
- 매개변수:
key(문자열): 설정할 키value(문자열): 설정할 값
- 읽기 전용: false
- browser_sessionstorage_clear
- 제목: sessionStorage 지우기
- 설명: 모든 sessionStorage를 지웁니다.
- 매개변수: 없음
- 읽기 전용: false
- browser_sessionstorage_delete
- 제목: sessionStorage 항목 삭제
- 설명: sessionStorage 항목을 삭제합니다.
- 매개변수:
key(문자열): 삭제할 키
- 읽기 전용: false
- browser_sessionstorage_get
- 제목: sessionStorage 항목 가져오기
- 설명: 키로 sessionStorage 항목을 가져옵니다.
- 매개변수:
key(문자열): 가져올 키
- 읽기 전용: true
- browser_sessionstorage_list
- 제목: sessionStorage 나열
- 설명: 모든 sessionStorage 키-값 쌍을 나열합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_sessionstorage_set
- 제목: sessionStorage 항목 설정
- 설명: sessionStorage 항목을 설정합니다.
- 매개변수:
key(문자열): 설정할 키value(문자열): 설정할 값
- 읽기 전용: false
- browser_set_storage_state
- 제목: 저장소 상태 복원
- 설명: 파일에서 저장소 상태(쿠키, 로컬 저장소)를 복원합니다. 복원 전에 기존 쿠키와 로컬 저장소를 지웁니다.
- 매개변수:
filename(문자열): 복원할 저장소 상태 파일의 경로
- 읽기 전용: false
- browser_storage_state
- 제목: 저장소 상태 저장
- 설명: 나중에 재사용할 수 있도록 저장소 상태(쿠키, 로컬 저장소)를 파일에 저장합니다.
- 매개변수:
filename(문자열, 선택 사항): 저장소 상태를 저장할 파일 이름. 지정하지 않으면 기본값은storage-state-{timestamp}.json입니다.
- 읽기 전용: true
DevTools (--caps=devtools를 통해 선택적 활성화)
- browser_annotate
- 제목: 현재 페이지에 주석 달기
- 설명: 현재 페이지에 대해 주석 모드로 Playwright Dashboard를 열고 사용자가 주석을 그릴 때까지 기다립니다. 주석이 달린 스크린샷, ARIA 스냅샷 및 주석 목록을 반환합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_hide_highlight
- 제목: 요소 강조 표시 숨기기
- 설명: 이전에 요소에 추가된 강조 표시 오버레이를 제거합니다.
- 매개변수:
element(문자열, 선택 사항): 강조 표시를 추가할 때 사용된 사람이 읽을 수 있는 요소 설명; browser_highlight에 전달된 값과 일치해야 합니다.target(문자열, 선택 사항): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
- 읽기 전용: true
- browser_highlight
- 제목: 요소 강조 표시
- 설명: 페이지의 요소 주위에 지속적인 강조 표시 오버레이를 표시합니다.
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자style(문자열, 선택 사항): 강조 표시 오버레이에 적용되는 추가 인라인 CSS (예: "outline: 2px dashed red").
- 읽기 전용: true
- browser_resume
- 제목: 일시 중지된 스크립트 실행 재개
- 설명: 일시 중지된 후 스크립트 실행을 재개합니다. step이 true로 설정된 상태로 호출되면 다음 작업 전에 실행이 다시 일시 중지됩니다.
- 매개변수:
step(부울, 선택 사항): true인 경우 다음 작업 전에 실행이 다시 일시 중지되어 단계별 디버깅이 가능합니다.location(문자열, 선택 사항): 특정 :에서 실행을 일시 중지합니다 (예: "example.spec.ts:42").
- 읽기 전용: false
- browser_start_tracing
- 제목: 추적 시작
- 설명: 추적 기록을 시작합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_start_video
- 제목: 비디오 시작
- 설명: 비디오 녹화를 시작합니다.
- 매개변수:
filename(문자열, 선택 사항): 비디오를 저장할 파일 이름.size(객체, 선택 사항): 비디오 크기
- 읽기 전용: true
- browser_stop_tracing
- 제목: 추적 중지
- 설명: 추적 기록을 중지합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_stop_video
- 제목: 비디오 중지
- 설명: 비디오 녹화를 중지합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_video_chapter
- 제목: 비디오 챕터
- 설명: 비디오 녹화에 챕터 마커를 추가합니다. 흐린 배경의 전체 화면 챕터 카드를 표시합니다.
- 매개변수:
title(문자열): 챕터 제목description(문자열, 선택 사항): 챕터 설명duration(숫자, 선택 사항): 챕터 카드를 표시할 시간(밀리초)
- 읽기 전용: true
- browser_video_hide_actions
- 제목: 작업 오버레이 숨기기
- 설명: 페이지에서 수행된 작업에 대한 주석 달기를 중지합니다.
- 매개변수: 없음
- 읽기 전용: true
- browser_video_show_actions
- 제목: 작업 오버레이 표시
- 설명: 작업 이름을 지정하고 대상 요소를 강조 표시하는 설명선으로 페이지에서 수행되는 후속 작업에 주석을 답니다. 비디오 녹화 또는 화면 캐스팅 시 유용합니다.
- 매개변수:
duration(숫자, 선택 사항): 각 작업 주석이 화면에 유지되는 시간(밀리초). 기본값은 500입니다.position(문자열, 선택 사항): 페이지를 기준으로 작업 제목을 배치할 위치. 기본값은 top-right입니다.cursor(문자열, 선택 사항): 포인터 작업을 위한 커서 장식. "pointer"(기본값)는 이전 작업 지점에서 다음 작업 지점으로 마우스 포인터를 애니메이션으로 표시합니다. "none"은 커서 장식을 비활성화합니다.
- 읽기 전용: true
좌표 기반 (--caps=vision으로 선택 활성화)
- browser_mouse_click_xy
- 제목: 클릭
- 설명: 지정된 위치에서 마우스 버튼 클릭
- 매개변수:
x(숫자): X 좌표y(숫자): Y 좌표button(문자열, 선택 사항): 클릭할 버튼, 기본값은 왼쪽clickCount(숫자, 선택 사항): 클릭 횟수, 기본값은 1delay(숫자, 선택 사항): 마우스 누름과 뗌 사이의 대기 시간(밀리초), 기본값은 0
- 읽기 전용: false
- browser_mouse_down
- 제목: 마우스 누름
- 설명: 마우스 버튼 누름
- 매개변수:
button(문자열, 선택 사항): 누를 버튼, 기본값은 왼쪽
- 읽기 전용: false
- browser_mouse_drag_xy
- 제목: 마우스 드래그
- 설명: 왼쪽 마우스 버튼을 지정된 위치로 드래그
- 매개변수:
startX(숫자): 시작 X 좌표startY(숫자): 시작 Y 좌표endX(숫자): 끝 X 좌표endY(숫자): 끝 Y 좌표
- 읽기 전용: false
- browser_mouse_move_xy
- 제목: 마우스 이동
- 설명: 마우스를 지정된 위치로 이동
- 매개변수:
x(숫자): X 좌표y(숫자): Y 좌표
- 읽기 전용: false
- browser_mouse_up
- 제목: 마우스 뗌
- 설명: 마우스 버튼 뗌
- 매개변수:
button(문자열, 선택 사항): 뗄 버튼, 기본값은 왼쪽
- 읽기 전용: false
- browser_mouse_wheel
- 제목: 마우스 휠 스크롤
- 설명: 마우스 휠 스크롤
- 매개변수:
deltaX(숫자): X 변화량deltaY(숫자): Y 변화량
- 읽기 전용: false
PDF 생성 (--caps=pdf로 선택 활성화)
- browser_pdf_save
- 제목: PDF로 저장
- 설명: 페이지를 PDF로 저장
- 매개변수:
filename(문자열, 선택 사항): PDF를 저장할 파일 이름. 지정하지 않으면 기본값은page-{timestamp}.pdf입니다. 출력 디렉터리 내에 유지하려면 상대 파일 이름을 사용하는 것이 좋습니다.
- 읽기 전용: true
테스트 어설션 (--caps=testing으로 선택 활성화)
- browser_generate_locator
- 제목: 요소 로케이터 생성
- 설명: 테스트에 사용할 주어진 요소에 대한 로케이터 생성
- 매개변수:
element(문자열, 선택 사항): 요소와 상호 작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
- 읽기 전용: true
- browser_verify_element_visible
- 제목: 요소 표시 확인
- 설명: 페이지에 요소가 표시되는지 확인
- 매개변수:
role(문자열): 요소의 ROLE. 스냅샷에서 다음과 같이 찾을 수 있습니다:- {ROLE} "Accessible Name":accessibleName(문자열): 요소의 ACCESSIBLE_NAME. 스냅샷에서 다음과 같이 찾을 수 있습니다:- role "{ACCESSIBLE_NAME}"
- 읽기 전용: false
- browser_verify_list_visible
- 제목: 목록 표시 확인
- 설명: 페이지에 목록이 표시되는지 확인
- 매개변수:
element(문자열): 사람이 읽을 수 있는 목록 설명target(문자열): 목록을 가리키는 정확한 대상 요소 참조items(배열): 확인할 항목
- 읽기 전용: false
- browser_verify_text_visible
- 제목: 텍스트 표시 확인
- 설명: 페이지에 텍스트가 표시되는지 확인. 가능하면 browser_verify_element_visible을 사용하는 것이 좋습니다.
- 매개변수:
text(문자열): 확인할 TEXT. 스냅샷에서 다음과 같이 찾을 수 있습니다:- role "Accessible Name": {TEXT}또는 다음과 같이:- text: {TEXT}
- 읽기 전용: false
- browser_verify_value
- 제목: 값 확인
- 설명: 요소 값 확인
- 매개변수:
type(문자열): 요소의 유형element(문자열): 사람이 읽을 수 있는 요소 설명target(문자열): 페이지 스냅샷의 정확한 대상 요소 참조value(문자열): 확인할 값. 체크박스의 경우 "true" 또는 "false"를 사용합니다.
- 읽기 전용: false