無人運用の agent が動き始めると、最初の難所はほとんどがログインです。リモートで動き、定期実行されるため、そばに验证码を入力してくれる人はいません。再利用できる、すでにログイン済みのブラウザもありません。できるのは自分だけです。ブラウザを開き、アカウントとパスワードを入力し、ログイン時に出てくるスライダーを通過することです。
普通の headless ブラウザは、この三つの関門をどれも越えられません。最初から反クローリングに検出されるか、フォームを入力してスライダーを発火させたところで止まってしまいます。chrome-use は「無人運用の agent が自分でログインを最後まで進められるようにする」ために作られています。この記事では、それがこの三つの関門をどう越えるのか、そしてまだ解決できていない部分について説明します。
三つの関門
- 本物の Chrome を駆動して識別されない: CDP で本物の Chrome に接続し、headless の指紋を使いません。
- 自分で認証情報を入力してログインする: profile-use と連携し、パスワード庫からアカウントとパスワードを取り出してフォームに入力します。
- ログインのスライダーを通過する:
solve-sliderが NetEase Yidun の欠けたパズルを自動で解きます。
以下では、後ろの二つの関門を取り上げます。これらは無人運用でもっとも止まりやすい場所です。
一、認証情報の入力: profile-use との連携
chrome-use はブラウザを開き、入力欄を特定し、入力し、送信します。認証情報をどこから取るか、どう漏らさないかは、profile-use という skill に任せます。
profile-use はアカウントとパスワードをパスワード庫に置きます(rbw、Bitwarden / 自前の Vaultwarden と互換)。「入力が必要なその瞬間」にだけ一度読み出し、JSON、ログ、スクリーンショット、チャット記録には絶対に書き込みません。低機密の項目(ユーザー名、メール、携帯番号)はそのまま入力します。パスワードのような高機密の項目は別に取り出し、使い終わったら捨てます。
実測では、知乎のパスワードログインで、profile-use がドメイン zhuanlan.zhihu.com に基づいて庫から携帯番号 + パスワードを取り出し、chrome-use が二つの入力欄に入力してログインをクリックしました。全過程でパスワードはメモリを一度通るだけで、保存されるのは「入力済み(脱機密化)」という一文だけです。送信した瞬間に NetEase Yidun のスライダーが発火し、ちょうど第二の関門につながりました。
2FA と passkey はどうするか
無人運用で二段階認証に当たったら、一つ覚えておくべきです。標準の passkey ポップアップをクリックしに行ってはいけません。 そのような「Bitwarden / システムキーチェーン」から出る選択画面は、OS レベルのウィンドウであり、ウェブ要素ではありません。CDP はそこに届かず、chrome-use はクリックできません。進める道は二つあります。
- CDP 仮想認証器: Chrome の CDP には
WebAuthnドメインがあります。仮想認証器を登録し、認証情報を事前に入れておけば、passkey の手順はブラウザ内部で自動完了し、標準ウィンドウはそもそも出ません。これが passkey 自動化の正攻法です。 - パスワード + TOTP に戻す: 多くのサイト(GitHub の sudo 二次確認など)は「パスワードを使う」入口を残しています。それはウェブリンクなので、chrome-use がクリックできます。パスワードは profile-use に任せ、TOTP 認証コードも rbw から出せます。
二、スライダーを通過する(NetEase Yidun)
フォームを入力して送信すると、知乎のようなサイトでは NetEase Yidun の欠けたパズルが出ます。人がいなければ、この壁が処理を完全に止めます。solve-slider(v1.5.34 から内蔵)はこれを自力で通過します。
下の図は、アルゴリズムが欠け部分を特定した結果です。緑の枠はパズルピースの開始位置、赤の枠は検出された欠け部分、オレンジの矢印はドラッグすべき距離です。赤の枠は背景画像のくぼみに重なっており、誤差は 1 ピクセル以内です。

Yidun 公式 demo で、6 回すべて新規ロードし、毎回再生成されたパズルです。
load 1: SOLVED attempts=1 err=-0.2px
load 2: SOLVED attempts=1 err=-0.8px
load 3: SOLVED attempts=1 err= 0.2px
load 4: SOLVED attempts=1 err=-0.5px
load 5: SOLVED attempts=1 err=-0.8px
load 6: SOLVED attempts=1 err=-0.5px
6/6、すべて一回目の試行で成功し、着地点は目標から 0.8 ピクセル以内でした。通過後、Yidun のスライダーは緑になり、チェックマークが付きます。

三つの手順
一、欠け部分がどこかを計算する。 Yidun は二つの画像を渡します。くぼみのある背景画像と、透明背景のパズルピース PNG です。ドラッグすべきピクセル数は、欠け部分の X 座標からパズルピースの開始位置を引いたものです。よくある方法はスクリーンショットを撮って切り抜くことですが、写真のテクスチャ(マスト、船、山)が欠け部分と一緒に切り出され、正確に測れません。chrome-use は別の道を使います。Yidun 自身の二つの切片を URL から直接ダウンロードし、メモリ内で計算します。スクリーンショットは使わず、canvas のクロスオリジン汚染もありません。アルゴリズムは、灰度化 + Sobel の縦方向エッジ + マスク正規化相互相関です。純粋な Rust で書かれており、opencv は入れず、バイナリは単一ファイルのままです。
二、人間らしくドラッグする。 ここは、ほとんどの突破が失敗する場所です。Yidun はドラッグ先だけを見ているわけではありません。どうドラッグしたかも見ています。等速、直線、瞬間移動は、見れば機械だと分かります。chrome-use は humanize を使い、曲率、減速、揺れ、速度変化を持つ人間らしい軌跡を生成してドラッグします。6 回のドラッグで、Yidun の行動検証には一度も止められませんでした。
三、閉ループで補正する。 ハンドルをどれだけドラッグするとパズルがどれだけ動くか、その比率はサイトごと、描画モードごとに変わる可能性があります。固定すると数ピクセルずれやすくなります。そこで、一度ドラッグした後にパズルの実際の着地点を読み、差分を補います。1.5 ピクセル以内になるまで補正してから手を離します。比率やスケールを事前設定する必要はなく、閉ループが自分で収束します。知乎 は popup モードを使っており、入場アニメーションもありますが、この仕組みはそれにも対応しています。
正直に言うと、まだ終わりではない
- バックエンド指紋: Yidun はサーバー側でアカウント履歴、IP、タイミングも見ています。このドラッグが完璧でも、アカウントや IP 自体が機械らしければ、失敗と判定される可能性があります。これは実機のエンドツーエンドでしか分かりません。
- 強化スライダー: アイコン形状のピース + 背景内の囮図形、低コントラストの写真です。現在の検出器は囮に引っ張られることがあり、より安定した方法を作っています。
- クリック選択型 CAPTCHA: 指定された文字やアイコンを順番にクリックするものです。認識 + 位置特定 + 順番クリックが必要で、さらに難しい関門です。これも作っています。
ただし、標準スライダーの関門はすでに越えました。無人運用にとって、これは「ログインでそのまま止まる」から「自分で先へ進める」への一歩です。
使い方
# インストール(npm なし、token なし)
curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
chrome-use solve-slider # 現在ページの Yidun スライダーを検出して自動で解く
chrome-use solve-slider 5 # 失敗時に最大 5 回リトライ(毎回更新して別のパズルにする)
profile-use と組み合わせた完全な無人運用ログインは、profile-use がアカウントとパスワードを取得 → chrome-use がフォーム入力 → 送信 → solve-slider がスライダーを通過、という流れです。リポジトリは github.com/leeguooooo/chrome-use にあります。

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