~/field-notes — leeguoo@misonote — zsh EN 中文 ● 日本語
❯ field-notes v3.4.1
leeguoo@misonote:/ja/posts/chrome-use-cross-origin-iframe/ $ 記事

# agent にクロスオリジン iframe をクリックさせる:chrome-use がこの難題を攻略

AI agent にブラウザをつなぐとき、いちばん難しいのはページを開くことではなく、クロスオリジン iframe の中に隠れたフォームです。読めるし入力もできるのに、「保存」だけがクリックできない。その難題を攻略した過程の記録です。

2026年6月17日 · 記事 · 公開 · 記事

このページの目次

AI agent にブラウザをつなぐと、だしはたいてい順調じゅんちょうです。ページをひらく、内容ないようむ、検索けんさくボックスに入力にゅうりょくする。本当ほんとうひとまらせるのは、あのクロスオリジン iframe のなかかくれたフォームです。Google Payments の受取うけとり情報じょうほう、さまざまな決済けっさいコンポーネント、KYC コントロール。agent はそのなか文字もじめるし、あたい入力にゅうりょくできる。それなのに、あの「保存ほぞん」ボタンだけはクリックできないめるのに、完了かんりょうできない。

agent が「<ruby>窓<rt>まど</rt></ruby>の<ruby>中<rt>なか</rt></ruby>の<ruby>窓<rt>まど</rt></ruby>」に<ruby>手<rt>て</rt></ruby>を<ruby>伸<rt>の</rt></ruby>ばしてクリックしようとして、<ruby>空振<rt>からぶ</rt></ruby>りする

この記事では、このかべ攻略こうりゃくした過程かてい記録きろくします。主役しゅやくchrome-use——Rust でかれた、agent けのブラウザ自動化じどうか CLI です。Playwright も headless も使つかわず、あなたが**実際じっさいにログインしている**その Chrome を直接ちょくせつ操作そうさします。

なぜクロスオリジン iframe はこんなにむずかしいのか

普通ふつうのページなら簡単かんたんです。アクセシビリティツリーを取得しゅとくし、要素ようそ参照さんしょうり、クリックすればわりです。ところがクロスオリジン iframe、たとえば adsense.google.com のページに payments.google.com の iframe がまれているようなケースでは、一度いちどみっつの地雷じらいみます。

  1. セレクタがなかはいれない同一どういつオリジンポリシーのもとでは、外側そとがわのドキュメントで実行じっこうする CSS セレクタや eval は、iframe 内部ないぶの DOM にまったくれられません。ここでは document.querySelectorやくちません。
  2. スクロールが空振からぶりする。ページをスクロールしているつもりでも、実際じっさいにスクロールすべきなのは iframe 内部ないぶのスクロールコンテナです。wheel イベントは外側そとがわのドキュメントにおくられ、なかはまったくうごきません。目的もくてきぎょうはいつまでも「画面がめんそと」で、ることすらできません。
  3. 座標ざひょうかんでクリックするしかないまえふたつのせいで、「スクリーンショット + ピクセル座標ざひょう推測すいそく」にもどらざるをません。しかしこれはもっとも不正確ふせいかくで、となりのフィールドをあやまってクリックしやすい方法ほうほうです。しかも変更へんこうするのが**全体ぜんたい支払しはら情報じょうほう**であるフォームなら、クリック一回いっかい間違まちがいの代償だいしょうちいさくありません。

chrome-use の土台どだい:agent にわたすのは HTML ではなく「参照さんしょう

突破とっぱ方法ほうほうまえに、まず基本きほん仕組しくみを説明せつめいします。ここが「HTML をモデルにわせる」方式ほうしきとの根本的こんぽんてきちがいでもあります。

<ruby>巨大<rt>きょだい</rt></ruby>で<ruby>怖<rt>こわ</rt></ruby>い HTML を @e1 @e2 @e3 のようなすっきりした<ruby>参照<rt>さんしょう</rt></ruby>に<ruby>置<rt>お</rt></ruby>き<ruby>換<rt>か</rt></ruby>える

chrome-use はページソースを agent にげません。かわりにアクセシビリティツリーのスナップショット取得しゅとくし、かくインタラクティブ要素ようそみじか参照さんしょうけます。

- textbox "メール" [ref=e2]
- listbox "<ruby>国<rt>くに</rt></ruby>/<ruby>地域<rt>ちいき</rt></ruby>" [ref=e60]
- button "<ruby>保存<rt>ほぞん</rt></ruby>" [ref=e41]

agent はその参照さんしょう直接ちょくせつ操作そうさします。fill @e2 "..."click @e41 のように。いちページあたりおよそ 200–400 token で、DOM ノイズだらけの画面がめん全体ぜんたいではありません。この参照さんしょう仕組しくみこそが、あとで iframe を貫通かんつうできる前提ぜんていになります。スナップショットが iframe ないのノードを「られる」なら、参照さんしょうれるからです。

みっつのかべを、ひとつずつえる

第一だいいちかべ: スナップショットに iframe ないのものをせる。 アクセシビリティツリーがクロスオリジン iframe を貫通かんつうし、なかのノードにも参照さんしょうけてってこられるようにします。修正後しゅうせいごsnapshot直接ちょくせつこう列挙れっきょします。

