Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: FeNIkS on July 18, 2014, 02:48:55 PM
-
Всем привет! Нашёл похожие темы, но всё никак не получается написать обход.
Сможет ли кто-то помочь с написание скрипта под данную (http://areyouahuman.com/demo-playthru/) капчу?
Буду очень благодарен)
-
Нихрена себе капча.
Я думаю, возможно, только если там мало вариантов и программировать каждый.
-
Вариантов около 20-30 штук. Я думаю, что скрипт как-то будет похож на этот (http://crapware.aidf.org/forum/index.php?topic=312.0)
-
Никто не может помочь в написании скрипта? Если трудно написать, то просто попрошу объяснить, как и что делать
-
А что именно непонятно? Что нужно объяснять? Насколько я понимаю, весь скрипт будет напичкан IF_PICTURE_IN. Или тебе эта команда непонятна?
-
Желательно, показать пример именно для этой капчи. Хотя бы для 1 вида
-
(http://f6.s.qip.ru/1HDgENtQ.png)
Я хз - кто как сделал бы... Но я, так как я не силен в разных массивах и так далее, сделал бы так...
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp", -1, 100) // Ищем картинку 1 (пустое место для звезды)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp", -1, 100) // Если картинка 1 нашлась, то ищем картинку 3 (плавающую звездочку)
LDOWN($_return1, $_return2) // После того, как нашли картинку 3, зажимаем на ней левую кнопку мыши
WAITMS(100)
LUP(xxx,yyy) // Отпускаем правую кнопку мыши в тех координатах, где у нас картинка 1
WAITMS(100)
END_IF
END_IF
WAITMS(100)
// Ниже то же самое для треугольника
Это приблизительный набросок... Чтоб мысль была понятна. Красным контуром обозначены границы, по которым я бы сделал скрины для поиска фигур.
-
Спасибо, сейчас попробую)
-
Общая схема
- Поиск окна капчи
- Запуск
- Обработка
- Ожидание подтверждения
Обработка подробнее... Чтобы более-мение стандартизировать сделал так:
Ищу неподвижную область куда перетягиваются элементы, она же определяет номер варианта. Имя, например, ver_4.bmp
В подпрограмму передаю количество возможных "плавающих" картинок, номер варианта и смещения. Смещения - куда будем тянуть каждую картинку относительно ver_4.bmp. Чаще всего совпадают с положением ver_4.bmp, но бывает нужно в разные места.
Ищем последовательно картинки к данному варианту и перетягиваем их.
Иногда вариант один (косметичка), а наборы элементов бывают разные. Этим способом мы сильно сокращаем код и создание.
Вот почти готовый код. Осталось дополнять вариантами... Не реализован отдельный вариант с бабочками. Можно его или пропускать или обрабатывать другой подпрограммой, т.к. логика другая.
#name "AYH"
// Author: Vint
// Version: 0.3 (21.07.2014)
#logfile
$pref = "ver_" // префикс имени основы картинки (варианты)
$num = 12 // сколько вариантов всего
//------------------------------------------------------------------------------
//==============================================================================
SUB(PLAY, $pic, $version, $D1_X,$D1_Y, $D2_X,$D2_Y, $D3_X,$D3_Y) //=============
// количество картинок в этом варианте
// № варианта
// смещения X/Y куда тащить (от базовой)
$time = $_time_t + 5
WHILE($time > $_time_t)
// 1-й элемент
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_1", ".bmp"))
LOGWRITE ("нашли 1")
// перенос
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D1_X, $main_Y+$D1_Y)
WAITMS(200)
LUP($main_X+$D1_X, $main_Y+$D1_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
END_IF
// 2-й элемент
IF($pic > 1)
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_2", ".bmp"))
LOGWRITE ("нашли 2")
// перенос
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(200)
LUP($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
END_IF
END_IF
// 3-й элемент
IF($pic > 2)
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_3", ".bmp"))
LOGWRITE ("нашли 3")
// перенос
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(200)
LUP($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
END_IF
END_IF
// 4-й элемент
IF($pic > 3)
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_4", ".bmp"))
LOGWRITE ("нашли 4")
// перенос
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(200)
LUP($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
END_IF
END_IF
// 5-й элемент
IF($pic > 4)
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, STRCONCAT($pref, $version,"_5", ".bmp"))
LOGWRITE ("нашли 5")
// перенос
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(200)
LUP($main_X+$D2_X, $main_Y+$D2_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
END_IF
END_IF
END_CYC
END_SUB
//==============================================================================
start:
// ищем-ждём окно с капчей
MOVE($_xmax,$_ymax)
$find = 0
WHILE($find = 0)
GETSCREEN
IF_PICTURE_IN (0,0,$_xmax,$_ymax, "start.bmp",-1,86)
HINTPOPUP("Капча!")
LCLICK($_return1+50,$_return2+10)
// основная область капчи
$X1 = $_return1-131
$X2 = $_return1+230
$Y1 = $_return2-82
$Y2 = $_return2+50
// кнопка RELOAD
$reload_X = $_return1+154
$reload_Y = $_return2+64
$find = 1
ELSE
WAITMS(200)
END_IF
END_CYC
// распознаём вариант капчи
MOVE($_xmax,$_ymax)
WAITMS(2000)
$version = 0
WHILE($version = 0)
GETSCREEN
$version = 0
$i = 0
FOR($i,$i < $num)
IF_PICTURE_IN (0,0,$_xmax,$_ymax, STRCONCAT($pref, $i+1, ".bmp"),-1,100)
$version = $i+1
LOGWRITE ("Вариант капчи № ", $i+1)
$main_X = $_return1
$main_Y = $_return2
$i = 10000 // выходим досрочно
ELSE
WAITMS(20)
END_IF
END_CYC
IF($version = 0)
// тут лучше проверить на релоад
// Можно или обновить капчу или определять вариант опять
$version = 10000
END_IF
END_CYC
// релоад
IF($version = 10000)
LCLICK($reload_X,$reload_Y)
WAIT(1)
GOTO(start)
END_IF
SWITCH($version)
CASE(1) // вариант 1 (ТОРТ)
PLAY(2, $version, 15,10, 15,10, 0,0) // 2 картинки, №варианта, смещения XY
CASE(2) // вариант 2 (бегуны)
PLAY(2, $version, -30,0, -30,0, 0,0)
CASE(3) // вариант 3 (мылыш обжора)
PLAY(4, $version, 20,25, 20,25, 20,25)
CASE(4) // вариант 4 (косметичка)
PLAY(4, $version, 0,0, 0,0, 0,0)
CASE(5) // вариант 5 (летающие звери)
PLAY(5, $version, 0,0, 0,0, 0,0)
CASE(6) // вариант 6 (ваза с цветами)
PLAY(4, $version, 0,0, 0,0, 0,0)
CASE(7) // вариант 7 (рожа)
PLAY(3, $version, 0,25, 0,55, 0,68)
CASE(8) // вариант 8 (Aliens)
PLAY(3, $version, 0,25, 0,25, 0,25)
CASE(9) // вариант 9 (баскетбол)
PLAY(1, $version, 0,40, 0,0, 0,0)
CASE(10) // вариант 10 (гольф)
PLAY(1, $version, 0,10, 0,0, 0,0)
CASE(11) // вариант 11 (велосипед)
PLAY(2, $version, 0,0, 55,-70, 0,0)
CASE(12) // вариант 12 (лимонад)
PLAY(2, $version, 0,0, 0,0, 0,0)
END_SWITCH
// Ждём подтверждения
MOVE($_xmax,$_ymax)
WAITMS(50)
$time = $_time_t + 15
$find = 0
WHILE(($find = 0) & ($time > $_time_t))
GETSCREEN
IF_PICTURE_IN ($X1,$Y1,$X2,$Y2, "complete.bmp",-1,75)
LOGWRITE ("Капча распознана!")
HINTPOPUP("Капча распознана!")
$find = 1
LCLICK($reload_X,$reload_Y)
WAIT(1)
ELSE
WAITMS(100)
END_IF
END_CYC
IF($find = 0)
LOGWRITE ("Не распознали")
LCLICK($reload_X,$reload_Y)
WAIT(1)
END_IF
GOTO(start)
HALT
-
Кстати... Обработать всего вариантов 5, а остальные пропускать - тоже выход )) Я бы вообще не заморачивался - обработал бы 1 вариант и кер бы с ним )) Пусть скрипт его и ищет постоянно ))
-
Это только, если там нет штрафа за это или ограничения.
Даже мои 20 вариантов очень мало, долго ждать подходящего.
-
Огромное спасибо) Дальше уже буду дополнять) Кстати, да, капчу нужно выполнять с первого раза, т.к. сайт начинает подозревать работу бота
-
Ну, значит надо кропотливо проработать все варианты...)) А от себя еще хочу обратить внимание вот на что. В скрипте уважаемого Vinta, в отличие от моего (отличиев там много, но я хочу обратить внимание на это)
LDOWN($_return1+5, $_return2+5)
WAITMS(100)
MOVE($main_X+$D1_X, $main_Y+$D1_Y)
WAITMS(200)
LUP($main_X+$D1_X, $main_Y+$D1_Y)
WAITMS(300)
MOVE($_xmax,$_ymax)
WAITMS(50)
после зажима ЛКМ идет сначала MOVE в нужную точку, потом пауза и только потом отпускается ЛКМ и это правильно. Только прошу понять меня правильно. Это не оценка скрипта уважаемого Vinta с моей стороны, а указание на МОЮ грубую ошибку. Это на тот случай, если мой пример хоть как-то будет рассматриваться :)