Что нового

Циклический кликинг по заданным координатам

Dmitry_65

Новичок
Сообщения
7
Репутация
0
Версия AutoIt: 3.3.10.2

Описание: Доброго времени суток:smile: Помогите составить скрипт из повторяемого нажатия мыши через время. То есть мышь медленно передвигает курсор, кликает определенные координаты (интервал клика 5 секунд, распознавать должен по заголовку окна WinWaitActive наверное), ждёт 10 минут, далее снова клики по заданным координатам и начинаем всё заново.
Примечания: желательно сделать кнопку запуска скрипта и остановки его (например insert запускает, pause break стопает).
 
Автор
D

Dmitry_65

Новичок
Сообщения
7
Репутация
0
Сделал свой первый скрипт, может конечно очень примитивный, но работает.
Код:
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',0)
Opt('MouseCoordMode',0)

TrayTip("Инфо", "скрипт включен", 5, 1)

While 1
MouseClick("left",696,422,1) ; клик кнопки 1
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",932,425,1) ; клик кнопки 2
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",1151,421,1) ; клик кнопки 3
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",736,575,1) ; клик кнопки 4
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",924,576,1) ; клик кнопки 5
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",1140,574,1) ; клик кнопки 6
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",728,723,1) ; клик кнопки 7
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять
Sleep(1000)
MouseClick("left",932,727,1) ; клик кнопки 8
Sleep(1000)
MouseClick("left",1190,392,1) ; далее
Sleep(1000)
MouseClick("left",1170,966,1) ; принять

Sleep(600000) ; ждем 10 минут

MouseClick("left",696,422,1) ; результат кнопки 1
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",932,425,1) ; результат кнопки 2
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",1151,421,1) ; результат кнопки 3
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",736,575,1) ; результат кнопки 4
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",924,576,1) ; результат кнопки 5
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",1140,574,1) ; результат кнопки 6
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",728,723,1) ; результат кнопки 7
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
MouseClick("left",932,727,1) ; результат кнопки 8
Sleep(1000)
MouseClick("left",813,371,1) ; ОК
Sleep(1000)
WEnd ; начинаем заново

Задача следующая: у нас есть 8 кнопок в окне браузера, при активации кнопки запускается таймер в 10 минут, джем пока время выйдет, смотрим результат. Первые две кнопки имеют таймер в 6 минут, нужно чтобы не дожидаться оставшееся время в 4 минуты запускать кнопки заново. Я представляю себе это как цикл в цикле или 2 разных скрипта. Один цикл обрабатывает первые 2 кнопки (с шестью минутами), а второй цикл обрабатывает остальные кнопки с 3 по 8 (с 10-тью минутами). Смысл в том чтоб не было лишнего простоя.
Как это можно реализовать?
Сразу еще один вопрос посложнее: прочитал про функцию ControlClick, можно ли ее использовать в данном примере когда окно свёрнуто или неактивно?
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
AutoIt однопоточное приложение. Варианта для одновременной и не зависимой работы двух зацикленных функций нет.
PS В двух разных скриптах необходимо просчитать sleep иначе они не поделят мышь.
А по поводу ControlClick читайте справку тыкнув ЛКМ по надписи в коде:
Код:
ControlClick()



Добавлено:
Сообщение автоматически объединено:

Дело было вечером, делать было нечего :-X
В общем извращался как мог и вот до чего дошел:
Код:
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',0)
Opt('MouseCoordMode',0)

AutoItSetOption("SendKeyDelay", 2000)

HotKeySet("{1}", "Button1")
HotKeySet("{2}", "Button2")
HotKeySet("{3}", "Button3")
HotKeySet("{4}", "Button4")
HotKeySet("{5}", "Button5")
HotKeySet("{6}", "Button6")
HotKeySet("{7}", "Button7")
HotKeySet("{8}", "Button8")
HotKeySet("{9}", "_Next")
HotKeySet("{0}", "Accept")
HotKeySet("{-}", "Ok")
Global $Stop1 = False
Global $Stop2 = False

AdlibRegister(Cyrcle1, 630000)
AdlibRegister(Cyrcle2, 360000)

