Author Topic: Помогите написать скрипт  (Read 3130 times)

0 Members and 1 Guest are viewing this topic.

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Помогите написать скрипт
« on: December 30, 2017, 03:51:55 PM »
Добрый день!
Помогите, пожалуйста, написать скрипт, автоматизирующий клики по кнопкам.

Суть такова:
1) Появляется окно Window1 (Start), нажимаю на него
2) Появляется окно Window3 (Wait), жду
3) Окно Window3 (Wait) исчезает, вместо него появляется окно Window2 (Next). Жму на него, снова появляется окно Window3 (Wait). Возвращаюсь к пункту 2.
4) После нескольких раз появляется жёлтое окно Window4 (Next). Жму на окно Window5 (Again) и возвращаюсь к пункту 1. Окно Window5 висит на протяжении всего времени, его нужно нажимать только в конце цикла.

Код, осуществляющий 2 и 3 пункты:
Code: [Select]
$time = $_time_t + 10
WHILE($time > $_time_t)
   GETSCREEN
   IF_PICTURE_IN (0,0, 1439,899, "Next.bmp")
      $time = 0
      LCLICK($_return1, $_return2)
   ELSE
      WAIT(2)
   END_IF
END_CYC

Как сделать остальное, не знаю, выручайте ::)

Вот как это должно работать: [spoiler=Гифка][/spoiler]

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите написать скрипт
« Reply #1 on: December 30, 2017, 04:52:35 PM »
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, 1439,899, "Win_1_2.bmp")
   LCLICK($_return1, $_return2)
   WAIT(1)
ELSE
   IF_PICTURE_IN (0,0, 1439,899, "Win_4.bmp")
      LCLICK(300, 300) // Координата Win 5
      WAIT(1)
   ELSE
      WAITMS(100)
   END_IF
END_IF

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #2 on: December 31, 2017, 03:33:28 PM »
Oraven, спасибо за ответ, но непонятно, что за окно Win1_2?

Вот немного дополнил свой код, но теперь он вешает кликерман. Что я делаю не так?
Code: [Select]
GETSCREEN
IF_PICTURE_IN (0,0, 1439,899, "Window1.bmp") // Если есть окно Start, нажать на него
   LCLICK($_return1, $_return2)
   WAIT(1)
ELSE // Если нет, то проверить, есть ли окно Next
   GETSCREEN
   IF_PICTURE_IN (0,0, 1439,899, "Window4.bmp") // Если есть окно Next, нажать на него
      LCLICK($_return1, $_return2)
      WAIT(1)
   ELSE // Если нет, то проверить, есть ли окно "Press Restart"
      GETSCREEN
      IF_PICTURE_IN (0,0, 1439,899, "Window5.bmp") // Если есть, то нажать кнопку повтора Restart
         LCLICK(1304, 714) // Координата Window2 (Restart)
         WAIT(1)
      ELSE
         WAIT(1)
      END_IF
   END_IF
END_IF

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите написать скрипт
« Reply #3 on: December 31, 2017, 04:31:20 PM »
В данном скрипте нужен только один снимок GETSCREEN вначале. Остальные снимки лишь ненужная нагрузка на проц.

Вешает потому что размер картинок слишком большой.

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #4 on: December 31, 2017, 05:02:56 PM »
Oraven, там размер не сильно большой, ~120х40 пикселей/10-15 Кб каждая картинка

Удалил все GETSCREEN, кроме первого, всё равно зависает сразу после первого клика  :'(
Code: [Select]
Описание:
  Ошибка привела к остановке взаимодействия программы с Windows.

Сигнатура проблемы:
  Имя события проблемы: AppHangB1
  Имя приложения: Clickermann.exe
  Версия приложения: 0.0.0.0
  Отметка времени приложения: 2a425e19
  Сигнатура зависания: f398
  Тип зависания: 0
  Версия ОС: 6.1.7601.2.1.0.256.1
  Код языка: 1049
  Доп. сигнатура зависания 1: f39884465db8b331e97ba822bbd518ef
  Доп. сигнатура зависания 2: 94ec
  Доп. сигнатура зависания 3: 94ece3a5c871495dba69edbb782bdd02
  Доп. сигнатура зависания 4: f398
  Доп. сигнатура зависания 5: f39884465db8b331e97ba822bbd518ef
  Доп. сигнатура зависания 6: 94ec
  Доп. сигнатура зависания 7: 94ece3a5c871495dba69edbb782bdd02

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt


wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #5 on: December 31, 2017, 09:39:52 PM »
kiril, не помогло, после того как кликает первое окно сразу зависает  :(

Комп перезагружал, запускал кликер от имени админа, выставлял время 5сек на все циклы - всё без толку.

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #6 on: January 01, 2018, 10:40:40 AM »
Quote
если не помогло ЭТО, то применяйте то, вижу что размеры картинок и области их поиска, вы уменьшать почему-то не решились.

Размер области поиска тоже уменьшал - не помогло.
А насчёт размера картинок я не совсем понял, что вы имели в виду. В папке лежат обрезанные скриншоты окошек, а не скрин экрана целиком, если что :)

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #7 on: January 01, 2018, 10:47:54 AM »
Определил, что скрипт зависает на последнем цикле:

Quote
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "Window5.bmp") // Если есть, то нажать кнопку повтора Restart
         LOGWRITE("нашёл Window5")
         LCLICK(1304, 714) // Координата Window2 (Restart)
         WAIT(1)
      ELSE
         WAIT(1)
      END_IF

wally

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите написать скрипт
« Reply #8 on: January 01, 2018, 11:54:12 AM »
kiril,

