Author Topic: AGClient - распознавание капчи для кликера  (Read 104978 times)

0 Members and 4 Guests are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #45 on: February 28, 2017, 09:59:07 PM »
Вообщето он попиксельно и рисует  ;D.
Делает скрин области с капчей. Определяет количество и местоположение всех картинок, координаты верхних левых углов. Потом начинает в графическом буфере рисовать циферки (и буковки если картинок больше девяти). Сами циферки записаны в отдельных файлах, тупо построчно цвета  пикселей. Сохранение в файл отредактированной кликером капчи.Вот на этом я и остановился, поняв что агклиент что с офсайта не мог пересылать файлы. Вышел из положения, в вин7 предварительный просмотр картинок есть, вроде и в хр был, не помню. Там плюс к этому можно масштаб уменьшить. И агклиент уже отправлял скрин с экрана отоедактированной картинки.
Ну и в этоге отдельная подпрограмма, которая кликает по нужным картинкам, пологаясь на ответ рукапчи.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #46 on: March 10, 2017, 04:55:24 PM »
Распознавание "reCaptcha" с помощью Clickermann и AGClient.

Краткая демонстрация работы скрипта - видео на youtube.com
На сервисе rucaptcha.com услуга распознавания рекапчи стоит 16 копеек за одно разгадывание. Данный метод снижает стоимость до 5 копеек. За счет отправки рекапчи в виде изображения, сервис определяет ее как обычную капчу.

Суть распознавания заключается в следующем:
  • определение количества и координат всех картинок в капче.
  • нумерация найденных картинок в формате - 1, 2, 3, .... ,D, E, F, G, и сохранение отредактированного изображения на ПК.
  • отправка капчи на сервис разгадывания с помощью AGClient v1.5 . ожидание ответа.
  • клики по распознанным картинкам, исходя из ответа, полученного с сервиса.

Скрипт содержит 3 подпрограммы:
Code: (clickermann) [Select]
numbering($x1, $y1, $x2, $y2)   //определение и нумерация капчи по координатам
response()            //распознавание
click_pic($str_resp)   //клики по картинкам, $str_resp - строка ответа с сервиса.

Для правильно работы требуется AGClient v1.5 .  берем отсюда .
Обязательно редактируем файл настроек агклиента config.ini. Вписываем свой ключ и сервис, и меняем настройки которые описаны ниже.
Code: [Select]
; создание отчета
file_result_enable = 1

; имя файла с отчетом
file_result = out.txt

; флаг работы только с файлом капчи, без снимков экрана
no_screen = 1

; имя файла с капчей
file_image = last_image.jpg

AGClient.exe и config.ini должен находится в папке с основным скриптом.
Также в папке со скриптом должны находится заготовки номеров картинок, берем во вложении.
Для удобства разгадывателей и ускорения работы, можно уменьшить масштаб в браузере (в пределах разумного), так как рекапча излишне велика.

На сервис отправляется картинка вот такого вида:


Собственно сам скрипт:
Code: (clickermann) [Select]
#name "reCaptcha"


