Browser が 自動で操作されているか判断する Navigator.webdriver について

Cover Image for Browser が 自動で操作されているか判断する Navigator.webdriver について

BrowserがSelenium等のBrowser自動操作ツールによって操作されているかを判断するための、JavaScript APIとして、Navigator.webdriver - Web API | MDN がある。

以下の場合にnavigator.webdriverプロパティがtrueになる。
MDNの文書を引用する。

Chrome
--enable-automation または --headless フラグが使用されているとき。
Firefox
設定の marionette.enabled または --marionette フラグが渡されたとき。

自動操作されていることが判定できるのでいくつかAPIを使うことで有用なケースが浮かんだので、備忘録として残す。


ロボットからのアクセスを禁止する

ドキュメントを見る限り、自動操作ツール側でフラグを使用しない限り(デフォルトでは間違いなく使用すると思う)自動操作ツールでのアクセスかどうかの検知に使用できる。navigatorオブジェクトが未定義であることも考慮すると、自動操作かどうかの判定は以下のようになる。

let isAutomated = typeof navigator !== 'undefined' && navigator.webdriver;

ただ、抜け道はいくつかありそうで、以下の記事を見つけた。
It is not possible to detect and block Chrome headless
Browser ではないスクレイピングを防ごうと思うと、ユーザーエージェントを判断したり考慮事項は多い。


ロボットのアクセスをWeb解析ツールからの除外

Google Analytics等は除外していそうだが、自動操作ツールのアクセスを明示的に除外したい場合、このフラグを使って navigator.webdrivertrue になる場合は、記録の対象外とすることができる。


課金対象のマーケティングツールからの除外

基本的に、Google Analyticsのアクセスの除外とやることは同じだが、バナー表示ツールなどでバナーの表示数で課金される、または表示数で制限を設けるツールがある。自動操作ツールのアクセス時はこれらのツールの対象外とすることで、課金額を節約、リアルユーザに対して表示する確率を高められる。


RPA ツールの操作補助

Browserの操作というと、RPAツールも対象となる。
navigator.webdriver のみの制御だと不安だが、navigator.webdriverとある特定のCookieがあるとRPA向けのショートカットが表示される。
または、RPAツールの操作の邪魔になる処理をOFFにする等の用途が考えられる。


参考