Communityコーディング&開発github.com

Spectature/dev-browser-local-profile-skill

Codexスキル:永続的なローカルブラウザプロファイルとリモートデバッグを使用してdev-browserを操作するためのスキルです。

dev-browser-local-profile-skill とは?

このスキルは、ブラウザ自動化タスクにおいて、毎回新しいブラウザ状態を起動するのではなく、長期間存続するローカルブラウザプロファイルに接続するためのものです。元々はdev-browserプロジェクトから適応されましたが、現在はスタンドアロンで動作し、dev-browser自体は不要です。Playwright-over-CDPのバンドルスクリプトを使用して、固定のリモートデバッグポート(デフォルトは9222)でChrome/Chromiumに接続し、永続的なプロファイルによるログイン状態の維持を実現します。主なワークフローは、依存関係のインストール、Chromeの起動、ブラウザツールによるURLオープンやタブ一覧表示、スクリーンショット取得、そしてカスタムタスクの実行です。ハッシュルートの処理や障害モードの診断方法も明示的にカバーされており、開発者は一貫したブラウザ自動化環境を簡単にセットアップできます。このスキルはCodex AIエージェント向けに設計されており、永続的なローカルログイン状態が必要なテストやスクレイピング、または開発ワークフローに特に有用です。

対応~Claude Code✓Codex CLI~Cursor
npx skills add Spectature/dev-browser-local-profile-skill

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Dev Browser Local Profile

このスキルは、ブラウザ自動化が毎回新しいブラウザ状態を起動する代わりに、長期間存続するローカルブラウザプロファイルに接続する必要がある場合に使用します。

このプロジェクトはdev-browserから適応されましたが、現在のスキルはスタンドアロンで動作し、dev-browserは必要ありません。

基本ルール

  • dev-browserの代わりに、バンドルされたPlaywright-over-CDPスクリプトを使用します。
  • 永続的なブラウザプロファイルがログイン状態の信頼できる情報源であると想定します。
  • 固定のリモートデバッグポートを優先します。ユーザーが指定しない限り、デフォルトで9222を使用します。
  • プロファイルパスはユーザー相対パスにしてください。マシン固有のユーザー名をハードコードしないでください。
  • デフォルトでは、ユーザーの現在のタブを置き換えるのではなく、新しいタブを開きます。明示的に要求された場合を除きます。

セットアップ手順

1. 依存関係のインストール

スキルディレクトリ内で一度だけ実行します:

npm install

これによりplaywright-coreのみがインストールされます。個別の管理対象ブラウザはダウンロードされません。

2. 永続的なプロファイルでChromeまたはChromiumを起動する

現在のユーザーのホームディレクトリ配下に固定のユーザーデータディレクトリを使用します:

  • Windows: Join-Path $env:USERPROFILE 'chrome-dev-browser-profile'
  • macOS/Linux: ~/chrome-dev-browser-profile

クロスプラットフォーム起動用のバンドルランチャースクリプトを使用します:

python scripts/start_chrome_debug.py

便利なオプション:

python scripts/start_chrome_debug.py --port 9222
python scripts/start_chrome_debug.py --profile-dir "C:\Users\name\chrome-dev-browser-profile"
python scripts/start_chrome_debug.py --chrome-path "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"

3. スタンドアロンブラウザツールを使用する

新しいタブでURLを開く:

node scripts/browser_tools.mjs open --url "http://localhost:9800/h5-bzzx/"

現在のタブを一覧表示:

node scripts/browser_tools.mjs list

スクリーンショットを撮る:

node scripts/browser_tools.mjs screenshot --url "http://localhost:9800/h5-bzzx/" --output "./page.png"

4. カスタム自動化タスクを実行する

単純な open/list/screenshot フロー以上の処理には、汎用タスクランナーを使用します:

node scripts/run_task.mjs --task ./my-task.mjs --url "http://localhost:9800/h5-bzzx/" --task-arg mode=debug

タスクモジュールは、デフォルトの非同期関数またはrunという名前の関数をエクスポートする必要があります。

例:

export default async function ({ page, helpers, taskArgs }) {
  await page.waitForLoadState("domcontentloaded");
  return {
    title: await page.title(),
    url: page.url(),
    taskArgs
  };
}

ハッシュルートの処理

ハッシュルーティングされたURLに対して、json/new?... または類似の直接DevToolsオープンフローに依存しないでください。#... の部分が欠落する可能性があります。

ハッシュルートの場合、バンドルされたスクリプトは既に2段階のナビゲーション戦略を使用しています:

  1. 最初にベースURLを開きます。
  2. 次に、ページ内でwindow.location.hrefを設定します。

例:

node scripts/browser_tools.mjs open --url "http://localhost:9527/#/inspection/log/list?book_id=352"

検証チェックリスト

ページを開いた後、明示的に成功を確認します:

  • JSON出力のurlが期待されるルートと一致することを確認します。
  • ページに動的なタイトルがある場合は、titleまたは既知のセレクタを確認します。
  • アクションが無音のように見える場合は、再試行する前にnode scripts/browser_tools.mjs listを実行します。
  • ログインが欠落している場合は、Chromeが永続的なプロファイルで起動されており、一時的なプロファイルではないことを確認します。

障害モード

ブラウザツールが接続できない

考えられる原因:Chromeが--remote-debugging-port=<port>で実行されていません。

修正方法:

  • python scripts/start_chrome_debug.pyでChromeを再起動します。
  • ポートがスクリプトに渡したものと一致することを確認します。

新しいタブが開いたがルートが間違っている

考えられる原因:外部ツールまたは手動で短縮されたURLによるハッシュルートの切り捨て。

修正方法:

  • バンドルされたopenコマンドを使用します。
  • 完全なハッシュルートURLを渡します。

ログイン状態がない

考えられる原因:Chromeが異なるプロファイルディレクトリで起動されました。

修正方法:

  • 永続的な--user-data-dirでChromeを再起動します。
  • 同じプロファイルディレクトリを一貫して再利用します。

スコープ

このスキルは意図的にワークフローに焦点を当てています。Playwright over CDPを使用して、永続的なローカルログイン状態のためのスタンドアロンブラウザ自動化セットアップを標準化します。

関連スキル