- textbox "<ruby>電話番号<rt>でんわばんごう</rt></ruby> (<ruby>任意<rt>にんい</rt></ruby>)" [ref=e59]
- listbox "<ruby>国<rt>くに</rt></ruby>/<ruby>地域<rt>ちいき</rt></ruby>コード:<ruby>日本<rt>にほん</rt></ruby> (+81)" [ref=e60]

——セレクタがはいれない場所ばしょにも、参照さんしょうならはいれます。

第二だいにかべ: スクロールを iframe のスクロールコンテナにかせる。 wheel を外側そとがわのドキュメントへまとめておくるのをやめ、本当にスクロールすべきコンテナをスクロールします。これでしたのフォームぎょうがようやく視野しやはいり、参照さんしょう取得しゅとくできるようになります。

第三だいさんかべ(もっともかたい): クロスオリジン iframe ないの「有効ゆうこう」な送信そうしんボタンをしても反応はんのうしない。 この段階だんかいがいちばんくるしいところです。なぜなら、にはすべてただしいからです。

  • 実際じっさいのキー入力にゅうりょく番号ばんごう入力にゅうりょくできている。get valueむと、たしかにはいっている。
  • 保存ほぞん」ボタンは点灯てんとうすべきタイミングで点灯てんとうしている(ただしいあたいれるまえは disabled で、入力後にゅうりょくごあらわれる)。
  • そして click @e41——フォームはまったくうごかない。find text "<ruby>保存<rt>ほぞん</rt></ruby>"?クロスオリジンなのでれない。フォーカスして Enter / スペースをす?それでも反応はんのうしない。

っているのに、どこもかしこもっていない。根本原因こんぽんげんいんは、クロスオリジン iframe ないにある Material / フレームワークけいのボタンが、合成ごうせいクリックけないことでした。さらに fill入力にゅうりょくボックスのあたいだけを変更へんこうし、フレームワークが必要ひつようとする input / change イベントを発火はっかしません。そのためフォーム自身じしんは「変化へんかしていない」とおもい、保存ほぞんボタンが無効むこうのままだったり、クリックしてもクリックしていないのとおなじになったりします。

解決策かいけつさくふたつにかれます。あたい入力にゅうりょくは**実際じっさいのキー入力にゅうりょくえること(かく文字もじ本物ほんもののイベントを発生はっせいさせて、フレームワークが認識にんしきします)。クリックについては、iframe ないのコンテンツノードにたいして、click()ざつげるのではなく、本物ほんもののマウス / キーボード起動きどう**を一式いっしきおくることです。

仕上しあげ: なかまでクリックし、保存ほぞんする

パーティーハットをかぶった agent が iframe に<ruby>手<rt>て</rt></ruby>を<ruby>伸<rt>の</rt></ruby>ばし、SAVE を<ruby>押<rt>お</rt></ruby>すことに<ruby>成功<rt>せいこう</rt></ruby>し、<ruby>緑<rt>みどり</rt></ruby>のチェックと saved が<ruby>表示<rt>ひょうじ</rt></ruby>される

みっつのかべえると、一連いちれんながれがつながります。ひらく → 目的もくてきぎょうまでスクロールする → スナップショットで参照さんしょうる → 実際じっさいのキー入力にゅうりょくあたいれる → 保存ほぞん。あの「めるのに、完了かんりょうできない」というまりは、ここでわりです。

おなじように agent のブラウザ自動化じどうかをしているひとへ、いたみから経験けいけん

  • まずアクセシビリティ参照さんしょう使つかい、デフォルトでスクリーンショットの座標ざひょうクリックにたよらない。スナップショットが iframe をられるようになったら、参照さんしょうはピクセルの推測すいそくよりずっと安定あんていします。スクリーンショットは canvas / WebGL のような、本当に構造こうぞうがない場面ばめんのこしましょう。
  • クロスオリジン iframe は明確めいかく境界きょうかいです。セレクタと eval はここでわりです。ツールに a11y ツリーを貫通かんつうさせるか、さもなければ盲目的もうもくてきなクリックしかのこりません。
  • 入力にゅうりょくできるか」だけでなく、「送信そうしんできるか」を検証けんしょうするあたいはいったこと ≠ フレームワークがったこと、です。fill がイベントを発火はっかしないというとしあなは、実際じっさい保存ほぞんをクリックしてはじめて露呈ろていします。
  • 実際じっさいにログインしているブラウザを使つかえるなら、headless はける。ログイン状態じょうたい、cookie、拡張機能かくちょうきのうがすべてそのままあり、自動化じどうかのフィンガープリントもありません。これが chrome-use が「あなた自身じしんの Chrome を操作そうさする」みちえらんでいる理由りゆうでもあります。

ため

$ bash
curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh

リポジトリは github.com/leeguooooo/chrome-use にあります。私はずっと、このような「あなた自身じしんのサブスクリプションを使つかい、agent を実際じっさいのブラウザ / デバイスにつなぐ」ツールをつくっており、進捗しんちょくX @leeguooooo投稿とうこうしています。

次の記事 →
macOS IM クライアントのアップグレードでリバースの難度が上がる理由

コメント

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

最大 1000 文字。

    ⎇ main ● 0 errors · 0 warnings UTF-8 Markdown /ja/posts/chrome-use-cross-origin-iframe/ © 2026 leeguoo