browser-max-automation/SKILL.md
Browser automation using Playwright MCP for web testing, UI verification, and form automation. Use when navigating websites, clicking elements, filling forms, taking screenshots, or testing web applications. Supports iframe operations, complex JavaScript execution, MCP-to-CLI workflow switching (MCP for prototyping, Python CLI for bulk execution), CDP exclusive control, modal dialog workarounds, and file chooser handling.
npx skillsauth add aktsmm/agent-skills browser-max-automationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Browser automation via Playwright MCP.
このスキルを使う前に、以下を確認してください:
どのブラウザを使いますか?
| 選択肢 | 説明 | |--------|------| | Edge | Windows標準、企業環境向け | | Chrome | 汎用、拡張機能が豊富 |
| モード | 説明 | メリット | デメリット | |--------|------|----------|------------| | 新規ブラウザ | Playwrightが新しいブラウザを起動 | 設定が簡単、安定 | 別ウィンドウが開く | | 既存ブラウザ (CDP) | 今開いているブラウザを操作 | 普段のブラウザをそのまま使える | 事前にデバッグモード起動が必要 |
mcp.json に以下を設定:
{
"servers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "msedge"],
"type": "stdio"
}
}
}
--browserの値:msedge(Edge) /chrome(Chrome) /firefox(Firefox)
すべての対象ブラウザを閉じてから実行:
# Edge の場合
Start-Process "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" -ArgumentList "--remote-debugging-port=9222"
# Chrome の場合
Start-Process "C:\Program Files\Google\Chrome\Application\chrome.exe" -ArgumentList "--remote-debugging-port=9222"
{
"servers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--cdp-endpoint", "http://localhost:9222"],
"type": "stdio"
}
}
}
Ctrl+Shift+P → Developer: Reload Window
msedge.exe --remote-debugging-port=9222http://localhost:9222/json/version| Command | Purpose |
| ------------------------- | ------------------------------------- |
| browser_navigate | Open URL |
| browser_snapshot | Get element refs (accessibility tree) |
| browser_click | Click element by ref |
| browser_type | Input text |
| browser_take_screenshot | Capture screen |
| browser_wait_for | Wait for text/time |
| browser_run_code | Execute JavaScript |
| browser_evaluate | Run JS function (modal workaround) |
| browser_file_upload | Handle file chooser dialogs |
1. browser_navigate(url)
2. browser_snapshot → get ref
3. browser_click/type(ref)
4. browser_snapshot → verify
async (page) => {
const frame1 = page.locator('iframe[name="Content"]').contentFrame();
const frame2 = frame1.locator('iframe[title="Player"]').contentFrame();
await frame2.getByRole("radio", { name: "Option A" }).click({ force: true });
return "Selected";
};
Use when element is covered by another (e.g., SVG overlay):
await element.click({ force: true });
Use snapshot + click instead:
browser_snapshot → get ref → browser_click(ref)
mcp.jsonブラウザ自動化の効率的なアプローチ。MCP で手順を確立 → Python CLI で一括実行。
| フェーズ | ツール | 目的 | |----------|--------|------| | 手順確立 | Playwright MCP | 1件ずつ対話的に操作し、UIフロー・セレクタ・待機時間を特定 | | 一括実行 | Python + playwright | 確立した手順をスクリプト化し、N件を自動処理 |
# CDP 接続で既存ブラウザを操作
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
context = browser.contexts[0]
page = context.pages[0]
for item in work_items:
await page.goto(item["url"])
await page.wait_for_timeout(3000)
# MCP で確立した手順をそのまま実行
await page.get_by_role("button", name="対象ボタン").click()
# ...
MCP Playwright と Python スクリプトは 同一 CDP ポートに同時接続禁止。
根拠: 同時接続するとページ操作・ファイルチューザーが混線し、間違った入力が間違った対象に送信される事例あり。
| ルール | 内容 |
|--------|------|
| 同時接続禁止 | MCP と Python を同一 CDP に同時接続しない |
| MCP 切断優先 | Python 実行前に browser_close で MCP を切断 |
| プロセス確認 | 実行前に Get-Process python* でゾンビプロセスを確認 |
| フロー | MCP で手順確立 → MCP 切断 → Python 単独実行 → 完了後 MCP で検証 |
一部の Web アプリ(例: モーダルオーバーレイ)では、browser_snapshot のアクセシビリティツリーにダイアログ要素が表示されない。
browser_snapshot → 要素なしbrowser_take_screenshot → ダイアログは視覚的に表示されているbrowser_click(ref) → modal intercepts pointer events エラー// browser_evaluate で直接操作
await page.evaluate(() => {
// テキスト入力(React 互換)
const textarea = document.querySelector('textarea[placeholder*="キーワード"]');
if (textarea) {
const setter = Object.getOwnPropertyDescriptor(
window.HTMLTextAreaElement.prototype, 'value'
).set;
setter.call(textarea, '入力テキスト');
textarea.dispatchEvent(new Event('input', { bubbles: true }));
}
// ボタンクリック
const buttons = document.querySelectorAll('button');
for (const btn of buttons) {
if (btn.textContent.includes('対象ボタン名')) {
btn.click();
break;
}
}
});
browser_snapshot で ref 取得を試みる
├─ 取得できた → browser_click(ref) で操作
└─ 取得できない → browser_take_screenshot で確認
├─ 表示されている → browser_evaluate でDOM直接操作
└─ 表示されていない → 待機 or ページ再読込
CDP 接続競合やページ遷移後に、File Chooser モーダルがブラウザに残存し後続操作をブロックすることがある。
症状: browser_click や他の操作で Modal state: [File chooser] エラー
対処:
browser_file_upload(paths=[]) で空ファイルを送信してクリアbrowser_navigate で別ページへ移動Stop-Process で kill# expect_file_chooser でインターセプト
async with page.expect_file_chooser(timeout=10000) as fc_info:
await page.get_by_role("button", name="ファイルアップロード").click()
file_chooser = await fc_info.value
await file_chooser.set_files("/path/to/file.csv")
| Type | Use Case | Selection |
| ---------- | --------------- | --------- |
| radio | Single choice | One only |
| checkbox | Multiple choice | 0 to many |
development
Generate draw.io editable diagrams (.drawio, .drawio.svg) from text, images, or Excel. Orchestrates 3-agent workflow (Analysis → Manifest → SVG generation) with quality gates. Use when creating architecture diagrams, flowcharts, sequence diagrams, or converting existing images to editable format. Supports Azure/AWS cloud icons.
data-ai
Set up a reusable book-writing workspace with AI agents, instructions, prompts, and scripts. Use when creating a new book or technical writing project, bootstrapping a manuscript repository, or preparing a Markdown + Re:VIEW + PDF workflow. Triggers on "book writing workspace", "technical book project", "執筆ワークスペース", "book manuscript repo", and "Re:VIEW workspace".
documentation
Create, review, and update Prompt and agents and workflows. Covers 5 workflow patterns, agent delegation, Handoffs, Context Engineering. Use for any .agent.md file work or multi-agent system design. Triggers on 'agent workflow', 'create agent', 'ワークフロー設計'.
tools
Guide for creating VS Code extensions from scratch to Marketplace publication. Use when: (1) Creating a new VS Code extension, (2) Adding commands, keybindings, or settings to an extension, (3) Publishing to VS Code Marketplace, (4) Troubleshooting extension activation or packaging issues, (5) Building TreeView or Webview UI, (6) Setting up extension tests.