We use another approach that works for the same reason but is cleaner for the end user. We ran across the idea somewhere else so it's not original to us, but just isn't mentioned here. Add a hidden date field to the form that has a value of the date/time when the form loaded. Then check the value submitted against the current date/time when the form gets submitted. If the difference in the time the form loads and is submitted is less than 5 seconds then it's a bot. If your form is long you can increase the number, if your form is very short you may need to increase it. This in combination with a honeypot field is very effective. The Honeypot module for Drupal has both of these methods available, although you may want to alter the form names/ids to make your site's form fields uniquely named.
We use another approach that works for the same reason but is cleaner for the end user. We ran across the idea somewhere else so it's not original to us, but just isn't mentioned here. Add a hidden date field to the form that has a value of the date/time when the form loaded. Then check the value submitted against the current date/time when the form gets submitted. If the difference in the time the form loads and is submitted is less than 5 seconds then it's a bot. If your form is long you can increase the number, if your form is very short you may need to increase it. This in combination with a honeypot field is very effective. The Honeypot module for Drupal has both of these methods available, although you may want to alter the form names/ids to make your site's form fields uniquely named.