Author Topic: поиск и клик множества картинок  (Read 2709 times)

0 Members and 1 Guest are viewing this topic.

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
поиск и клик множества картинок
« on: January 04, 2016, 01:40:39 PM »
задача: на экране есть несколько кнопок, нужно их все прокликать, после клика появляется диалоговое окно и еще десяток кнопок (других) и нужно кликнуть рандомно одну из них, я написал код (с помощью оравена) но так как задача довольно популярна решил создать тему тут, в коде не работает вторая часть (рандомный клик) хотелось бы сделать ее универсальной и избавиться от костылей

Code: (clickermann) [Select]
begin:
print("new turn")
getscreen
scanpicture($arr, 0,0, $_xmax, $_ymax, "chat.bmp")
while (arrsize($arr) > 0)
print("pictures found")
$y = arrpop($arr)
$x = arrpop($arr)
lclick($x, $y)
WAIT(1)

getscreen
scanpicture($var, 0,0, $_xmax, $_ymax, "send.bmp")
$rnd = rndfrom(0,2,4,6,8,10,12,14,16,18)
$x = $var[$rnd]
$y = $var[$rnd+1]
undefine($var)
lclick($x, $y)
WAIT(1)
pic("send.bmp")
end_cyc
undefine($arr)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск и клик множества картинок
« Reply #1 on: January 04, 2016, 03:09:05 PM »
Не работает может потому что один из способов обращения к массиву (arrpop или по индексу) даёт строку?
При введении массивов кажется строку давал arrpop. Потом поправили.
В 4.11 сломали по индексу.

Для универсальности  не использовать rndfrom, перевести на RND.

Какие ещё костыли?...
Ну я бы ещё проверял при поиске send.bmp нашлось ли вообще что нибудь, а лучше ждать чтобы массив не был пустым.

Code: (clickermann) [Select]
getscreen
scanpicture($arr, 0,0, $_xmax, $_ymax, "chat.bmp")
while (arrsize($arr) > 0)
   print("pictures found")
   $y = arrpop($arr)
   $x = arrpop($arr)
   lclick($x, $y)
   WAIT(1)
   
   getscreen
   scanpicture($var, 0,0, $_xmax, $_ymax, "send.bmp")
   WHILE(arrsize($var) = 0)
      WAITMS(500)
      getscreen
      scanpicture($var, 0,0, $_xmax, $_ymax, "send.bmp")
   END_CYC
   
   $rnd = RND(0, (arrsize($var) / 2)-1)
   $x = INT($var[$rnd*2])
   $y = INT($var[$rnd*2+1])
   undefine($var)
   lclick($x, $y)
   WAIT(1)
   pic("send.bmp")
end_cyc
undefine($arr)


Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: поиск и клик множества картинок
« Reply #2 on: January 04, 2016, 06:45:16 PM »
как не странно - рандомайзер заработал, вариант с строчным выводом аррпопа мне в голову не пришел, спс

не понятно для чего ты делал двойной сканпик во втором случае, и как сделать в первом поиске клик не с конца, а с начала

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: поиск и клик множества картинок
« Reply #3 on: January 06, 2016, 03:21:04 PM »
не понятно для чего ты делал двойной сканпик во втором случае, и как сделать в первом поиске клик не с конца, а с начала

А зачем ты спрашиваешь, если сам всё знаешь? Это способ повествования такой?

С начала... заменить arrpop на чтение по индексу. По массиву пробегаться циклом FOR или WHILE
Code: (clickermann) [Select]
getscreen
scanpicture($arr, 0,0, $_xmax, $_ymax, "chat.bmp")
$size = arrsize($arr)
FOR($i_chat = 0, $i_chat < $size, 2)
   print("pictures found")
   $y = INT($arr[$i_chat])
   $x = INT($arr[$i_chat+1])
   lclick($x, $y)
   WAIT(1)
   
   getscreen
   scanpicture($var, 0,0, $_xmax, $_ymax, "send.bmp")
   WHILE(arrsize($var) = 0)
      WAITMS(500)
      getscreen
      scanpicture($var, 0,0, $_xmax, $_ymax, "send.bmp")
   END_CYC
   
   $rnd = RND(0, (arrsize($var) / 2)-1)
   $x = INT($var[$rnd*2])
   $y = INT($var[$rnd*2+1])
   undefine($var)
   lclick($x, $y)
   WAIT(1)
   pic("send.bmp")
END_CYC
undefine($arr)