用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/receptron/mulmocast-app --skill mcp-pw命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | mcp-pw |
| description | Playwright MCP でElectronアプリを操作する。スクリーンショット撮影・UI操作・デバッグ。 |
| allowed-tools | mcp__electron-playwright__browser_take_screenshot, mcp__electron-playwright__browser_evaluate, mcp__electron-playwright__browser_run_code, mcp__electron-playwright__browser_tabs, mcp__electron-playwright__browser_click, mcp__electron-playwright__browser_snapshot, mcp__electron-playwright__browser_wait_for, mcp__electron-playwright__browser_console_messages, Read, Bash, AskUserQuestion |
Playwright MCP 経由で起動中の Electron アプリ(yarn start、CDP port 9222)を操作する。
yarn start で起動中であること(CDP ポート 9222)browser_navigate — Electron アプリのページを壊す。アプリは既にページを開いているbrowser_snapshot を安易に使わない — DOM ツリー全体を出力するため、数万トークンを消費する。代わりに browser_evaluate や browser_run_code を使うpage.goto('about:blank') — アプリから離脱してしまう。もし誤って離脱したら page.goBack() で戻るlocator.click — strict mode violation(2要素以上マッチ)になりやすい。.first() を付けるか、より具体的なセレクタを使う// 単純にスクリーンショットを撮る
// → browser_take_screenshot を使う
// ❌ 悪い例: テキストだけでクリック
await page.locator('text=Vertex AI').click();
// ✅ 良い例: より具体的なセレクタ + first()
await page.locator('button', { hasText: 'Vertex AI' }).first().click();
// ✅ 良い例: data属性で絞り込み
await page.locator('button[data-state="closed"]', { hasText: 'Vertex AI' }).click();
// Settings ボタンをクリック
await page.locator('button', { hasText: /^Settings$/ }).click();
await page.waitForTimeout(500);
// 閉じているアコーディオンを開く
const accordion = page.locator('button[data-state="closed"]', { hasText: 'セクション名' });
if (await accordion.count() > 0) {
await accordion.first().click();
await page.waitForTimeout(300);
}
// ❌ 悪い例: browser_snapshot(巨大な出力)
// ✅ 良い例: 必要な部分だけ取得
const text = await page.locator('.target-class').textContent();
const count = await page.locator('button').count();
const visible = await page.locator('#element-id').isVisible();
// Settings → Language で切り替え
await page.locator('button', { hasText: /^Settings$/ }).click();
await page.waitForTimeout(500);
// Language セレクタを操作
// (具体的なセレクタはアプリの実装による)
| 症状 | 原因 | 対処法 |
|---|---|---|
| ページが真っ白 | browser_navigate を使った | page.goBack() で戻る |
| strict mode violation | 複数要素がマッチ | .first() を付けるか、セレクタを具体化 |
| クリックが効かない | 要素が非表示/アニメーション中 | waitForTimeout(500) を入れる |
| snapshot が巨大 | DOM ツリー全体を出力 | browser_evaluate で必要部分だけ取得 |
| タブが見つからない | CDPポートが違う | browser_tabs でタブ一覧を確認 |
waitForTimeout でアニメーション完了を待つ