Func Cyrcle1()
   If $Stop1 = True Then
	  Send("{3}")
	  Send("{-}")
      Send("{4}")
	  Send("{-}")
	  Send("{5}")
	  Send("{-}")
	  Send("{6}")
	  Send("{-}")
	  Send("{7}")
	  Send("{-}")
	  Send("{8}")
	  Send("{-}")
   EndIf
   Send("{3}")
   Send("{9}")
   Send("{0}")
   Send("{4}")
   Send("{9}")
   Send("{0}")
   Send("{5}")
   Send("{9}")
   Send("{0}")
   Send("{6}")
   Send("{9}")
   Send("{0}")
   Send("{7}")
   Send("{9}")
   Send("{0}")
   Send("{8}")
   Send("{9}")
   Send("{0}")
   $Stop1 = True
EndFunc

Func Cyrcle2()
   If $Stop2 = True Then
	  Send("{1}")
	  Send("{-}")
      Send("{2}")
	  Send("{-}")
   EndIf
   Send("{1}")
   Send("{9}")
   Send("{0}")
   Send("{2}")
   Send("{9}")
   Send("{0}")
   $Stop2 = True
EndFunc

While 1
   ToolTip("Включен бот!",0,0)
   Sleep(10000)
WEnd

Func Button1()
   MouseClick("left",696,422,1) ; клик кнопки 1
EndFunc

Func Button2()
   MouseClick("left",932,425,1) ; клик кнопки 2
EndFunc

Func Button3()
   MouseClick("left",1151,421,1) ; клик кнопки 3
EndFunc

Func Button4()
   MouseClick("left",736,575,1) ; клик кнопки 4
EndFunc

Func Button5()
   MouseClick("left",924,576,1) ; клик кнопки 5
EndFunc

Func Button6()
   MouseClick("left",1140,574,1) ; клик кнопки 6
EndFunc

Func Button7()
   MouseClick("left",728,723,1) ; клик кнопки 7
EndFunc

Func Button8()
   MouseClick("left",932,727,1) ; клик кнопки 8
EndFunc

Func _Next()
   MouseClick("left",1190,392,1) ; далее
EndFunc

Func Accept()
   MouseClick("left",1170,966,1) ; принять
EndFunc

Func Ok()
   MouseClick("left",813,371,1) ; ОК
EndFunc

Если не понятно поясню. Я установил на ключевые действия мышью Хот кей, и заключил их в цикл allibregister. Основной круг держит только уведомление.
Если это то что надо тык внизу: Тема решена ;D
PS Держи его в русской раскладке, другой не любит :-\
И еще, начинает выполнятся не сразу а через 6 и 10 минут
 
Автор
D

Dmitry_65

Новичок
Сообщения
7
Репутация
0
Только сейчас довелось засесть за компьютер, начал тестировать скрипт. Но где-то пока идет "пересечение", играюсь с таймингами.
ожидание->обработка первых двух кнопок->ожидание->обработка остальных кнопок->сбор результатов первых двух кнопок-> и где то здесь идет клик в еще не завершенные задания
Сложновато отловить момент, большой промежуток времени уходит. Пока тестирую. Но в любом случае спасибо за новый скрипт :smile:
И еще: а можно ли использовать координаты активного окна (если некоторые элементы не влезают в окно и приходится скролить вниз), а не всего разрешения экрана? Как вариант конечно уменьшить элементы на странице...
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
И еще: а можно ли использовать координаты активного окна (если некоторые элементы не влезают в окно и приходится скролить вниз), а не всего разрешения экрана? Как вариант конечно уменьшить элементы на странице...
Извиняюсь, последнюю строку вашего сообщения упустил. Проще все же использовать Zoom в браузере
Так же как вариант установить хоткей для скрола вниз и вверх. И при необходимости вызывать.
 
Автор
D

Dmitry_65

Новичок
Сообщения
7
Репутация
0
Точно, про хоткей на скроллинг забыл, но у меня появилась более безумная идея... Сейчас поставлю 2 клона винды на VMware и 2 разных скрипта на обработку одних и других координат :D
Добавлено позже:
вариант с vmware не прокатил:( в личный кабинет не пускают с двух виндовсов. Сделал один долгий, нудный скрипт из одного цикла пока время не сошлось на одновременном окончании всех таймеров. В принципе цель достигнута :smile: Эх.. научиться бы еще применять всякие переменные и функции в более сложных выражениях, но это еще не скоро. В любом случае спасибо за помощь :smile:
 
Верх