一键导入
playwright-browser
Playwright MCPでブラウザ操作・DOM調査・UI検証を行う。ブラウザ操作、E2Eテスト、画面確認、UI検証、DOM調査、ネットワーク確認時に使用する。built-inブラウザではなくPlaywright MCPツールを優先する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Playwright MCPでブラウザ操作・DOM調査・UI検証を行う。ブラウザ操作、E2Eテスト、画面確認、UI検証、DOM調査、ネットワーク確認時に使用する。built-inブラウザではなくPlaywright MCPツールを優先する。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
親子 Claude Code セッション間の委譲操作を行う。delegate(子を起動してキック)、send(既存ペインへ1行/キックオフ送信・誤送信防止つき)、list(宛先確認)、report(子→親の申し送り)を自然言語の意図から判断して実行する。tmux 環境前提。
oe-* オーケストレーションツール群(engine 本体 / 親子委譲 / SO ゲート / 選択・観測)と駆動層規律の統合概観。複数エージェント委譲・設計SO/実装SO・read-only 観測・engine 1 サイクルを使うとき、ツール群の全体像をリポジトリ走査でなく一貫した形で把握したいときに使用する。
エラー/バグ調査で、入力→出力のコードパスに未読区間がある限り外部要因(インフラ差異等)の仮説に進まない。外部要因に飛ぼうとするとき、原因が再現しないと判断しそうなときに使用する。仮説を tmp/hypothesis-NNN.md に外部化し、コードパスの read-state を可視化する。
プランをKickoff Document形式に変換する。セカンドオピニオン投入・リポジトリアーカイブ・ピアレビュー共有時に使用する。命名規約・frontmatter・セクション構造をKickoff形式に整える。
設計判断を確定する前に、ゼロベースで未探索の代替案を最低1回引き出し、その証跡を確定前に残してから確定する。複数の選択肢を A/B 等で確定しかけたとき、ADR / Decision / kickoff の設計判断(DJ-N)を確定・記録するときに使用する。so-compare 選択肢拡張・探索木の外部化を含む。
so-compare.shでセカンドオピニオン(Codex/Claude/Cursor)を取得し、結果を比較する。ピアレビュー、修正方針の検証、設計判断の反証に使用する。**弱 SO**(1周可・partial=disclose・0はなし)。プロンプト設計原則、結果読み込み手順、合意判定基準を含む。
| name | playwright-browser |
| description | Playwright MCPでブラウザ操作・DOM調査・UI検証を行う。ブラウザ操作、E2Eテスト、画面確認、UI検証、DOM調査、ネットワーク確認時に使用する。built-inブラウザではなくPlaywright MCPツールを優先する。 |
~/.cursor/skills/playwright-browser/SKILL.md(本ファイル)scripts/intercept-api.js(APIインターセプトスクリプト)Cursorにはbuilt-inブラウザ(cursor-ide-browser)とPlaywright MCP(user-playwright-mcp)の2系統がある。 Playwright MCPの優位点:
browser_console_messages でJSエラー・警告をキャプチャbrowser_network_requests でAPI呼び出し・失敗リクエストを確認常にPlaywright MCPを使うこと。built-inブラウザ(cursor-ide-browser)は使わない。
全ツールは CallMcpTool で呼び出す:
server: "user-playwright-mcp"
toolName: "browser_*"
arguments: { ... }
注: mcp.json のキー名は playwright-mcp だが、Cursorが user- プレフィックスを付与するため、CallMcpToolでは user-playwright-mcp を指定する。
すべてのブラウザ操作はこの4ステップで進める:
browser_navigate でURLに移動browser_snapshot でDOM構造と要素refを取得browser_click, browser_type 等で操作snapshot が返す ref は操作のたびに変わる。操作前に必ず最新のsnapshotを取ること。
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_navigate | URLに移動 | url |
browser_navigate_back | 前のページに戻る | - |
browser_tabs | タブ一覧/作成/選択/閉じる | action, index |
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_snapshot | DOMのアクセシビリティツリー取得 | filename (optional) |
browser_take_screenshot | スクリーンショット取得 | type, filename, fullPage, ref+element(要素単位) |
browser_console_messages | コンソールログ取得 | level, filename |
browser_network_requests | ネットワークリクエスト一覧 | includeStatic, filename |
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_click | 要素クリック | ref, element, button(left/right/middle), doubleClick |
browser_type | テキスト入力(追記) | ref, text, submit, slowly(keyハンドラ発火用) |
browser_fill_form | 複数フィールド一括入力 | fields (下記参照) |
browser_select_option | ドロップダウン選択 | ref, values |
browser_hover | ホバー | ref, element |
browser_press_key | キー押下 | key |
browser_drag | ドラッグ&ドロップ | startElement(必須), startRef(必須), endElement(必須), endRef(必須) |
browser_file_upload | ファイルアップロード | paths |
browser_fill_form の fields 型(全フィールド必須):
[{ "name": "説明", "type": "textbox|checkbox|radio|combobox|slider", "ref": "refN", "value": "値" }]
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_wait_for | テキスト出現/消失/時間待機 | text, textGone, time |
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_evaluate | JavaScript実行 | function, ref |
browser_run_code | Playwrightコード実行 | code(page オブジェクトが利用可能。例: await page.evaluate(...), await page.route(...), await page.request.get(url, {headers})) |
browser_handle_dialog | ダイアログ処理 | accept, promptText |
| ツール | 用途 | 主要パラメータ |
|---|---|---|
browser_resize | ウィンドウサイズ変更 | width, height |
browser_close | ページを閉じる | - |
browser_install | ブラウザインストール | - |
1. browser_navigate → 対象URL
2. browser_snapshot → ページ構造を確認
3. browser_take_screenshot → 視覚的に確認
1. browser_snapshot → フォーム要素のrefを取得
2. browser_fill_form → fields: [{ name: "ユーザー名", type: "textbox", ref: "refN", value: "..." }, ...]
または browser_click + browser_type で個別入力
3. browser_click → 送信ボタン
4. browser_wait_for → 遷移/結果表示を待機
5. browser_snapshot → 結果を確認
1. browser_console_messages → JSエラーや警告を確認
2. browser_network_requests → 失敗リクエスト(4xx/5xx)を特定
3. browser_evaluate → DOM状態を直接調査
レスポンスボディの詳細が必要なら「APIレスポンスボディの取得」パターンを参照。
browser_network_requests はURL/ステータスのみ。レスポンスボディが必要な場合は、fetch/XHRをインターセプトする。APIを直接fetchするのではなく、ブラウザが通常行うリクエストをキャプチャする方式。認証の問題を回避できる。
~/.cursor/skills/playwright-browser/scripts/intercept-api.js)browser_evaluate の function に読み取った内容を渡して実行(操作やページ遷移の前に設置すること)browser_evaluate で return window.__captured を実行し結果を取得window.__captured → [{ url, status, body }, ...]
スクリプトのデフォルトURLパターン(/api/, /v{N}/, /graphql/)に合わない場合は、対象サイトのAPIパスに合わせてスクリプトの isApiRequest() を調整する。
注意: browser_evaluate で設置したインターセプターはフルページ遷移でクリアされる。SPA内のクライアントサイドルーティングでは維持されるが、ページリロードや別URLへの直接遷移では再設置が必要。
SPAが実際にどのヘッダーを送信しているか調べる場合、browser_run_code でPlaywrightネイティブのルート傍受を使う。browser_evaluate のJSインターセプターと異なり、ページ遷移でクリアされない。
// browser_run_code の code パラメータに渡す
const captured = [];
await page.route('**/api/**', async (route) => {
const request = route.request();
captured.push({
url: request.url(),
headers: request.headers()
});
await route.continue();
});
// この後SPA内で操作すると、APIリクエストのヘッダーがcapturedに記録される
結果の取得は browser_evaluate で return window.__playwrightCaptured 等に格納するか、browser_run_code の戻り値として返す。
1. browser_resize → width: 375, height: 812 (モバイル)
2. browser_snapshot + browser_take_screenshot
3. browser_resize → width: 1920, height: 1080 (デスクトップ)
4. browser_snapshot + browser_take_screenshot
browser_evaluate 内の fetch() はhttpOnly Cookieに依存する認証では失敗する。 same-originでhttpOnly でないCookie(JWTトークン等)なら動作するが、確実性を求める場合は「APIレスポンスボディの取得」パターンのインターセプト方式を優先するbrowser_type はテキストを追記する。クリア&入力したい場合は browser_fill_form を使うbrowser_handle_dialog はダイアログが表示される前に呼ぶ(先行登録方式)browser_snapshot を挟むcursor-ide-browser にフォールバックせず、エラーを報告して制御を返すことbrowser_take_screenshot で filename を指定する場合は .playwright-mcp/ プレフィックスを付けること(例: .playwright-mcp/login-result.png)。ワークスペースルートにファイルが散らばるのを防ぐ