自動操作ブラウザで Google ログインが「安全でないブラウザ」拒否されたら AutomationControlled 無効化 + 実機 Chrome チャンネル
認証
Playwright
ブラウザ自動化
知識
判断
Playwright などのブラウザ自動化で headful に開いたウィンドウから Google アカウントにログインしようとすると、「このブラウザまたはアプリは安全でない可能性があります」と拒否されることがある。手動操作でも起きるため、ユーザーの操作ミスやアカウント設定ではなく自動化検知が原因と切り分ける。
原因
自動化ツールのデフォルト起動は enable-automation フラグが付き、navigator.webdriver が true になる。Google はこれを自動操作ブラウザとして検知しログインをブロックする。さらに、自動化ツール同梱の Chromium ビルド自体(Chrome for Testing 系)を弾くこともあるため、フラグ除去だけでは通らない場合がある。
対処
- 起動引数に disable-blink-features=AutomationControlled を追加する。これで navigator.webdriver が false になる(headful での実測確認済み)。
- 併せてブラウザチャンネルに実機 Chrome(channel を chrome 指定)を使うと、同梱ビルド検知も回避できて確実性が上がる。
- 配布ツールに組み込む場合は、実機 Chrome 未インストール環境を考慮し、chrome チャンネルの起動失敗時に同梱ブラウザへフォールバックする(フラグは維持)。
採用判断(却下した代替案)
- Firefox で開く案: Google ログインは通りやすいが、ログイン工程だけ別エンジンになり挙動差と依存追加の割に利点が薄い。
- 普段使いブラウザの実プロファイル流用案: プロファイルの排他ロックや自動化フラグによる汚染リスクがあり、一時的なログイン取得用途には不釣り合い。
- 適用範囲はログイン(セッション取得)工程だけでよい。取得済み storageState / Cookie を読み込んで対象アプリを操作する後続工程は Google に触れないため、検知回避の細工を広げる必要はない。
検証方法
対処後のブラウザでページを開き navigator.webdriver を evaluate して false になっていること、UserAgent が通常の Chrome 表記(HeadlessChrome でない)ことを確認してから、実際の Google ログインを試す。