Если у вас есть капча, без слипшихся символов, то предлагаю вот такой полезный скрипт. Можно использовать не только для капчи, но мне нужно было только для этого. За основу взяты скрипты Винта и Dramstera. Конкретно по настройке - меняете границы капчи(13-16 строки), указываем число символов(строка 267). папка скрин не должна быть пуста! Хотя бы одна картинка должна быть, иначе ничего сохраняться не будет.
Алгоритм:
1. ищем границы всех символов
2. проверяем есть ли у нас совпадение 100% с нарезанными шаблонами. если нашли ищем следующий символ. Иначе - потихоньку опускаем % до 95. если в 95-99% находим, то скрипт уточнит - верно угадал или нет, а далее при успехе -сохраняем. если не находим в шаблонах, то сохряаняем, вводя в строку ввода символ. в папке все сораняется в таком ввиде - например, сохраняем 9 - 9_0000. бмп.
Этот способ работает, если символы отклоняются от оси на какой-то %. если есть рандомное искажение, то шаблонизация не подходит - шаблонов не напасешься). во вложении скрипт на 1500 шаблонов, которые срабатывают через раз.. ну зато у меня есть база для обучения кликера
$pref = "screens\"
$cmd = STRCONCAT($pref,"cmd.bat")
$dir = STRCONCAT($pref,"dir.txt")
TFWRITE($cmd, "chcp 1251>nul")
TFWRITE($cmd, STRCONCAT("cd ", $pref))
TFWRITE($cmd, "dir *.bmp /b /on >dir.txt")
TFWRITE($cmd, "del /F /S cmd.bat")
EXECUTE($cmd)
WAIT(2)
$x1_fr= 615
$y1_fr= 327
$x2_fr=699
$y2_fr=350
UNDEFINE($num_line_start)
UNDEFINE($num_line_end)
UNDEFINE($num_real)
UNDEFINE($num_y1)
GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
COLORMODE(8,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, 0)
IF(ARRSIZE ($cap_arr) = 0)
print("капчи в этом поле нету")
halt
END_IF
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
FOR($x=$x1_fr,$x<$x2_fr)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
$x1_cap= $x
$y=$y2_cap+1
$x=$x2_fr
END_IF
END_CYC
END_CYC
FOR($x=$x2_fr,$x>$x1_fr,-1)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
$x2_cap= $x
$y=$y2_cap+1
$x=$x1_fr
END_IF
END_CYC
END_CYC
//=======================================
ARRPUSH ($num_line_start, $x1_cap)
FOR($x=$x1_cap,$x<$x2_cap)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
IF((pxl($x+1,$y) = 0)|(pxl($x+1,$y-1) = 0)|(pxl($x+1,$y+1) = 0))
$y=999999
END_IF
END_IF
END_CYC
IF($y=$y2_cap+1)
ARRPUSH ($num_line_end, $x)
FOR($x_check=$x+1,$x_check<$x2_cap)
FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
IF(pxl($x_check,$y_check) = 0)
$x= $x_check
ARRPUSH ($num_line_start, $x)
$y_check=$y2_cap+1
$x_check=$x2_cap
END_IF
END_CYC
END_CYC
END_IF
END_CYC
ARRPUSH ($num_line_end, $x2_cap)
//=============================================
$y2_cap = $mm+$y2_cap
FOR($num=0, $num<arrsize($num_line_start))
FOR ($y=$y2_cap, $y>$y1_cap, -1)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = 0)
ARRPUSH($num_y2,$y)
$y=0
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=$y1_cap,$y<$y2_cap)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = 0)
ARRPUSH($num_y1,$y)
$y=99999
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
print("найдено цифр в поле ",arrsize($num_line_start))
if (arrsize($num_line_start)=6)
FOR($a=0,$a<arrsize($num_line_start))
FOR($i=0, $i < TFCOUNT($dir))
$name = TFREAD($dir, $i+1)
IF_PICTURE_IN($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], STRCONCAT($pref,$name))
print("нашли", STRCUT($name, 1, 1))
$i = 99999999 //
else
if ($i+1=TFCOUNT($dir))
FOR($p=99, $p>94, -1)
FOR($i2=0, $i2 < TFCOUNT($dir))
$name = TFREAD($dir, $i2+1)
IF_PICTURE_IN($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], STRCONCAT($pref,$name),-1, $p)
$dialog = DIALOGBOX(strconcat("цифра№", $a+1," /// ",STRCUT($name, 1, 1),"- Верно?"), 4, 2)
if ($dialog=6)
print("нашли", STRCUT($name, 1, 1))
SCREENSHOTEX($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], strconcat(STRCUT($name, 1, 1),"_"), 0)
$i2 = 99999999
$p=0
end_if
else
if (($p=95)&($i2+1=TFCOUNT($dir)))
$text=INPUTBOX(strconcat("ввод цифры ", $a+1), "999999", 100)
SCREENSHOTEX($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], strconcat($text,"_"), 0)
end_if
END_IF
END_CYC
END_CYC
END_IF
END_IF
END_CYC
END_CYC
end_if
LCLICK(314,660) // переключаемся на окно бразера для обновления
KEYPRESS(#F5)
WAIT(2)
$pref = "screens\"
$cmd = STRCONCAT($pref,"cmd.bat")
$dir = STRCONCAT($pref,"dir.txt")
TFWRITE($cmd, "chcp 1251>nul")
TFWRITE($cmd, STRCONCAT("cd ", $pref))
TFWRITE($cmd, "dir *.bmp /b /on >dir.txt")
TFWRITE($cmd, "del /F /S cmd.bat")
EXECUTE($cmd)
WAIT(2)
$x1_fr= 615
$y1_fr= 327
$x2_fr=699
$y2_fr=350
UNDEFINE($num_line_start)
UNDEFINE($num_line_end)
UNDEFINE($num_real)
UNDEFINE($num_y1)
GETSCREEN($x1_fr,$y1_fr,$x2_fr,$y2_fr)
COLORMODE(8,$x1_fr,$y1_fr,$x2_fr,$y2_fr)
scanpxl($cap_arr,$x1_fr,$y1_fr,$x2_fr,$y2_fr, 0)
IF(ARRSIZE ($cap_arr) = 0)
print("капчи в этом поле нету")
halt
END_IF
$y1_cap=$cap_arr[1]
$y2_cap=ARRPOP($cap_arr)
FOR($x=$x1_fr,$x<$x2_fr)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
$x1_cap= $x
$y=$y2_cap+1
$x=$x2_fr
END_IF
END_CYC
END_CYC
FOR($x=$x2_fr,$x>$x1_fr,-1)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
$x2_cap= $x
$y=$y2_cap+1
$x=$x1_fr
END_IF
END_CYC
END_CYC
//=======================================
ARRPUSH ($num_line_start, $x1_cap)
FOR($x=$x1_cap,$x<$x2_cap)
FOR($y=$y1_cap,$y<$y2_cap+1)
IF(pxl($x,$y) = 0)
IF((pxl($x+1,$y) = 0)|(pxl($x+1,$y-1) = 0)|(pxl($x+1,$y+1) = 0))
$y=999999
END_IF
END_IF
END_CYC
IF($y=$y2_cap+1)
ARRPUSH ($num_line_end, $x)
FOR($x_check=$x+1,$x_check<$x2_cap)
FOR($y_check=$y1_cap,$y_check<$y2_cap+1)
IF(pxl($x_check,$y_check) = 0)
$x= $x_check
ARRPUSH ($num_line_start, $x)
$y_check=$y2_cap+1
$x_check=$x2_cap
END_IF
END_CYC
END_CYC
END_IF
END_CYC
ARRPUSH ($num_line_end, $x2_cap)
//=============================================
$y2_cap = $mm+$y2_cap
FOR($num=0, $num<arrsize($num_line_start))
FOR ($y=$y2_cap, $y>$y1_cap, -1)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = 0)
ARRPUSH($num_y2,$y)
$y=0
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
FOR($num=0,$num<arrsize($num_line_start))
FOR($y=$y1_cap,$y<$y2_cap)
FOR($x=$num_line_start[$num],$x<$num_line_end[$num]+1)
IF(pxl($x,$y) = 0)
ARRPUSH($num_y1,$y)
$y=99999
$x=$num_line_end[$num]+1
END_IF
END_CYC
END_CYC
END_CYC
print("найдено цифр в поле ",arrsize($num_line_start))
if (arrsize($num_line_start)=6)
FOR($a=0,$a<arrsize($num_line_start))
FOR($i=0, $i < TFCOUNT($dir))
$name = TFREAD($dir, $i+1)
IF_PICTURE_IN($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], STRCONCAT($pref,$name))
print("нашли", STRCUT($name, 1, 1))
$i = 99999999 //
else
if ($i+1=TFCOUNT($dir))
FOR($p=99, $p>94, -1)
FOR($i2=0, $i2 < TFCOUNT($dir))
$name = TFREAD($dir, $i2+1)
IF_PICTURE_IN($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], STRCONCAT($pref,$name),-1, $p)
$dialog = DIALOGBOX(strconcat("цифра№", $a+1," /// ",STRCUT($name, 1, 1),"- Верно?"), 4, 2)
if ($dialog=6)
print("нашли", STRCUT($name, 1, 1))
SCREENSHOTEX($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], strconcat(STRCUT($name, 1, 1),"_"), 0)
$i2 = 99999999
$p=0
end_if
else
if (($p=95)&($i2+1=TFCOUNT($dir)))
$text=INPUTBOX(strconcat("ввод цифры ", $a+1), "999999", 100)
SCREENSHOTEX($num_line_start[$a],$num_y1[$a],$num_line_end[$a],$num_y2[$a], strconcat($text,"_"), 0)
end_if
END_IF
END_CYC
END_CYC
END_IF
END_IF
END_CYC
END_CYC
end_if
LCLICK(314,660) // переключаемся на окно бразера для обновления
KEYPRESS(#F5)
WAIT(2)
для теста
http://wekings.ru/simple_captcha/simple_captcha?distortion=&image_style=simply_red&time=1457034295