Author Topic: Помощь в написании скрипка для поиска картинки и нажатия на нее  (Read 1276 times)

0 Members and 1 Guest are viewing this topic.

sitonacid

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Добрый день! Прошу подсказать, что не так с моим кодом. Есть викторина, необходимо ее запустить, ответить на 5 вопросов, закрыть и запустить заново. Вопросы повторяются, но ответы на кнопках меняются постоянно местами, также надо подождать когда даст ответ оппонент (компьютер несколько секунд - 2-5), и так пять вопросов. Затем, после показания результатов, надо нажать завершить и нажать снова старт. Написал скрипт, не спорю, что он так себе, опыта мало. Задал поиск по картинке (кнопки старт), отметил координаты, затем прописал цикл в котором идет перебор картинок до нужной нам в этм вопросе, то есть верный вариант ответа, и соответственно нажатие на него, так пять раз. Затем нажатие на кнопку завершить при ее отображении по четко заданным координатам. В итоге кликает на старт (скорей всего просто от того что заданы координаты) затем зависает (скорей всего перебирает, но картинку не ищет), ничего не нажимает, когда появляется кнопка завершить, нажимает ее и потом запускает кликом на кнопку старт. Не могу разобраться, почему не ищет картинки и не кликает на них?
Code: [Select]
// 13.04.2018
#name "New Script"
GETSCREEN
IF_PICTURE_IN (277,150, 1099,713, "start.bmp", -1, 100)
   LCLICK(526, 561)
   WAITMS(500)
   FOR($a, $a < 5)
      GETSCREEN
      IF_PICTURE_IN (257,220, 1132,064, "2.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "3.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "4.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "5.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "6.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "7.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "8.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "9.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "10.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "11.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "12.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "13.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "14.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "15.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "16.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "17.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "18.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "19.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "20.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "21.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "22.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "23.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "24.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "25.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   ELSE
      IF_PICTURE_IN (257,220, 1132,064, "26.bmp", -1, 100)
         LCLICK($_return1+170, $_return2+16)
         WAIT(3)
      END_IF
   END_CYC
END_IF
GETSCREEN
IF_PICTURE_IN (283,305, 1001,467, "end.bmp", -1, 100)
   LCLICK(628, 708)
   WAITMS(500)
END_IF

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Добрый)
Попробуйте немножко поменять 7 строчку: FOR($a=0, $a < 5)
Также не  понятна область поиска:
   IF_PICTURE_IN (257,220, 1132,064, "2.bmp", -1, 100). Скорее всего пропущена единица, ну или написан "0" вместо "9".

Для упрощения скрипта можно было бы использовать подпрограмму или просто зациклить поиск картинок (раз уж названия последовательные).
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (277,150, 1099,713, "start.bmp", -1, 100)
   LCLICK(526, 561)
   WAITMS(500)
   FOR($a=0, $a < 5)
      GETSCREEN
      For($num=2,$num<27)
          IF_PICTURE_IN (257,220, 1132,1064, STRCONCAT($num, ".bmp"), -1, 100)
          LCLICK($_return1+170, $_return2+16)
          WAIT(3)
          END_IF
      End_cyc
   END_CYC
END_IF
GETSCREEN
IF_PICTURE_IN (283,305, 1001,467, "end.bmp", -1, 100)
   LCLICK(628, 708)
   WAITMS(500)
END_IF

Вообще, если викторина сложная и с большим количеством вопросов, может быть полезным (с т.зр. скорости и красоты кода) пользоваться не поиском картинок, а сравнением с хешсуммами верных ответов, хранящимися в ".ini".  Но тогда надо, чтобы все координаты были постоянными и точными. Так что может и не надо.
« Last Edit: April 19, 2018, 10:20:31 PM by Qwerry »

sitonacid

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Добрый)
Попробуйте немножко поменять 7 строчку: FOR($a=0, $a < 5)
Также не  понятна область поиска:
   IF_PICTURE_IN (257,220, 1132,064, "2.bmp", -1, 100). Скорее всего пропущена единица, ну или написан "0" вместо "9".

Для упрощения скрипта можно было бы использовать подпрограмму или просто зациклить поиск картинок (раз уж названия последовательные).
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (277,150, 1099,713, "start.bmp", -1, 100)
   LCLICK(526, 561)
   WAITMS(500)
   FOR($a=0, $a < 5)
      GETSCREEN
      For($num=2,$num<27)
          IF_PICTURE_IN (257,220, 1132,1064, STRCONCAT($num, ".bmp"), -1, 100)
          LCLICK($_return1+170, $_return2+16)
          WAIT(3)
          END_IF
      End_cyc
   END_CYC
END_IF
GETSCREEN
IF_PICTURE_IN (283,305, 1001,467, "end.bmp", -1, 100)
   LCLICK(628, 708)
   WAITMS(500)
END_IF

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

У вас отличный код, действительно координаты совсем не те, ошибка в оси Y. Про возможность сократить число строк даже не догадывался. Сейчас попробуем. Спасибо огромное за совет!