Два подхода.
- Первый - попроще, но не эффективно. Симуляция действий пользователя, буквально, нажатие кнопок мыши,.. для этого подходит autoit, и удаленный но сохраненный на их форуме aurecord, который буквально создаст скрипт автонажатия кнопок по твоим действиям... останется его почистить (удалить лишние движения перед нужным действием и после), привести к удобному виду (например последовательность можно завернуть в цикл, а данные для следующего шага брать из файла, который открывать так же как пользователь, брать следующую строчку/запись и т.п.), такие действия способен сделать человек только отдаленно знакомый с программированием.
Что бы реализовать одновременную работу в нескольких браузерах, тут либо открыть эти браузеры одновременно (разные профили, например firefox -p имя_профиля) и изменить их размер что бы они были видны одновременно, соответственно скрипт делать таким что бы он рулил сразу несколькими браузерами, либо запускать каждый экземпляр в виртуалке
Подход очень не устойчив к изменениям в интерфейсе, да банальаня капча, которой раньше не было, уже потребует усложнять скрипт
- Второй - посложнее, но эффективнее. Провести реверсинженеринг всего что происходит в веб приложении изнутри (зачастую достаточно того что видно в консоли разработчика, но есть способы у веб приложения вставлять тут 'палки в колеса) и симулировать сетевые запросы из своего приложения или даже простым curl. Приложения с простым функционалом бывает можно обмануть чуть ли не вручную, посмотреть запрос, что отсылает кнопка на сайте в консоли разработчика, скопировать от туда эту команду и просто вызвать ее в нужный момент повторно, подменив в поля, которые меняются с каждым разом (например информация для этого запроса уже есть на странице, ее можно заранее вытащить, подправить команду, и в нужный момент её просто запустить)
У первого подхода меньше требований к знаниям и опыту исполнителя, этот подход обычно более устойчив к простым защитам от автоматизаций (ну да, капчу все равно как то придется отгадывать), типа изменение html кода, но он заметно медленней работает и требует большое количество ресурсов (памяти), особенно это заметно когда ботов нужно сотни запускать.
Второй подход очень эффективный, простые запросы симулировать можно тысячами на слабом железе, но поднимает требования к разработчику очень высоко... реверсинженеринг это не простая задача.
Для разгадывания капчи в автоматическом режиме есть куча сервисов, очень дешевых, какраз для того чтобы использовать их в своих скриптах.
p.s. очень странно, что подобные подходы (кто первый нажал тот и выиграл) к выбору клиента, все еще используются, ясно ведь что по честному человек тут уже давно вне конкуренции. Честнее было бы просто устраивать лотерею.