Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Пример распознавания текста и работа в фоновом режиме.
Kibor
Отправлено: 24 Октября, 2017 - 17:38:18
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8091
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Скрипт бота для серфинга. Разгадывание простой капчи, работа в фоновом режиме. Структура программы.
Базу распознавания скачать с Функция распознавания текста
Изображения сделать как показано на видео.
При необходимости поменять координаты на свои. Тестировалось в мозилле.

Видео с пояснениями и демонстрация работы.


CODE:
win w;//Указатель на окно

int x1_counter=194, y1_counter=129, x2_counter=240, y2_counter=158;//координаты счетчика
int x1_captcha=197, y1_captcha=137, x2_captcha=254, y2_captcha=163;//координаты капчи

int x1_select[4], y1_select[4], x2_select[4], y2_select[4];//координаты кнопок с выбором ответа
x1_select[0]=284; y1_select[0]=135; x2_select[0]=316; y2_select[0]=163;
x1_select[1]=338; y1_select[1]=136; x2_select[1]=372; y2_select[1]=163;
x1_select[2]=394; y1_select[2]=136; x2_select[2]=426; y2_select[2]=164;
x1_select[3]=449; y1_select[3]=136; x2_select[3]=482; y2_select[3]=164;

string text_counter;//Сюда запишем текст счетчика

char text_captcha[4];//Сюда запишем разгаданную капча

char text_select[4][4];//В эти переменные запишем координаты кнопок с ответами
int kn[4];//в эти переменные запишем количество соспавших символов для каждого ответа

//сюда загрузим изображения
int s1[50][50];
int s2[50][50];
int s3[50][50];

int xe, ye;//переменные для записи в них координат положения мыши для получения указателя окна под этими координатами

int x[20], y[20];//Координаты ссылок
int k, i;//В k будет количество ссылок найденных. С помощью i будем перебирать цикл

//Загружаем изображения
if (load_image()==-1){messagebox ("error load_image"); goto error;}

//Загружаем базу распознавания текста
if (loadsymbolbase ("C:\surfing\basetext.sib")<1){messagebox ("error loadsymbolbase"); goto error;}

//Узнаем координаты мыши и указатель на окно под этими координатами
pause(1000);
getmouse(xe, ye);
w=getwindow(1, xe, ye);

//Скрываем окно браузера с экрана
transparency (-1, w);
pause(1000);

//Сканируем браузер на наличие ссылок и записываем их координаты в массив x y, а количество в k
scan_ssil();

//перебираем все ссылки
for (i=0; i<k; i++)
{
//сбрасываем все надписи
resettextout(1);
textbkcolor (65535,0);

//Кликаем по ссылке
sendmouse(LEFT, x[i]+75, y[i]-8, w);
pause(3000);

//Сканируем счетчик и ждем пока он не станет 0
if (read_counter()==-1)goto dal;//если прошло более минуты пропускаем все, закрываем вкладку.

pause(1500);

//Сканируем капчу и распознаем
read_captcha();

//Сканируем и распознаем текст на кнопках с ответами
read_reply();

//Сравниваем разгаданную капчу с ответами на кноапках посимвольно
select_reply();


pause(2000);
dal:;
//Жмем control+w закрываем вкладку
keydown(17, 0, 0, w);
sendkey(87, w);
keyup(17, 0, 0, w);
pause(2000);
}




error:;






function select_reply()
{
int n, n1;
for (n=0; n<4; n++)
{
kn[n]=0;
for (n1=0; n1<3; n1++)
{
if (text_captcha[n1]==text_select[n][n1])kn[n]++;
}
if (kn[n]==3){vibor(n); return;}//Если совпало все 3 символа кликаем по кнопке и идем дальше
}

//////////

for (n=0; n<4; n++)
{
if (kn[n]==2){vibor(n); return;}//Если совпало 2 символа кликаем по кнопке и идем дальше
}

/////////////////

for (n=0; n<4; n++)
{
if (kn[n]==1){vibor(n); return;}//Если совпал 1 символ кликаем по кнопке и идем дальше
}

}



function read_reply()
{
for (int n=0; n<4; n++)
{
readtext(NUM, #text_select[n][0], 8, 1, -1, -1, -1, -1, -1, 0, 50, x1_select[n], y1_select[n], x2_select[n], y2_select[n], w);
textout(n, x1_select[n], y1_select[n]-30, format(#text_select[n][0]), 1);
}
}

function read_captcha()
{
readtext(NUM, #text_captcha[0], 8, 1, -1, -1, -1, -1, -1, 0, 50, x1_captcha, y1_captcha, x2_captcha, y2_captcha, w);
visualwindow(0, x1_captcha, y1_captcha, x2_captcha, y2_captcha+25, x1_captcha, y1_captcha+25 , 100, w);
textout(5, x1_captcha, y1_captcha-30, format(#text_captcha[0]), 1);
}


function read_counter()
{
for (int tim=gettime(); gettime()-tim<61000; sleep(10))
{
readtext(NUM, #text_counter, 8, 1, -1, -1, -1, -1, -1, 0, 50, x1_counter, y1_counter, x2_counter, y2_counter, w);
if (text_counter=="0")return 1;
visualwindow(0, x1_counter, y1_counter, x2_counter, y2_counter, x1_counter, y1_counter+25, 100, w);
textout(5, x1_counter, y1_counter-30, text_counter, 1);
}
return -1;
}

function scan_ssil()
{
k=findimage(20, #s1[0][0], 0, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, w);
k=k+findimage(20, #s2[0][0], 0, #x[k], #y[k], 0, 0, w.widthclient, w.heightclient, w);
k=k+findimage(20, #s3[0][0], 0, #x[k], #y[k], 0, 0, w.widthclient, w.heightclient, w);
}


function vibor(int p)
{
textout(6, x1_select[p], y1_select[p]+25, format(#text_select[p][0]), 1);
pause(1000);
sendmouse(LEFT, x1_select[p]+5, y1_select[p]+5, w);
}


function load_image()
{
if (loadimage (#s1[0][0], "C:\surfing\s1.bmp")<1)return -1;
if (loadimage (#s2[0][0], "C:\surfing\s2.bmp")<1)return -1;
if (loadimage (#s3[0][0], "C:\surfing\s3.bmp")<1)return -1;
return 1;
}


Несколько моментов:
Сканирование трех разных изображений и сохранение их координат в один массив
CODE:
function scan_ssil()
{
k=findimage(20, #s1[0][0], 0, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, w);
k=k+findimage(20, #s2[0][0], 0, #x[k], #y[k], 0, 0, w.widthclient, w.heightclient, w);
k=k+findimage(20, #s3[0][0], 0, #x[k], #y[k], 0, 0, w.widthclient, w.heightclient, w);
}

При поиске следующего изображения мы даем указатель не на начало массивов x y, а на индекс k, то есть на место до которого записаны координаты прошлых изображений. Таким образом мы получаем один массив на разные изображения которые мы нашли.

Распознавание текста и использование двухмерного массива char для построчного заполнения его распознанным текстом с разных областей
CODE:
char text_select[4][4];
function read_reply()
{
for (int n=0; n<4; n++)
{
readtext(NUM, #text_select[n][0], 8, 1, -1, -1, -1, -1, -1, 0, 50, x1_select[n], y1_select[n], x2_select[n], y2_select[n], w);
textout(n, x1_select[n], y1_select[n]-30, format(#text_select[n][0]), 1);
}
}

С помощью переменной n мы указываем новую строку массива text_select
text_select[0][0] первая строка
text_select[1][0] вторя строка
и так далее
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Готовые скрипты »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by