Сейчас могла ситуация но раньше роботы толком не обрабатывали скрипты. И это можно было использовать на удивление просто и эффективно. Я например делал так: создавал невидимое поле в форме чем то инициализированное. Потом в скрипте помещал в поле текущие время. А на сервере сравнивал, с некоторой дельтой, переданное время со временем на сервере. Если оно более менее совпадала, значит писали из настоявшего браузера. Было на удивление эффективно, и много лет на сайт не могли писать роботы, хотя и капчи не было. Но это было каке то время назад, сейчас возможно уже новое поколение роботов против которых это не прокатит.