Electronアプリの自動化
agent-browserを使用して、あらゆるElectronデスクトップアプリを自動化できます。ElectronアプリはChromium上に構築されており、Chrome DevTools Protocol(CDP)ポートを公開します。agent-browserはこのポートに接続することで、Webページと同じスナップショット操作ワークフローを実現します。
基本ワークフロー
- 起動:リモートデバッグを有効にしてElectronアプリを起動する
- 接続:agent-browserをCDPポートに接続する
- スナップショット:操作可能な要素を発見する
- 操作:要素参照を使用して操作する
- 再スナップショット:ナビゲーションや状態変化後に再度スナップショットを取得する
# リモートデバッグを有効にしてElectronアプリを起動
open -a "Slack" --args --remote-debugging-port=9222
# agent-browserをアプリに接続
agent-browser connect 9222
# 以降は標準のワークフロー
agent-browser snapshot -i
agent-browser click @e5
agent-browser screenshot slack-desktop.png
CDPを使用したElectronアプリの起動
すべてのElectronアプリは、Chromiumに組み込まれている--remote-debugging-portフラグをサポートしています。
macOS
# Slack
open -a "Slack" --args --remote-debugging-port=9222
# VS Code
open -a "Visual Studio Code" --args --remote-debugging-port=9223
# Discord
open -a "Discord" --args --remote-debugging-port=9224
# Figma
open -a "Figma" --args --remote-debugging-port=9225
# Notion
open -a "Notion" --args --remote-debugging-port=9226
# Spotify
open -a "Spotify" --args --remote-debugging-port=9227
Linux
slack --remote-debugging-port=9222
code --remote-debugging-port=9223
discord --remote-debugging-port=9224
Windows
"C:\Users\%USERNAME%\AppData\Local\slack\slack.exe" --remote-debugging-port=9222
"C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe" --remote-debugging-port=9223
重要: アプリがすでに起動している場合は、一度終了してからフラグを付けて再起動してください。--remote-debugging-portフラグは起動時に指定する必要があります。
接続
# 特定のポートに接続
agent-browser connect 9222
# または各コマンドで--cdpを使用
agent-browser --cdp 9222 snapshot -i
# 実行中のChromiumベースアプリを自動検出
agent-browser --auto-connect snapshot -i
connect実行後は、後続のすべてのコマンドが接続済みのアプリを対象とし、--cdpは不要です。
タブ管理
Electronアプリには複数のウィンドウやWebビューが含まれることがよくあります。タブコマンドを使用して一覧表示や切り替えが可能です:
# 利用可能なすべてのターゲット(ウィンドウ、Webビューなど)を一覧表示
agent-browser tab
# インデックスで特定のタブに切り替え
agent-browser tab 2
# URLパターンで切り替え
agent-browser tab --url "*settings*"
Webビューサポート
Electronの<webview>要素は自動的に検出され、通常のページと同じように制御できます。Webビューはタブ一覧でtype: "webview"として個別のターゲットとして表示されます:
# 実行中のElectronアプリに接続
agent-browser connect 9222
# ターゲットを一覧表示 -- Webビューはページとともに表示
agent-browser tab
# 出力例:
# 0: [page] Slack - メインウィンドウ https://app.slack.com/
# 1: [webview] 埋め込みコンテンツ https://example.com/widget
# Webビューに切り替え
agent-browser tab 1
# Webビューを通常通り操作
agent-browser snapshot -i
agent-browser click @e3
agent-browser screenshot webview.png
注釈: Webビューサポートは生のCDP接続を介して機能します。
一般的なパターン
アプリの調査とナビゲーション
open -a "Slack" --args --remote-debugging-port=9222
sleep 3 # アプリの起動を待機
agent-browser connect 9222
agent-browser snapshot -i
# スナップショット出力を読み、UI要素を特定
agent-browser click @e10 # セクションに移動
agent-browser snapshot -i # ナビゲーション後に再スナップショット
デスクトップアプリのスクリーンショット取得
agent-browser connect 9222
agent-browser screenshot app-state.png
agent-browser screenshot --full full-app.png
agent-browser screenshot --annotate annotated-app.png
デスクトップアプリからのデータ抽出
agent-browser connect 9222
agent-browser snapshot -i
agent-browser get text @e5
agent-browser snapshot --json > app-state.json
デスクトップアプリでのフォーム入力
agent-browser connect 9222
agent-browser snapshot -i
agent-browser fill @e3 "検索クエリ"
agent-browser press Enter
agent-browser wait 1000
agent-browser snapshot -i
複数アプリの同時実行
名前付きセッションを使用して、複数のElectronアプリを同時に制御できます:
# Slackに接続
agent-browser --session slack connect 9222
# VS Codeに接続
agent-browser --session vscode connect 9223
# それぞれ独立して操作
agent-browser --session slack snapshot -i
agent-browser --session vscode snapshot -i
カラースキーム
CDP経由で接続した場合のデフォルトのカラースキームはlightになる場合があります。ダークモードを維持するには:
agent-browser connect 9222
agent-browser --color-scheme dark snapshot -i
または、グローバルに設定します:
AGENT_BROWSER_COLOR_SCHEME=dark agent-browser connect 9222
トラブルシューティング
「Connection refused」または「Cannot connect」
- アプリが
--remote-debugging-port=NNNNで起動されていることを確認してください - アプリがすでに起動している場合は、終了してからフラグを付けて再起動してください
- ポートが他のプロセスで使用されていないか確認:
lsof -i :9222
アプリは起動するが接続に失敗する
- 起動後、接続前に数秒待機してください(
sleep 3) - 一部のアプリはWebビューの初期化に時間がかかります
スナップショットに要素が表示されない
- アプリが複数のWebビューを使用している可能性があります。
agent-browser tabでターゲットを一覧表示し、適切なものに切り替えてください
入力フィールドに入力できない
- セレクタなしで現在のフォーカスにテキストを入力するには、
agent-browser keyboard type "text"を試してください - 一部のElectronアプリはカスタム入力コンポーネントを使用しています。キーイベントをバイパスするには
agent-browser keyboard inserttext "text"を使用してください
サポートされているアプリ
Electron上に構築されたあらゆるアプリが動作します。例:
- コミュニケーション: Slack、Discord、Microsoft Teams、Signal、Telegram Desktop
- 開発: VS Code、GitHub Desktop、Postman、Insomnia
- デザイン: Figma、Notion、Obsidian
- メディア: Spotify、Tidal
- 生産性: Todoist、Linear、1Password
Electronで構築されたアプリであれば、--remote-debugging-portをサポートしており、agent-browserで自動化できます。