Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: m1hai on April 25, 2018, 09:50:59 PM
-
Нужно найти аватарку группы (https://vk.com/behappy_1) (https://image.ibb.co/cwkcwx/inima.jpg) (https://imgbb.com/) от постов в середине экрана и вывести координаты.
GETSCREEN
COLORMODE(5)
IF_PICTURE_IN (536,323,1082,737,"inimaaa.bmp",-1,70)
print("нашёл:",$_return1, $_return2)
ELSE
print("не нашёл")
END_IF
Пробовал и с SCANPICTURE и тоже не находит. Попробовал IF_PIXEL_IN и по цвету находит.
В чём может быть проблема?
Битмап сделал сохраняя как в пейнте, стоит в папке со скриптом, пробовал 24-бит, 256, меньший размер, больший размер, всё равно не находит.
Помогите пожалуйста.
-
если используешь перед поиском colormode(5), то и искомый фрагмент "inimaaa.bmp" должен быть из картинки с colormode(5)
выполни простейший скрипт
GETSCREEN
COLORMODE(5)
SCREENSHOT
и потом из скриншота в папке screens вырежи нужную тебе аватарку и сохрани в папку со скриптом
-
Нужно правильно подготавливать картинки.
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (536,323,1082,737,"inimaaa.bmp",-1,80)
print("нашёл: ", $_return1,",",$_return2)
MOVE($_return1,$_return2)
ELSE
print("не нашёл")
END_IF
HALT
-
Спасибо большое, буду знать, не знаю почему потупил и не заметил свою ошибку. Хорошего дня. :)
-
Всем привет. У меня аналогичная проблема. Написал скрипт - работает, поменял картинку поиска и все! Не работает!!! Хоть обратно подставлял ту, с которой работало, хоть другую. Что не так - не пойму.
//LCLICK(962,657)
GETSCREEN(180,190,512,225)
//COLORMODE(6)
WAITMS(500)
//WAITMS(500)
IF_PICTURE_IN(187,190,512,225,"L.bmp",0,70)
WAITMS(500)
LCLICK(962,657)
END_IF
halt
В заданной области (см. картинку 111111111111.jpg), от двоеточия после слова "Имя" и до слова "Сила", ищу имя с английской "L". Фон черный, буква белая. После запуска скрипта ничего не происходит от слова "совсем". Если раскоментировать HALT то скрипт останавливается примерно через секунду. Если Halt оставить закомментированным, а раскоментировать верхний LCLICK(962,657) (нижний соответственно закомментировать), то скрипт идет по кругу... Вывод: не обрабатывается область сканирования. Или, если точнее, в скрипте происходит постоянное совпадение.
Colormode - тоже не дал результатов.
Помогите разобраться
-
Ты ж понимаешь что если считать черное за прозрачность то белую L функция найдет везде где достаточно белого пространства?!
-
Ок, проблема, как оказалось, действительно не такая. Прошу прощения, что влез не в ту тему по недопониманию происходящего... После некоторых экспериментов я понял, что происходит, но как решить - не знаю.
По поводу фона: не имеет значения учитываю я фон или нет. Это я проверил на практике.
Что происходит: Скрипт останавливается не в том цикле, где найдено совпадение по картинке, а в следующем. Как прикрепить видео - не знаю. Выложил на ГуглДиск
https://drive.google.com/file/d/1XfC6NIhpW5DgXJtkdWH2ca2U-SHH0S2U/view?usp=sharing
-
посмотрел видео. я так понимаю, что нужно постоянно жать на эту зеленую кнопку, пока не появится адпись с буквой "Л".
а теперь давай посмотрим что ты написал в скрипте:
делаем скрин и ищем букву Л - не нашли - ждем немного и жмем на кнопку - после нажатия СРАЗУ МГНОВЕННО снова делаем скрин.... и как ты думаешь, в момент перед кликом и сразу после него чтото изменится на нашем экране? да ничего не изменится, и буквы Л ни в коем разе там не появится, картинка не успеет подгрузиться. поэтому в конце после клика по зеленой кнопке, требуется соответствующая задержка, чтобы твоя буква подгрузилась и появилась на экране.
если ничего не понял, то :
GETSCREEN
IF_PICTURE_IN
move($_return1, $_return2)
halt
END_IF
wait(1)
LCLICK
wait(2)
образно
-
Вообще я в таких случаях делаю скрин перед кликом в той области, которая после клика должна измениться, и после самого клика запускаю цикл с таймером. Из цикла выход в двух вариантах. 1 - таймер истек (тогда повторяю операцию) и 2 - картинка, с которой я делал скрин, сменилась (это значит, что клик прошел удачно и вот теперь можно анализировать экран)
GETSCREEN
IF_PICTURE_IN(187,190,512,225,"L.bmp",0,70)
// L.bmp найдена и если нужно кликнуть на картинку, то я иногда извращаюсь :)
LCLICK($_return1+(ширина_картинки/2), $_return2+(высота_картинки/2))
else
SCREENSHOTFIX(187,190,512,225, "proverka.bmp", 0) // Если L.bmp не найдена, то делаем проверочный скрин
$click = 0
WHILE($click = 0) // Запускаем цикл
GETSCREEN
IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // Если проверочный скрин найден, значит соперник не сменился
LCLICK(962,657) // На сколько я понял, это клик на кнопку "Сменить соперника" - кликаем
$time = $_time_t + 5 // Запускаем цикл с таймером на 5 сек
WHILE($time > $_time_t)
GETSCREEN
IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // В течении 5 секунд ждем, пока проверочный скрин не будет найден
WAITMS(50)
ELSE
$time = 0 // Если мы его не нашли, значит соперник сменился и мы выходим из этого цикла
$click = 1 // и предыдущего
END_IF
END_CYC
// Если же проверочный скрин так и останется на месте,
//значит страница вообще не отреагировала на клик, либо зависла, или еще что-то.
// В таком случае мы выйдем из цикла с таймером
// Но останемся в предыдущем цикле и снова кликнем и
// снова будем ждать, пока картинка сменится
else
$click = 1
END_IF
END_CYC
END_IF
halt
И я тебя уверяю, что такая схема будет работать точнее и быстрее, чем с твоими WAITMS(500) :)
В скрипте паузы должны быть минимальными (только для разгрузки процессора). Все остальные ожидания должны быть "интеллектуальными" и сбоеустойчивыми ))
-
IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // В течении 5 секунд ждем, пока проверочный скрин не будет найден
WAITMS(50)
ELSE
$time = 0 // Если мы его не нашли, значит соперник сменился и мы выходим из этого цикла
$click = 1 // и предыдущего
END_IF
Кстати... Опытным путем показало, что в некоторых случаях нужно проверять не только исчезновение проверочного скрина, но и появления, после этого, какого-нибудь скрина, который было бы видно только при полной загрузке новой страницы, или какой-либо панели.