スクロール挙動でボットを検出 バースト性と記憶性で73%の精度
Detecting scraper bots through scroll behaviour

ブログ運営者が、人間のスクロール操作が持つ「バースト性」と「記憶性」に着目し、スクレイピングボットを検出する手法を試した。公開データセットを用いてLightGBMで分類したところ、73.4%の精度を達成。人間とChatGPT Agentの区別が難しいなどの課題はあるが、マウス操作など他の特徴と組み合わせれば実用的な検出モデルが作れるとしている。
「スクロール行動はボットと人間を区別する上で関連性のあるデータポイントのようだ」
HNでの議論
20- xp84
将来、あるサイトはボットに対して可能な限り友好的になりたいと思う一方で(できれば、誰もが時間と帯域幅を節約できるように、まともでレート制限のある公開APIに移行してほしいものだが)、他のサイトはその逆を望む、という状況になるかどうか興味がある。
もしあなたがサービスを提供していて、AIエージェントが本当に普及して、人々が「Claude、新しいシャワーホースを買ってきて。長さ約5フィート、ブラッシュドニッケル仕上げで。いつもの評価基準で、20ドル以上は使わないで」と言うようになったら、多くのEコマースストアはボットに非常に友好的になる強い動機を持つだろう。
そしてもちろん、すべての「コンテンツ」サイトはその逆で、帯域幅を無駄にしたくなく、スクレイピングしたいかもしれないエンティティと独占的な有料コンテンツ契約を結べることを期待している。
- bryanrasmussen
まあ、面白いことに、特定のプラットフォームをターゲットにしたボットを書いていたとき、私はこういうことをたくさんやったよ。なぜなら、私は偏執的で、ブロックされたくなかったからだ。だから、やったことは:
現在読み込まれているページ内で、操作したいすべての要素を検出する。クリックしたい要素。クリックしたい要素までスクロールする。ランダムなビューポートスクロール動作、ビューポートを少し超えて、スクロールバック、クリックするマウス位置を決定する - クリック可能なアイテムのx、y中心、クリック可能なアイテムのバウンディングボックスのx、yを決定し、バウンディングボックス内でランダム性を持ってクリックできる点を選ぶ。なぜなら、人間は毎回正確な中心をクリックするわけではないからだ。ランダムなマウス移動速度を設定する。マウスのぎくしゃく関数(実際にクリックするx.yに向かう途中のx.y座標の数を決定し、それぞれの方向にマウス速度のランダム性を持って移動する。そうすれば、誰も「おい、このマウスはクリックする場所に向かって不自然にまっすぐで不自然に滑らかに動いている」とは言えない)。クリックする場所に到達する。クリックまでランダムな時間待つ。クリックする。
この方法だけでは、基準に基づいてクリックしたい新しい要素を継続的に取得できない場合、スクロールして新しい要素を検出できるかどうかを確認する必要がある。
スクロールする回数をランダムに決める。ランダムなスクロール速度。ランダムなスクロール距離。
スクロールを開始する。スクロール距離に達したら停止する。ランダムな上下スクロール。
私の自動化の目標は、ボットに何百人もの仕事をさせることではなかった。仕事をさせることだった[…]
- ventana
それは素晴らしい!
私は気にかけているウェブサイトの1つへのGoogle広告トラフィックを実験していたが、マウス移動やスクロールイベントの存在だけを見るだけで、パターンは言うまでもなく、Google広告で有料クリックとしてカウントされていたボットや、広告を(誤って)クリックして私のウェブサイトで何の行動も起こさなかったユーザーがどれだけ多いかを理解できた。この記事のようなパターンを分析することは、さらに理にかなっていただろう。