SUB(numbering,$x1_rc,$y1_rc,$x2_rc,$y2_rc)   
   
   $x1_scan =int($x1_rc+((($x2_rc-$x1_rc)/5)*2))
   $x2_scan =int($x1_rc+((($x2_rc-$x1_rc)/5)*3))
   $y1_scan =int($y1_rc+((($y2_rc-$y1_rc)/7)*4))
   $y2_scan =int($y1_rc+((($y2_rc-$y1_rc)/7)*6))
   UNDEFINE ($x_pic_line)
   UNDEFINE ($y_pic_line)
   UNDEFINE ($arr_pic)
   //------------------------------------------------------------------------------
   //определение количества картинок и их координаты
   
   GETSCREEN($x1_rc,$y1_rc,$x2_rc,$y2_rc)
   
   $x_inc = 0
   $y_inc = 0
   ARRPUSH($x_pic_line,$x1_rc)
   WHILE(PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) = $y2_scan-$y1_scan+1)
      inc($x_inc)
      IF($x_inc > $x2_rc - $x1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   WHILE(PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) ! $y2_scan-$y1_scan+1)
      inc($x_inc)
      IF($x_inc > $x2_rc - $x1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   WHILE(PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) = $y2_scan-$y1_scan+1)
      inc($x_inc)
      IF($x_inc > $x2_rc - $x1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   WHILE($x2_rc > $x1_rc+$x_inc)
      ARRPUSH($x_pic_line,$x1_rc+$x_inc)
      WHILE((PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) ! $y2_scan-$y1_scan+1) & ($x2_rc > $x1_rc+$x_inc))
         inc($x_inc)
      END_CYC
      WHILE((PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) = $y2_scan-$y1_scan+1) & ($x2_rc > $x1_rc+$x_inc))
         inc($x_inc)
      END_CYC
   END_CYC
   //_________
   WHILE(PXLCOUNT($x1_scan,$y1_rc+$y_inc,$x2_scan,$y1_rc+$y_inc,16777215) = $x2_scan-$x1_scan+1)
      inc($y_inc)
      IF($y_inc > $y2_rc - $y1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   WHILE(PXLCOUNT($x1_scan,$y1_rc+$y_inc,$x2_scan,$y1_rc+$y_inc,16777215) ! $x2_scan-$x1_scan+1)
      inc($y_inc)
      IF($y_inc > $y2_rc - $y1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   WHILE(PXLCOUNT($x1_scan,$y1_rc+$y_inc,$x2_scan,$y1_rc+$y_inc,16777215) = $x2_scan-$x1_scan+1)
      inc($y_inc)
      IF($y_inc > $y2_rc - $y1_rc)
         print("капчи нет в этих координатах.")
         halt
      END_IF
   END_CYC
   
   WHILE($y2_rc > $y1_rc+$y_inc)
      ARRPUSH($y_pic_line,$y1_rc+$y_inc)
      WHILE((PXLCOUNT($x1_scan,$y1_rc+$y_inc,$x2_scan,$y1_rc+$y_inc,16777215) ! $x2_scan-$x1_scan+1) & ($y2_rc > $y1_rc+$y_inc))
         inc($y_inc)
      END_CYC
      WHILE((PXLCOUNT($x1_scan,$y1_rc+$y_inc,$x2_scan,$y1_rc+$y_inc,16777215) = $x2_scan-$x1_scan+1) & ($y2_rc > $y1_rc+$y_inc))
         inc($y_inc)
      END_CYC
   END_CYC
   
   //------------------------------------------------------------------------------
   //вывод в лог всех координат (по желанию) и закидываем их в один массив (координаты верхнего левого угла)
   
   print("---------------------------")
   print("найдено ", ARRSIZE($y_pic_line)*ARRSIZE($x_pic_line), " картинок - ", ARRSIZE($y_pic_line),"x",ARRSIZE($x_pic_line))
   //print(" ")
   // print("координаты:")
   FOR($i_y = 0,$i_y < ARRSIZE($y_pic_line))
      FOR($i_x = 0,$i_x < ARRSIZE($x_pic_line))
         //   print($x_pic_line[$i_x],":",$y_pic_line[$i_y])
         ARRPUSH ($arr_pic,$x_pic_line[$i_x])
         ARRPUSH ($arr_pic,$y_pic_line[$i_y])
      END_CYC
   END_CYC
   
   //------------------------------------------------------------------------------
   //нумерация каждой картинки
   
   $i_num = 1
   
   FOR($i_y=0,$i_y < ARRSIZE($y_pic_line))
      FOR($i_x=0,$i_x < ARRSIZE($x_pic_line))
         $str_wr = 0
         FOR($str=1,$str<12)
            $pxl_wr = 0
            FOR($pxl=1,$pxl<80,8)
               
               SWITCH($i_num)
               CASE(10)
                  $txt = "A"
               CASE(11)
                  $txt = "B"
               CASE(12)
                  $txt = "C"
               CASE(13)
                  $txt = "D"
               CASE(14)
                  $txt = "E"
               CASE(15)
                  $txt = "F"
               CASE(16)
                  $txt = "G"
               DEFAULT
                  $txt = $i_num
               END_SWITCH
               
               $col =  int(STRCUT (TFREAD ($txt, $str),$pxl, 8))
               PXLREPLACE($x_pic_line[$i_x]+$pxl_wr,$y_pic_line[$i_y]+$str_wr,$x_pic_line[$i_x]+$pxl_wr,$y_pic_line[$i_y]+$str_wr, -1, $col)
               inc($pxl_wr)
            END_CYC
            inc($str_wr)
         END_CYC
         inc($i_num)
      END_CYC
   END_CYC
   //SCREENSHOTEX($x1_rc,$y1_rc,$x2_rc,$y2_rc, "Image_", 0)
   SCREENSHOTFIX($x1_rc,$y1_rc,$x2_rc,$y2_rc, "last_image.jpg", 1)
   print("пронумеровано и сохранено в last_image.jpg")
   print(" ")
   
   //имеем массив с координатами рисунков $arr_pic
   //и готовый пронумерованный рисунок капчи в папке со скриптом
   
END_SUB



//------------------------------------------------------------------------------
//отправка на сервис распознавания.


SUB(response)
   print("отправка на сервис распознавания.")
   $hwnd = wndFind("AGClient v1.5") // находим окно
   print("AGClient hwnd: ", $hwnd)
   IF($hwnd = 0)
      print("AGClient не запущен.")
      halt
   END_IF
   
   
   TFCLEAR("out.txt")
   WAITMS(50)
   TFWRITE("out.txt", "0")
   waitms(200)
   
   PostMessage($hwnd, 0x555, 5, 0) // распознать
   waitms(200)
   $response = 0
   
   print("ожидание ответа. ждем...")
   WHILE($response = 0)
      $response = TFREAD("out.txt", 1)
      WAITMS(500)
   END_CYC
   
   IF ($response = 1)
      LOGWRITE ("Распознано. Ответ: ", TFREAD("out.txt", 2))
      WAITMS(300)
      $str_resp = TFREAD("out.txt", 2)    //строка с ответом
   END_IF
   IF ($response = 2)
      LOGWRITE ("НЕ распознано. Ошибка!")
      WAITMS(300)
      $str_resp = 0    //если не распознана, ответ = 0
   END_IF
   print(" ")
END_SUB


//------------------------------------------------------------------------------
//выбираем нужные картинки с помощью полученного с рукапчи ответа
SUB(click_pic,$str_resp)
   UNDEFINE ($arr_num)
   FOR($num_str = 1,$num_str < STRLEN ($str_resp)+1)
      SWITCH(STRCUT($str_resp,$num_str,1))
      CASE("a")
         ARRPUSH ($arr_num, 10)
      CASE("а")               //иногда присылают русские буквы :)
         ARRPUSH ($arr_num, 10)
      CASE("b")
         ARRPUSH ($arr_num, 11)
      CASE("в")
         ARRPUSH ($arr_num, 11)
      CASE("c")
         ARRPUSH ($arr_num, 12)
      CASE("с")
         ARRPUSH ($arr_num, 12)
      CASE("d")
         ARRPUSH ($arr_num, 13)
      CASE("e")
         ARRPUSH ($arr_num, 14)
      CASE("е")
         ARRPUSH ($arr_num, 14)
      CASE("f")
         ARRPUSH ($arr_num, 15)
      CASE("g")
         ARRPUSH ($arr_num, 16)
      DEFAULT
         ARRPUSH ($arr_num, STRCUT($str_resp,$num_str,1))
      END_SWITCH
   END_CYC
   
   IF($str_resp ! 0)
      print("клики по распознанным картинкам:")
      FOR($num = 0,$num<ARRSIZE($arr_num))
         print($arr_num[$num])
         
         IF($arr_num[$num] - $arr_num[$num] = 0)
            LCLICK($arr_pic[($arr_num[$num]-1)*2]+20,$arr_pic[($arr_num[$num]-1)*2+1]+20)
            //рандом и реалистичное передвижение мыши по желанию
            waitms(500)
         ELSE
            print("ошибочный ответ.")
         END_IF
      END_CYC
   END_IF
END_SUB

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//основной код



//код для теста, который описан в видео
wait(1)
LCLICK(2363,851)  //клик по "я робот"
wait(2)
numbering(2383,655,2657,1012)   //определение и нумерация капчи по координатам
waitms(500)
response()            //распознавание
waitms(500)
click_pic($str_resp)   //клики по картинкам
waitms(500)
LCLICK(2606,1030)     //клик по "подтвердить"
wait(2)
KEYPRESS(#f5)    //обновить страницу
wait(4)



Во вложении:
numbering.zip - заготовки номеров картинок.
reCaptchacms_AGClientv1.5+config_nembers.zip - скрипт, AGClient v1.5+config.ini, заготовки номеров  картинок.

bnku

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #47 on: March 11, 2017, 09:23:11 PM »
dramster, огромное человеческое спасибо за труды. работает как часы!

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #48 on: September 09, 2017, 07:58:04 PM »
Подскажите в чем может быть проблема? Пользуюсь AGClient-ом все было норм, ничего не менял настроек не трогал, при отправке капчи через кликер, так же при ручной отправке, сразу красный квадрат, ошибка отправки.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #49 on: September 09, 2017, 09:47:38 PM »
в настройках сайта твоя максимальная цена за разгадывание капчи ниже установленной на данный час.
Действительно так и было, большое спасибо за помощь.

Alexej28

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #50 on: September 14, 2017, 10:29:00 PM »
Привет всем. Я новенький и возможно задам глупый вопрос. А можно AGClient настроить на работу с CapMonster? Сам пытался, пока не получается. Прописал в настройки локалный адрес, по которому CapMonster запущен, однако реакции никакой на клиенте, пишет что отправляет и больше ничего. Пусть качество распознания не как у людей, но если большие объёмы, то получается выгодно.

Alexej28

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #51 on: September 14, 2017, 11:20:13 PM »
AGClient нужен для отправки. А CapMonster распознаёт и отдаёт результат. Соответсвенно, я собираюсь с помощью клиента скармливать монстру капчу. Может я чегото недопонимаю, но монстр сам не может брать капчу с сайтов, он настроен как я понял на приём и отдачу результата.
По прежнему прошу помочь, если такое возможно.

alizonjohn

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #52 on: September 17, 2017, 12:33:47 PM »
Здравствуйте! При запуске скрипта reCapcha.cms Windows 7 x64 выдает ошибку(скриншот прикреплен) и в файле errorlog.txt появляется строка:
17.09.2017 19:27:42 Thread _MAIN(0) raise exception

В чем может быть дело?


Распознавание "reCaptcha" с помощью Clickermann и AGClient.

Краткая демонстрация работы скрипта - видео на youtube.com
На сервисе rucaptcha.com услуга распознавания рекапчи стоит 16 копеек за одно разгадывание. Данный метод снижает стоимость до 5 копеек. За счет отправки рекапчи в виде изображения, сервис определяет ее как обычную капчу.

Во вложении:
numbering.zip - заготовки номеров картинок.
reCaptchacms_AGClientv1.5+config_nembers.zip - скрипт, AGClient v1.5+config.ini, заготовки номеров  картинок.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #53 on: September 17, 2017, 02:08:12 PM »
А Версия кликера какая?


open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #54 on: September 17, 2017, 02:13:40 PM »
В чем может быть дело?
Если версия кликера v4.13.004b, то замени все знаки неравно (!)
Code: (clickermann) [Select]
WHILE(PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) ! $y2_scan-$y1_scan+1)на новые (!=)
Code: (clickermann) [Select]
WHILE(PXLCOUNT($x1_rc+$x_inc,$y1_scan,$x1_rc+$x_inc,$y2_scan,16777215) != $y2_scan-$y1_scan+1)

alizonjohn

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #55 on: September 17, 2017, 03:53:22 PM »
Да, действительно, дело было в версии кликерманна. Версия Clickermann v4.13 x32 выдавала эту ошибку, в 4.12 все работает, спасибо!


Сластик

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #56 on: October 05, 2017, 01:36:06 AM »
Помогите мне пожалуйста разобраться, все делал по инструкции dramster в ответе #48

Запустил сайт с рекапчой, AGClient v1.5 свой ключ и сайт ввел, и при запуске скрипта reCaptcha.cms курсор уходит в правый нижний угол и останавливается и пишет что капчи нет в этих координатах.

Подскажите в чем может быть проблема, если можно помогите разобраться

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: AGClient - распознавание капчи для кликера
« Reply #57 on: October 05, 2017, 09:06:51 AM »
Помогите мне пожалуйста разобраться, все делал по инструкции dramster в ответе #48

Запустил сайт с рекапчой, AGClient v1.5 свой ключ и сайт ввел, и при запуске скрипта reCaptcha.cms курсор уходит в правый нижний угол и останавливается и пишет что капчи нет в этих координатах.

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

register

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Помогите, когда-то использовал AGClient на виртуальной машине Windows XP, всё было в порядке.

Сейчас попробовал на своем компьютере, Windows 10, тона проблем:

1: Clickermann не взаимодействует с AGC через PostMessage
Code: [Select]
GETSCREEN
      IF_PICTURE_IN (0,0, 712,$_ymax, "captcha_area.bmp", 2366701, 100)
         $hwndagc = WNDFIND("AGClient v1")
         POSTMESSAGE($hwndagc, 0x555, 1, $_return1)
POSTMESSAGE($hwndagc, 0x555, 2, $_return2)
POSTMESSAGE($hwndagc, 0x555, 3, $_return1+208)
POSTMESSAGE($hwndagc, 0x555, 4, $_return2+42)
WAITMS(50)
POSTMESSAGE($hwndagc,1365,5,0)
WAITMS(50)
      ELSE

Координаты и сам запрос не передаются.


2: WNDFIND("AGClient v1") - находит верное окно (сверял по размерам и положению). А вот WNDFIND("AGClient v1.4") уже находит непонятно что с отрицательными координатами.


3: Запускается только от администратора. Сам Clickermann просит запустить от адм. только первый раз и это так. А AGClient просит каждый раз. (одна из бета версий Clickermann тоже почему-то просит каждый раз, вернулся на стабильную - 4.12.001)


В ручном режиме AGC работает как надо, самая проблема с POSTMESSAGE, как только не пробовал, просто ноль результата.

register

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
а почему-бы вам не установить снова виртуальную Windows XP и снова получать удовольствие от работы приложения, а не искать постоянные проблемы с новейшими операционками, на которых оно не тестировалось?
Одно из приложений после обязательного обновления, с которыми я работал используя Clickermann, частично имеет серьезные ошибки в XP.


Похоже нашел частичное решение: запускать  Clickermann от имени администратора.
То есть, получается Clickermann не может отправлять команды приложению, которое имеет более высшие права (AGClient запускается только от адм.)

Попробую конечно теперь повозиться с настройками Системы, думаю чтото придумаю.

Решение: https://pikabu.ru/story/otklyuchenie_kontrolya_uchetnyikh_zapisey_dlya_konkretnogo_prilozheniya_v_win_710_5136659
« Last Edit: May 24, 2018, 05:53:12 PM by register »