Zireael |
Отправлено: 21 Марта, 2018 - 02:32:24
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Пример решения такой капчи http://sandev.pro/pinbot/
Скрипт распознаёт 4 цифры и нажимает на соответствующее изображение этой цифры. При этом есть 3 вида картинок с цифрами: арабские, римские и домино.
В архиве (https://drive.google.com/open?id...wfi-sVFkyrd_Tl03) папка с нужными картинками (закинуть на диск C:\) и видео работы скрипта. Если картинки не находятся, то сделать свои.
code (Отобразить)CODE:int Image[27][30][30]; // массив для картинок цифр
int Image_PIN[77][26]; // картинка PIN
string path="C:\Цифры"; // путь к картинкам
load_image(); // загрузка картинок
// диалог
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
pos_size_button0[0][0]=19; pos_size_button0[0][1]=16; pos_size_button0[0][2]=150; pos_size_button0[0][3]=40;
text_button0[0]="Решить капчу";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
int color, x, y;
getdisplay(color, x, y);
int PosX, PosY; // позиция картинки с нужной цифрой
int PosXPIN, PosYPIN; // позиция PIN
char c[4]; // массив для цифр
loadsymbolbase (path+"\basetext.sib");
int r=10; // разбежность в цвете PIN
showdialog(0, "Диалог", x/4, y/4, 196, 99, 1, 1);
loop()
{
while(flag_button0[0]==0)sleep(100); // пока не нажата кнопка 'Решить капчу'
flag_button0[0]=0;
if(findimage(1, #Image_PIN[0][0], 16777215, #PosXPIN, #PosYPIN, 0, 0, x, y, r,r,r,r,r,r,90,1,-1) > 0) // ищем PIN
{
readtext (NUM, #c[0], 8, 1, -1, -1, -1, -1, -1, 0, -1, PosXPIN+90, PosYPIN, PosXPIN+200, PosYPIN+40, -1); // разпознаём числа
if(size(format(#c[0]))==4) // если найдено 4 цифры
{
textbkcolor(255, 16700000);
textout(0, PosXPIN+300, PosYPIN, format(#c[0]), 1);
for(int j=0; j<4;j++) // цикл для 4 цифр
{
for(int i=(formatsn(c[j]) + -1)*3; i<(formatsn(c[j]) + -1)*3+3;i++) // ищем нужную картинку цифры
{
textbkcolor(16777215, 255);
textout(1, PosXPIN+300, PosYPIN+20, format(#c[j], 1), 1);
if(findimage(1, #Image[i][0][0], 0, #PosX, #PosY, 0, 0, x, y, -1) > 0) // если найдена
{
mouse(LEFT, PosX, PosY); sleep(100); // клик по картинке
goto br;
}
}
br:;
mouse(LEFT, PosXPIN, PosYPIN); sleep(100); // убираем курсор в сторону
if(j<3)dinamic(PosXPIN-120, PosYPIN-40, PosXPIN, PosYPIN+60); // ждём пока не обновятся изображения цифры
}
}
else
{
messagebox("Цифры не найдены или не распознаны.");
}
}
else
{
messagebox("PIN не найдена");
}
resettextout(1);
}
function dinamic(int startX, int startY, int endX, int endY) // функция ждёт обновления изображений цифр,
{
int posX, posY;
int a[200][200];
loop()
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
goto br:;
}
}
sleep(100);
}
br:;
}
function load_image()
{
loadimage (#Image_PIN[0][0], path+"\Image_PIN.bmp");
for(int i=0;i<9;i++)
{
loadimage (#Image[i*3][0][0], path+"\"+format(i+1)+".bmp");
loadimage (#Image[i*3+1][0][0], path+"\"+format(i+1)+format(i+1)+".bmp");
loadimage (#Image[i*3+2][0][0], path+"\"+format(i+1)+format(i+1)+format(i+1)+".bmp");
}
}
P. S. Неплохо бы научить loadimage и findimage понимать 4-х мерные массивы. Потому что 9 цифр, для каждой по 3 картинки, т. е. нужен: array[9][3][30][30], чтобы было удобнее обращаться к нужному элементу и не лепить кашу из 3х мерного массива. |
|
|
Zireael |
Отправлено: 31 Декабря, 2018 - 15:17:45
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Подправил скрипт, имя переменной break совпадало с функцией break, которой раньше не было.
code (Отобразить)CODE:int Image[27][30][30]; // массив для картинок цифр
int Image_PIN[77][26]; // картинка PIN
string path="C:\Цифры"; // путь к картинкам
load_image(); // загрузка картинок
// диалог
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
pos_size_button0[0][0]=19; pos_size_button0[0][1]=16; pos_size_button0[0][2]=150; pos_size_button0[0][3]=40;
text_button0[0]="Решить капчу";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
int color, x, y;
getdisplay(color, x, y);
int PosX, PosY; // позиция картинки с нужной цифрой
int PosXPIN, PosYPIN; // позиция PIN
char c[4]; // массив для цифр
loadsymbolbase (path+"\basetext.sib");
int r=10; // разбежность в цвете PIN
showdialog(0, "Диалог", x/4, y/4, 196, 99, 1, 1);
loop()
{
while(flag_button0[0]==0)sleep(100); // пока не нажата кнопка 'Решить капчу'
flag_button0[0]=0;
if(findimage(1, #Image_PIN[0][0], 16777215, #PosXPIN, #PosYPIN, 0, 0, x, y, r,r,r,r,r,r,90,1,-1) > 0) // ищем PIN
{
readtext (NUM, #c[0], 8, 1, -1, -1, -1, -1, -1, 0, -1, PosXPIN+90, PosYPIN, PosXPIN+200, PosYPIN+40, -1); // разпознаём числа
if(size(format(#c[0]))==4) // если найдено 4 цифры
{
textbkcolor(255, 16700000);
textout(0, PosXPIN+300, PosYPIN, format(#c[0]), 1);
for(int j=0; j<4;j++) // цикл для 4 цифр
{
for(int i=(formatsn(c[j]) + -1)*3; i<(formatsn(c[j]) + -1)*3+3;i++) // ищем нужную картинку цифры
{
textbkcolor(16777215, 255);
textout(1, PosXPIN+300, PosYPIN+20, format(#c[j], 1), 1);
if(findimage(1, #Image[i][0][0], 0, #PosX, #PosY, 0, 0, x, y, -1) > 0) // если найдена
{
mouse(LEFT, PosX, PosY); sleep(100); // клик по картинке
goto break_;
}
}
break_:;
mouse(LEFT, PosXPIN, PosYPIN); sleep(100); // убираем курсор в сторону
if(j<3)dinamic(PosXPIN-120, PosYPIN-40, PosXPIN, PosYPIN+60); // ждём пока не обновятся изображения цифры
}
}
else
{
messagebox("Цифры не найдены или не распознаны.");
}
}
else
{
messagebox("PIN не найдена");
}
resettextout(1);
}
function dinamic(int startX, int startY, int endX, int endY) // функция ждёт обновления изображений цифр,
{
int posX, posY;
int a[200][200];
loop()
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
goto break_:;
}
}
sleep(100);
}
break_:;
}
function load_image()
{
loadimage (#Image_PIN[0][0], path+"\Image_PIN.bmp");
for(int i=0;i<9;i++)
{
loadimage (#Image[i*3][0][0], path+"\"+format(i+1)+".bmp");
loadimage (#Image[i*3+1][0][0], path+"\"+format(i+1)+format(i+1)+".bmp");
loadimage (#Image[i*3+2][0][0], path+"\"+format(i+1)+format(i+1)+format(i+1)+".bmp");
}
} |
|
|
Zireael |
Отправлено: 06 Февраля, 2021 - 02:06:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Подправил скрипт. Т. к. была изменена функция format.
code (Отобразить)CODE:int Image[27][30][30]; // массив для картинок цифр
int Image_PIN[77][26]; // картинка PIN
string path="C:\Цифры"; // путь к картинкам
load_image(); // загрузка картинок
// диалог
int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
pos_size_button0[0][0]=19; pos_size_button0[0][1]=16; pos_size_button0[0][2]=150; pos_size_button0[0][3]=40;
text_button0[0]="Решить капчу";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
int color, x, y;
getdisplay(color, x, y);
int PosX, PosY; // позиция картинки с нужной цифрой
int PosXPIN, PosYPIN; // позиция PIN
char c[99]; // массив для цифр
loadsymbolbase (path+"\basetext.sib");
int r=10; // разбежность в цвете PIN
showdialog(0, "Диалог", x/4, y/4, 196, 99, 1, 1);
loop()
{
while(flag_button0[0]==0)sleep(100); // пока не нажата кнопка 'Решить капчу'
flag_button0[0]=0;
if(findimage(1, #Image_PIN[0][0], 16777215, #PosXPIN, #PosYPIN, 0, 0, x, y, r,r,r,r,r,r,90,1,-1) > 0) // ищем PIN
{
int count = readtext (NUM, #c[0], 8, 1, -1, -1, -1, -1, -1, 0, -1, PosXPIN+90, PosYPIN, PosXPIN+200, PosYPIN+40, -1); // разпознаём числа
if(count==4) // если найдено 4 цифры
{
textbkcolor(255, 16700000);
textout(0, PosXPIN+300, PosYPIN, format(#c[0]), 1);
for(int j=0; j<4;j++) // цикл для 4 цифр
{
for(int i=(formatsn(c[j]) + -1)*3; i<(formatsn(c[j]) + -1)*3+3;i++) // ищем нужную картинку цифры
{
textbkcolor(16777215, 255);
textout(1, PosXPIN+300, PosYPIN+20, format(#c[j], 1), 1);
if(findimage(1, #Image[i][0][0], 0, #PosX, #PosY, 0, 0, x, y, -1) > 0) // если найдена
{
mouse(LEFT, PosX, PosY); sleep(100); // клик по картинке
goto break_;
}
}
break_:;
mouse(LEFT, PosXPIN, PosYPIN); sleep(100); // убираем курсор в сторону
if(j<3)dinamic(PosXPIN-120, PosYPIN-40, PosXPIN, PosYPIN+60); // ждём пока не обновятся изображения цифры
}
}
else
{
messagebox("Цифры не найдены или не распознаны.");
}
}
else
{
messagebox("PIN не найдена");
}
resettextout(1);
}
function dinamic(int startX, int startY, int endX, int endY) // функция ждёт обновления изображений цифр,
{
int posX, posY;
int a[200][200];
loop()
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
screen (#a[0][0], startX, startY, endX, endY, -1);
sleep(200);
if(findimage(1, #a[0][0], 16777215, #posX, #posY, 0, 0, x, y, -1) > 0)
{
goto break_:;
}
}
sleep(100);
}
break_:;
}
function load_image()
{
loadimage (#Image_PIN[0][0], path+"\Image_PIN.bmp");
for(int i=0;i<9;i++)
{
loadimage (#Image[i*3][0][0], path+"\"+format(i+1)+".bmp");
loadimage (#Image[i*3+1][0][0], path+"\"+format(i+1)+format(i+1)+".bmp");
loadimage (#Image[i*3+2][0][0], path+"\"+format(i+1)+format(i+1)+format(i+1)+".bmp");
}
} |
|
|
|