Quote
Предполагаю, что и области поиск, вы значительно не уменьшали.
Я же выше написал, что уменьшал, толку в этом нет.

Quote
Кроме того разбирайтесь, что не так с вашим железом.
С ним всё в порядке, не волнуйтесь  ;)

Quote
Результатов предложенных проверок тоже не вижу.
А какие результаты вам нужны? Выше есть сообщение о зависании процесса.
Если убрать третье условие, то скрипт выполняется без проблем. Если добавить третье, то он на нём виснет.

Quote
Вероятно вы не верно описали задачу
На гифке всё изображено в 100% точности

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Помогите написать скрипт
« Reply #9 on: January 02, 2018, 06:34:22 AM »
Попробуйте каждый этап логгировать детальнее, чтоб знать, где именно не срабатывает. Добавьте в каждый иф и в каждый элс по принту:
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "WindowNN.bmp")
         print("Ищем то-то.бмп. Нашёл Window5")
         LCLICK(1304, 714) // Координата WindowNN
         WAIT(1)
   ELSE
         print("Ищем то-то. HE нашёл Window5")
         WAIT(1)
END_IF
Когда принты отчётные станут не нужны, просто закомментируйте их, не удаляя в дальний ящик.

Как уже сказал Кирилл, по возможности уменьшаем зоны поиска (когда на целом экране уже нашлась успешно) и размеры искомой картинки. Зона поиска у меня обычно в приделах 100*300 пикселей, но никак не весь экран (по всему иногда ищу только на начальном этапе отладки скрипта, но чаще всего сразу задаю нужную область). То есть у вас вместо 0,0,$_xmax,$_ymax должно быть нечто вроде 300,100,$_xmax-400,$_ymax-800 ну или то же самое (но не через $_xmax,$_ymax) по-другому 300,100,650,150. Теперь по поводу уменьшения размера картинок -- у меня искомые картинки практически всегда размером меньше 15*15 пикселей, а очень часто и примерно 5*5 (то есть они очень маленькие и поэтому ищутся оч быстро за 50-100 мс). А если вы вывесили огромное полотно и пытаетесь искать его неизвестно где по всему экрану да ещё быстро -- не удивляйтесь, что на поиск у вас будут уходить не возможные 200 мс, а все 10 сек (при этом проц греется и маслает, хотя вам это сильно не грозит -- у вас немалые задержки по секунде).

Если не находит картинку, почитайте эту старую тему (с кодом моей скринилки) и возможно примените скрипт внизу оттуда.
ЗЫ. Но раз окна там меняются и нужно отслеживать их смену, то безусловно здесь "лишние гетскрины" нужны, не знают, почему это у нас странно так советуют убрать их)) Без гетскринов кликер слеп, но городить лишние тоже не надо. Возможно, потому кликер ничего и не делает, что не может найти одну картинку или все сразу. Сначала нужно по очереди разобраться с каждой (успешно найти её), и только в случае успеха с тремя переходить к полному циклу. Ищите все картинке сперва по одиночке и следите за логом с принтами, что они пишут (нашлось/нет, если нет -- на каком этапе). Или вместо клика сделайте просто move в те же координаты, чтоб увидеть точно, куда мышь попадает. Может, она у вас находит сперва совсем не то, а вы и не замечаете. Сделайте скрины не своей скринилкой, а через кликер (линк со своей скринилкой я уже дал выше). Возможно, вы делаете скрины из пнг, а там может иметься компрессия и.. потери, соответственно, пиксельное несоответствие))  Кароч, добавляйте принты и лог нам в студию!
« Last Edit: January 02, 2018, 07:07:43 AM by Cleoss »

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Помогите написать скрипт
« Reply #10 on: January 02, 2018, 06:51:11 AM »
Добрый день!
Помогите, пожалуйста, написать скрипт, автоматизирующий клики по кнопкам.

Суть такова:
1) Появляется окно Window1 (Start), нажимаю на него
2) Появляется окно Window3 (Wait), жду
3) Окно Window3 (Wait) исчезает, вместо него появляется окно Window2 (Next). Жму на него, снова появляется окно Window3 (Wait). Возвращаюсь к пункту 2.
4) После нескольких раз появляется жёлтое окно Window4 (Next). Жму на окно Window5 (Again) и возвращаюсь к пункту 1. Окно Window5 висит на протяжении всего времени, его нужно нажимать только в конце цикла.

[spoiler=Гифка][/spoiler]

Гифка конечно аддская, в следующий раз надо ещё подетальнее инфографику -__-
Теперь по поводу логики. Зачем нам знать, что есть пункт 2 (задержка)? Если это фиксированная задержка -- прописываем её через вейт между поисками, если же неопределённая, то какой смысл о ней говорить (ровно как и о вин3)? Нету по сути никакого "возврата" к пункту два (избыточные сведения в условии): просто сначала кликаем одну картинку, потом вторую и только после этого кликаем третью (обновление). Может, для верности тут ввести переменные, говорящие о том, что обе картинки первых уже кликнуты?)) 

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Помогите написать скрипт
« Reply #11 on: January 02, 2018, 07:14:48 AM »
Стоп-стоп! Сначала:

не помогло, после того как кликает первое окно сразу зависает  :(

а потом:

Определил, что скрипт зависает на последнем цикле:

Так на третьем или на втором зависает? Но полюбак трабла в картинках, желательно б сделать упрощение цветов понижением палитры через colormode, особенно если работаем с браузером и его текстом (лучше привязываться к картинкам в браузере, а не к тексту, потому что тот может сглаживаться и незаметно менять пиксели, поэтому и не находит).