Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: d2_bot on February 19, 2018, 07:25:25 PM
-
Подскажите пожалуйста как можно разгадать такую капчу при помощи анализа изображения?
(https://d.radikal.ru/d02/1802/ab/56dc77d562ea.png)
(https://b.radikal.ru/b08/1802/36/5cc741ad6245.png)
(https://d.radikal.ru/d39/1802/5a/686599dd6929.png)
Это в телеграме
В принципе находить картинки и передвигать курсор мыши по их координатам у меня получилось, подскажите как определить и указать кликеру с какой картинкой ему придется работать?
Например такая последовательность действий
Клик
Если есть картинка "N", то ждем пока она не пропадет
Картинка пропала, делаем действие и опять операция с картинкой "N"
Если нет картинки "N" после клика, то переходим к поиску картинок капчи
Поиск картинки в области "найдите кнопку"
Сначала поиск нужной картинки 1белая.bmp
Если не находит, то поиск следующей плюсикбелый.bmp, не находит то поиск палецбелый.bmp
Если находит картинку, например, плюсикбелый.bmp, то кликает в нужной области по картинке плюсикзеленый.bmp
Помогите пожалуйста с кодом!
-
ничего не понял насчет твоей последовательности действий.
вот скрипт, который находит картинку "кнопку.bmp" (во вложении). делает скриншот фрагмента правее от найденного, и сохраняет его с колормодом. далее ищет этот скрин ниже. и, в моем примере, наводит курсор на найденное.
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопку.bmp", -1, 90)
print("кнопку.bmp - ",$_return1,"x", $_return2)
WAITMS(100)
COLORMODE(5)
SCREENSHOTFIX ($_return1+50,$_return2-5,$_return1+65, $_return2+12,"pic.bmp")
WAITMS(100)
IF_PICTURE_IN (0,$_return2+20, $_xmax,$_ymax, "pic.bmp",16777215,80)
print("pic.bmp - ",$_return1,"x", $_return2)
move($_return1,$_return2)
WAITMS(100)
END_IF
END_IF
halt
-
благодарю за помощь, но для меня это пока сложно оказалось))
вот начал с простого, надо искать мешочек, если находит кликает и крутит 3 раза колесо, если не находит крутит колесо 2 раза и снова ищет, но у меня это большой код)
wait(3)
GETSCREEN
IF_PICTURE_IN (765,714, 806,752, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(100)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(100)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,596, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
waitms(200)
WHEELUP(2)
waitms(600)
GETSCREEN
IF_PICTURE_IN (759,261, 887,520, "мешок.bmp")
waims(300)
MOVE($_return1-150, $_return2+50)
waitms(200)
LCLICK($_return1-150, $_return2+50) //клик мешка
waitms(200)
WHEELUP(3)
Else
WHEELUP(2)
waitms(200)
END_IF
Пришлось искать по мешочку на белом фоне, так как на зеленом постоянно меняется цвет нескольких пикселей при прокрутке.
(https://b.radikal.ru/b11/1802/f4/b2300950807f.png)
-
прокомментировал свой код. там все очень просто. как только в нем разберешься, без проблем сможешь отредактировать для своих задач.
берешь данный код, сохраняешь его в одной директории с картинкой "кнопку.bmp". запускаешь прямо перед браузером с этой темой (масштаб в браузере должен быть 100%). и видишь, как прямо в твоих сообщениях находит нужное и указывает курсором.
вся фишка поиска в твоей задаче, это использование игнорируемого цвета. то есть сохраняется картинка с белым фоном, а при последующем поиске игнорируется этот цвет. в этом случае фон под картинкой нам не важен.
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопку.bmp", -1, 90) //ищем картинку кнопку.bmp
//если нашли
print("кнопку.bmp - ",$_return1,"x", $_return2) //смотрим координаты ее в логе
WAITMS(100)
COLORMODE(5) //немного упрощаем картинку в буфере
SCREENSHOTFIX ($_return1+50,$_return2-5,$_return1+65, $_return2+12,"pic.bmp") //делаем скрин фрагмента правее от найденой картинки.
WAITMS(100)
//а теперь ищем эту сохраненную картинку в ниже
IF_PICTURE_IN (0,$_return2+20, $_xmax,$_ymax, "pic.bmp",16777215,85)//используем игнорируемый цвет 16777215 - белый. в этом случае нам не важно какой фон там, зеленый или красный, будет искать только картинку.
print("pic.bmp - ",$_return1,"x", $_return2) //смотрим в логе координаты
move($_return1,$_return2) //перемещаем курсор к найденному.
WAITMS(100)
END_IF
END_IF
halt
-
а если работаю не в браузере, а в exe приложении и не на весь экран
и еще поясни пожалуйста
0,0, $_xmax,$_ymax,
//Как правильно в таком варианте прописать координаты?
//У меня вот так:
IF_PICTURE_IN (639,765, 712,815, "мешок.bmp", -1, 90)
-
хоть в браузере, хоть в паинте, хоть в другом приложении, без разницы. если в твоем приложении будет другой масштаб картинки, то просто нужно обновить искомую картинку "кнопку.bmp".
я написал код для универсального применения, области сканирования можно (нужно) подредактировать. 0,0, $_xmax,$_ymax значит, что поиск картинки будет произведен на всем экране.
-
(https://a.radikal.ru/a36/1802/04/fb9b7cabaec0.png)
вот что получается в pic.bmp
поменял в коде кординаты скриншота на точные без отклонений
SCREENSHOTFIX ($_return1,$_return2,$_return1, $_return2,"pic.bmp")
(https://b.radikal.ru/b42/1802/08/72a7c066c9e9.png)
Вот что вышло, курсор ушел к картинке обведенной красным, а искомый мешок не нашелся, он обведен черным
Какой то смышленный скрипт у тебя) подошел к вопросу с другой стороны, доллары ищет в любом формате ;D
-
SCREENSHOTFIX ($_return1,$_return2,$_return1, $_return2,"pic.bmp") - это один пиксель, этот пиксель где угодно может быть.
что там у тебя не так, не пойму. опять же я взял вышенаписанный код, ничего не менял, взял искомую картинку "кнопку.bmp". открыл браузер с этой темой и твоим последним скриншотом. запустил.
в логе:
0:37:56 кнопку.bmp - 817x342
0:37:57 pic.bmp - 721x394
и курсор указал мне на то, что в черном круге.
скорее всего чтото напортачил ты в координатах. SCREENSHOTFIX ($_return1+50,$_return2-5,$_return1+65, $_return2+12,"pic.bmp") - делает скрин правее верхнего левого угла найденной "кнопку.bmp" на 50пикс, и чуть выше на 5 пикс, размером 16х18.
вот такой - (https://i.imgur.com/GzSulyE.png)
-
В логе
8:52:47 мешок.bmp - 781x728
8:52:48 pic.bmp - 0x748
запустил ничего не меняя
9:26:40 мешок.bmp - 781x429
9:26:40 pic.bmp - 0x449
:-[
-
В логе
8:52:47 мешок.bmp - 781x728
8:52:48 pic.bmp - 0x748
:o а мешок то откуда взялся? я думал что картинка постоянно меняется. а неизменна остается надпись "кнопку". поэтому и нужно искать эту надпись.
оставь ты пока свои нововведения, разберись наконец принцип работы моего скрипта, не меняй пока в нем ничего.
ну если всеже не веришь мне, и хочешь искать мешок, то ищи его прямо на зеленом фоне, вот так:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "мешок.bmp", -1, 90)
print("мешок.bmp - ",$_return1,"x", $_return2)
WAITMS(100)
IF_PICTURE_IN (0,$_return2+20, $_xmax,$_ymax, "мешок.bmp",16777215,85)
print("мешок.bmp на зеленом фоне - ",$_return1,"x", $_return2)
move($_return1,$_return2)
WAITMS(100)
END_IF
END_IF
halt
не тестировал, возможно без цветокоррекции нужно будет уменьшить процент совпадения.
-
ну я понял ошибку)) :D я мешок искал) вырезал сейчас буквы "кнопку" и нашлась нужная кнопка
вот код
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопку.bmp", -1, 90) //ищем картинку кнопку.bmp
//если нашли
print("кнопку.bmp - ",$_return1,"x", $_return2) //смотрим координаты ее в логе
WAITMS(100)
COLORMODE(5) //немного упрощаем картинку в буфере
SCREENSHOTFIX ($_return1+50,$_return2-5,$_return1+65, $_return2+12,"pic.bmp") //делаем скрин фрагмента правее от найденой картинки.
WAITMS(100)
//а теперь ищем эту сохраненную картинку в ниже
IF_PICTURE_IN (0,$_return2+20, $_xmax,$_ymax, "pic.bmp",16777215,85)//используем игнорируемый цвет 16777215 - белый. в этом случае нам не важно какой фон там, зеленый или красный, будет искать только картинку.
print("pic.bmp - ",$_return1,"x", $_return2) //смотрим в логе координаты
move($_return1,$_return2) //перемещаем курсор к найденному.
WAITMS(100)
LCLICK($_return1, $_return2)
waitms(100)
WHEELUP(2)
END_IF
END_IF
else
waims(500)
WHEELUP(2)
END_IF
Запустил его, и началась каша малаша
13:29:49 кнопку.bmp - 693x179
13:29:49 pic.bmp - 597x231
13:29:50 кнопку.bmp - 693x179
13:29:50 pic.bmp - 597x231
13:29:51 кнопку.bmp - 693x299
13:29:52 pic.bmp - 597x351
13:29:53 кнопку.bmp - 693x419
13:29:53 pic.bmp - 597x471
13:29:54 кнопку.bmp - 693x218
13:29:54 pic.bmp - 597x270
13:29:55 кнопку.bmp - 693x338
13:29:56 pic.bmp - 597x390
13:29:56 кнопку.bmp - 693x191
13:30:00 кнопку.bmp - 693x311
13:30:01 pic.bmp - 597x363
13:30:02 кнопку.bmp - 693x311
13:30:02 pic.bmp - 597x363
13:30:03 кнопку.bmp - 693x431
13:30:04 pic.bmp - 597x483
13:30:05 кнопку.bmp - 693x551
13:30:05 pic.bmp - 597x603
13:30:06 кнопку.bmp - 693x180
13:30:06 pic.bmp - 597x232
13:30:07 кнопку.bmp - 693x300
13:30:08 pic.bmp - 597x352
13:30:09 кнопку.bmp - 693x300
13:30:09 pic.bmp - 597x352
13:30:10 кнопку.bmp - 693x420
13:30:11 pic.bmp - 597x472
13:30:12 кнопку.bmp - 693x420
13:30:12 pic.bmp - 597x472
13:30:14 кнопку.bmp - 693x540
13:30:14 pic.bmp - 597x592
13:30:15 кнопку.bmp - 693x540
13:30:16 pic.bmp - 597x592
13:30:17 кнопку.bmp - 693x660
13:30:18 pic.bmp - 597x712
13:30:19 кнопку.bmp - 693x660
13:30:20 pic.bmp - 597x712
-
В общем возьму код в арсенал) благодарю за помощь
Картинки пока находить получается, но не все. К сложным перейду позднее
Есть задачка, как лучше ее решить?
Кнопка "смотреть пост" есть всегда, кроме момента когда пост просматривается
(https://a.radikal.ru/a24/1802/36/27898a0b1925.png)
Когда находит кнопку "смотреть пост" кликает на нее, если не находит, начинает искать 2 картинки, если находит любую из них завершает работу.... но что-то я не разберусь как правильно организовать код:
wait(3)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (576,614, 737,645, "Смотреть пост.bmp")
waitms(200)
$check = 1
WAITMS(100)
MOVE($_return1, $_return2)
waitms(200)
LCLICK($_return1, $_return2)
waitms(200)
ELSE
wait(3)
IF_PICTURE_IN (431,320, 791,413, "превышены лимиты.bmp")
$check = 2 // Присваиваем $check значение 2
WAITMS(500)
ELSE
wait(1)
IF_PICTURE_IN (431,320, 791,413, "Пока нет.bmp")
$check = 3 // Присваиваем $check значение 3
WAITMS(500)
END_IF
END_IF
END_IF
END_IF
IF($check = 1) // Если $check равна 1 то выполняем это
IF_PICTURE_IN (906,143, 946,161, "Смотреть пост.bmp")
waitms(200)
MOVE($_return1, $_return2)
waitms(200)
LCLICK($_return1, $_return2)
waitms(200)
IF($check = 2) // Если $check равна 2 то выполняем это
MOVE(183, 139)
wait(1)
LCLICK(183,139)
wait(1)
IF($check = 3) // Если $check равна 3 то выполняем это
MOVE(183, 139)
wait(1)
LCLICK(183,139)
wait(1)
END_IF
END_IF
END_IF
END_CYC
Походу нужно как то от обратного... ищет картинку "смотреть пост", кликает, потом смотрит, есть ли какой то вариант из 2х картинок, если нету, жмет смотреть пост. Если кнопки "смотреть пост" нету, ждет ее появления
-
нужно както определиться.
получается что тут требуется одно
Когда находит кнопку "смотреть пост" кликает на нее, если не находит, начинает искать 2 картинки, если находит любую из них завершает работу
тут совсем другое
Походу нужно как то от обратного... ищет картинку "смотреть пост", кликает, потом смотрит, есть ли какой то вариант из 2х картинок, если нету, жмет смотреть пост. Если кнопки "смотреть пост" нету, ждет ее появления
а код показывает что-то совсем отличное от вышеуказанного.
-
много тем пролистал на форуме по похожим вопросам, не знаю как лучше, да и вообще как в конечном итоге
-
покачто не думай как должен будет работать код. объясни, как тебе в ручную приходится действовать, на что нужно кликать, чего нужно ожидать, что искать, и чего достичь. опиши алгоритм своих действий, темы на форуме тебе в этом не помогут. а дальше уже будем думать, как это все перенести в кликерман.
-
Вот действия которые я пытаюсь сделать при помощи кликера
(https://a.radikal.ru/a33/1802/77/1d34b017a832.gif)
Я пытался пойти от этих ответов бота:
(https://b.radikal.ru/b03/1802/db/dc0f26638740.png)
(https://a.radikal.ru/a07/1802/eb/5851a406b42a.png)
Как раз эти 2 варианта ответа должны были прекратить клик по кнопке "смотреть пост" и продолжить выполнять основной сценарий.
А сейчас я заметил, что после каждого успешного просмотра появляется вот такое сообщение:
(https://d.radikal.ru/d35/1802/e8/1f87b945df54.png)
Может стоит тогда от него отталкиваться?
-
Последовательность действий:
Заходим на нужный объект, ждем 5 секунд
Ищем кнопку "смотреть пост.bmp"
Находит нажимаем смотреть пост
Далее проверка на наличие капчи
Ищем кнопку "кнопку.bmp", нет кнопки -> ищем кнопку закончились
Нашли кнопку закончились - > завершение поиска и кликов по картинкам
Хочу это посередине основного скрипта сделать в определенный момент - заходим на нужны объект и начинается цикл
поиска и кликов по кнопкам, до тех пор, пока не будет найдена кнопка "закончились.bmp" далее продолжение основного скрипта
Сейчас у меня вот такие наброски, пытаюсь переделать под свою последовательность действий
wait(5)
GETSCREEN
IF_PICTURE_IN (616,613, 702,661, "закончились.bmp")
waitms(100)
GETSCREEN
IF_PICTURE_IN (616,613, 702,661, "кнопку.bmp")
print("кнопку.bmp - ",$_return1,"x", $_return2)
WAITMS(100)
COLORMODE(5)
SCREENSHOTFIX ($_return1+50,$_return2-5,$_return1+65, $_return2+12,"pic.bmp")
WAITMS(100)
IF_PICTURE_IN (0,$_return2+20, $_xmax,$_ymax, "pic.bmp",16777215,80)
print("pic.bmp - ",$_return1,"x", $_return2)
move($_return1,$_return2)
wait(1)
END_IF
else
GETSCREEN
IF_PICTURE_IN (428,582, 1040,781, "смотреть постpv.bmp")
waitms(100)
move($_return1,$_return2)
WAITMS(100)
LCLICK($_return1, $_return2)
END_IF
END_IF
Кстати скрипт который ты давал, отлично справился с поиском капчи, но только с циферкой 1 возникли проблемы, вот не знаю как ее отдельно искать, а то ведь будет не туда тыкать.