Author Topic: Прошу помочь IF_PICTURE_IN  (Read 2469 times)

0 Members and 1 Guest are viewing this topic.

Glimeaz

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Прошу помочь IF_PICTURE_IN
« on: February 10, 2017, 03:04:46 AM »
Здравствуйте!
Помогите, пожалуйста, в написании скрипта.
С программированием первый раз столкнулась, так что заранее прошу прощения у знатоков и профессионалов за свою безграмотность в этом деле  :-[

Задача скрипта:
1. Клик по картинке №1.
2. Перемещение курсора мышки на другую картинку №2. (или относительно текущего положения) и ожидание
3. Только при появлении нужной картинки №3. клик (на картинку  №2.)
4. Клик по картинке №4
5. Повтор действий

Code: (clickermann) [Select]
GetScreen
IF_PICTURE_IN (1106,320,1240,453,"1.bmp")
    LCLICK($_return1, $_return2)
    END_IF
Else
    GetScreen
    IF_PICTURE_IN (1106,320,1240,453,"3.bmp")
     IF_PICTURE_IN (1020,372,1209,507,"2.bmp")
        LCLICK($_return1, $_return2)
     END_IF
waitms(200)
Else
    GetScreen
    IF_PICTURE_IN (1100,490,1267,680,"4.bmp")
    LCICK($_return1, $_return2)
    END_IF
waitms(200)

У меня не находит картинки. Делала скриншот страницы, вырезала нужный фрагмент, сохраняла в .bmp
Проверяла картинку :
Code: (clickermann) [Select]
GETSCREEN
    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
       print("Найден в координатах X=", $_return1, ", Y=", $_return2)
       MOVE($_return1, $_return2)
    Else
       HINTPOPUP("Не найдено")
    END_IF
    HALT

Выдает: не найдено
Еще делала: Получение скриншота с цветокоррекцией (фильтр 6)  - тоже без результата

Скрипт очень нужен, сэкономит кучу времени!
Буду очень признательна, если кто поможет

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Прошу помочь IF_PICTURE_IN
« Reply #1 on: February 10, 2017, 07:30:18 AM »
Code: (clickermann) [Select]
GETSCREEN
    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp",-1,97) // 97-процент совпадения. Пробуйте менять.
       print("Найден в координатах X=", $_return1, ", Y=", $_return2)
       MOVE($_return1, $_return2)
    Else
       HINTPOPUP("Не найдено")
    END_IF
    HALT

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Прошу помочь IF_PICTURE_IN
« Reply #2 on: February 10, 2017, 08:32:26 AM »
скорректированный снимок должен быть получен таким скриптом
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6) // можно попробовать значения 5-8
SCREENSHOT
HALT
Из этого снимка вырезают маленький фрагмент 50х50 а лучше еще меньше.
В своем скрипте также нужно не забыть написать после GETSCREEN COLORMODE(6)
Также нужно понизить процент совпадения, это последнее число в функции 100 означает 100%

Code: (clickermann) [Select]
$check = 0 // если в переменной ноль цикл крутится
WHILE($check = 0) // цикл ожидания картинки 1
   GETSCREEN
   IF_PICTURE_IN (1106,320,1240,453,"1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      $check = 1 // если поменять на 1 то цикл прекратит повторяться
   ELSE
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0) // цикл ожидания картинки 2 и 3
   GETSCREEN
   IF_PICTURE_IN (1020,372,1209,507,"2.bmp", -1, 100)
      $x = $_return1 // здесь запоминаем координату 2.bmp в переменные
      $y = $_return2
      MOVE($x,$y) // наводим мышь
      WAITMS(500)
      GETSCREEN
      IF_PICTURE_IN (1106,320,1240,453,"3.bmp", -1, 100)
         LCLICK($x,$y) // клик по координатам 2.bmp
         WAITMS(100)
         $check = 1
      ELSE
         WAITMS(50)
      END_IF
   ELSE
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0) // цикл ожидания картинки 4
   GETSCREEN
   IF_PICTURE_IN (1100,490,1267,680,"4.bmp", -1, 100)
      $check = 1
      LCLICK($_return1, $_return2)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC
« Last Edit: February 10, 2017, 08:34:28 AM by Oraven »

Glimeaz

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Прошу помочь IF_PICTURE_IN
« Reply #3 on: February 10, 2017, 11:14:03 PM »
Спасибо большое! Картинки теперь находит и узнает  :)
Придумала упростить скрипт за счет уменьшения масштаба окна до 67% (так что картинки не будут передвигаться), теперь можно не по четырем картинкам навигироваться, а только по одной, а остальные клики по координатам точек.

Остался один вопрос. Как сделать первый клик по координатам, а потом ожидание (без кликов) пока не появится картинка в определенном месте и только тогда кликать.
А то у меня получается, что мышка постоянно нонстоп кликает в одно место, а должна ждать появления картинки и только тогда кликнуть.

1. клик на первые координаты (при этом открывается окошко, на которое нужно будет кликнуть в пункте 3 , при появлении картинки  )
2. ожидание появления картинки
3. клик на координаты
4. клик на другие координаты
5. Повторение действий, пока вручную не остановлю

Code: (clickermann) [Select]
$check = 0
 WHILE($check = 0)
    LCLICK(1187,205)     
        GETSCREEN
              COLORMODE(6)
              IF_PICTURE_IN (1253,193,1278,224,"1.bmp", -1, 100)
             WAITMS(200)
             LCLICK(1152,238)
             WAITMS(600)
             LCLICK(1184,307)
         WAITMS(20)         
            $check = 1
         ELSE
         WAITMS(10)
      END_IF
    END_CYC

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Прошу помочь IF_PICTURE_IN
« Reply #4 on: February 11, 2017, 09:51:07 AM »
Если правильно понял, нужно вынести этот клик за пределы цикла
Code: (clickermann) [Select]
LCLICK(1187,205)  // первый клик по координатам
$check = 0
WHILE($check = 0)  //  цикл ожидания картинки (без кликов)
   GETSCREEN(1253,193,1278,224)  //  так чуть быстрее происходит поиск
   COLORMODE(6,1253,193,1278,224)  //  так чуть быстрее происходит поиск
   IF_PICTURE_IN (1253,193,1278,224,"1.bmp", -1, 100) //  появилась картинка в определенном месте!!!
      WAITMS(200)
      LCLICK(1152,238) // клик на координаты
      WAITMS(600)
      LCLICK(1184,307) //  клик на другие координаты
      WAITMS(20)
      $check = 1
   ELSE
      WAITMS(10)
   END_IF
END_CYC
//  повторение действий, пока вручную не остановлю
Цикл крутится пока $check не станет равен 1. А произойдет это только когда будет найдена картинка 1.bmp.
« Last Edit: February 12, 2017, 01:06:45 PM by open_78 »

Glimeaz

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Прошу помочь IF_PICTURE_IN
« Reply #5 on: February 14, 2017, 02:13:08 PM »
Большущее спасибо за подсказку! Теперь заработало как надо :)