chrome-useの売りは、agentにあなたのこの1つの本物のブラウザを使わせることです。ただし、この売りには厄介な問題もついてきます。新しいブラウザを開くツールなら、タスクごとに独立したブラウザがあり、もともと互いに干渉しません。chrome-useはその逆で、いくつものagentにあなた本人まで加わって、同じChromeの中で同時に操作することがあります。誰が誰のタブをクリックしたのか、誰が誰のページを別の場所へ移動させたのか。この問題を解決しなければ、「あなたのブラウザを使う」は災難になってしまいます。

問題は想像より具体的
たとえば、あなたがChromeでドキュメントを読んでいて、裏では2つのagentが動いているとします。1つはSlackメッセージを確認し、もう1つはどこかの管理画面のデータを取っています。三者とも、この1つのブラウザの中にいます。
もしそれぞれが区別なく「現在のタブ」を操作したら、すぐに混乱します。agent Aが開いたログインページを、agent Bが自分の対象だと思ってクリックしてしまう。あなたが読んでいるタブが、どこかのagentによって別の場所へ移動させられてしまう。新しいブラウザを開く方式には、この問題はありません。それぞれが別々のプロセスを持っているからです。chrome-useが「1つの本物のブラウザを共有する」という前提で同じような非干渉を得るには、別の仕組みが必要です。
解決策:「誰が開いたか」で隔離する
chrome-useは、agentごとにブラウザを1つ渡すのではありません。同じChromeの中で、所属によって切り分けます。各--session <名前>には3つのものが与えられます。色付きタブグループ、つまりChrome上でどのグループがどのagentのものか一目でわかるもの、専用のバックグラウンドdaemon、そして「自分が作成したタブだけを操作する」という鉄則です。
こうして三者は、それぞれ自分の領域で動きます。agent AのページはAのタブグループに、agent BのページはBのグループに入り、あなた自身のタブには誰も触れません。agentごとに名前を付ける必要すらありません。指定しなければ、agentに基づいて安定したsession名が自動的に派生されます。session内のタブには安定したid(t1、t2…、一度使ったものは再利用しない)があります。そのため、「さっきのタブに戻って」のような操作も確定的で、番号が混ざりません。使い終わったらchrome-use close(またはclose --all)でそのsessionのタブを片付けられ、あなたの他のタブには触れません。
書いておかないとつまずくトレードオフ
ここには重要な細部があります。公式ドキュメントでは一言触れられていますが、見落とされがちです。このsession単位の隔離は、「拡張機能接続」の経路でのみ成立します。生の--cdp <ポート>で直接つなぐ場合は、隔離されません。
理由は、隔離がブラウザ拡張機能によってタブグループと所属を管理しているからです。生のCDPポート接続にはこの層がなく、複数の接続からは同じタブの集合が見え、誰でも誰のタブでもクリックできます。この点は、以前書いたElectronの記事の裏側にもつながります。Electronアプリでは--remote-debugging-portを使うしかなく(拡張機能を入れられない)、そのためElectron上では、この複数agentの隔離は手に入りません。そもそもその経路には、拡張機能による下支えがないのです。
これは同時に、chrome-useがブラウザの場面で、手軽だからとデバッグポートへ直接つなぐのではなく、拡張機能とnative messagingを通すことにこだわる理由も説明しています。「リモートデバッグを許可しますか」という確認を出さないことは表面的な利点にすぎません。より実質的なのは、拡張機能という経路だからこそ、「1つの本物のブラウザ上で複数のagentがそれぞれ独立して動く」ことを支えられる、という点です。
ついでにもう一層:ページ内でも隔離
隔離はタブのレベルだけではありません。chrome-useがページに注入する操作は、隔離された世界(isolated world)の中で実行されます。ページのDOMは読めますが、ページ自身のJSグローバル変数には触れられません。利点は双方向です。あなたの自動化ロジックがページスクリプトのグローバルを誤って踏むことがなく、ページスクリプト側も、あなたが何を注入したのかを検知できません。これは「アンチスクレイピングに識別されない」ことと同じ線上にあります。痕跡は少ないほどよいのです。
いつ必要になるのか
agentが1つ、タスクも1つなら、実はこうしたことを考える必要はありません。デフォルトの自動session名で十分です。本当に意識すべきなのは、複数のagentを**並行**して走らせ始め、しかもそれらがログイン済みのあなたの1つのブラウザを共有するときです。たとえば、常駐アシスタントがメッセージを送受信しているところへ、あなたが一時的に別のagentへ調査を頼むような場合です。このとき、それぞれに--sessionを分けておけば、三者(2つのagentとあなた)が同じChrome内で同時に作業しても衝突しません。
結局のところ、新しいブラウザを開くツールは、「ブラウザをいくつも起動する」ことで隔離を得ています。chrome-useは、「あなたのこの1つの本物のブラウザを使う」ことを維持しながら、所属とタブグループによって隔離を組み込んでいます。前者は手軽です。後者が得るものは、あなたのログイン状態一式を、複数のagentがそのまま使えることです。それぞれがログインし直す必要はありません。

微信
支付宝
コメント
コメントは即時公開されますが、ポリシー違反時は非表示になる場合があります。