Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интегрированная среда разработки ботов, Новая программа 
:(
    Опции темы
DMaster
Дата 28.10.2017, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Записал видео создания бота для Music Wars. бот создается в реальном времени с нуля.
Демонстрируется настройка параметров функции распознавания текста, так как бот во время работы сканирует и распознает количество доступных боев, энергии.
Так же распознаются силовые параметры игрока и соперников.
Видео подробно прокомментировано.
https://youtu.be/km8weD1hucY
PM MAIL   Вверх
DMaster
Дата 18.8.2018, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



В Кибор добавилось много функций для написания кода. Улучшился Визуальный редактор. Так же добавился новый инструмент, позволяющий упростить создание ботов до уровня простейшей записи в простом автокликере.
При этом не теряется возможность тонкой настройки логики и параметров как в Визуальном редакторе, так и в сгенерированном коде.
Это видео демонстрирует создание кода бота в считанные клики.
Создание блок схем в реальном времени

Это сообщение отредактировал(а) DMaster - 18.8.2018, 04:03
PM MAIL   Вверх
jabchik
Дата 10.1.2019, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.1.2019

Репутация: нет
Всего: нет



 smile  smile  smile 
PM MAIL   Вверх
DMaster
Дата 2.2.2019, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Много обновлений было.
Одно из последних..
Кибор изначально не был позиционирован на работу со своим интерфейсом, но при пополнение своего функционала возникла потребность в возможности создания различных контролов для интерактивного управления работой скриптов.
Стандартный набор при создание диалогов Кибор (для настройки параметров) стал тесен.

Появилась возможность создавать функции обработчики сообщений полученных окнами. Используется WinApi

Пример:
Код

external(INT, "CreateMenu", "CreateMenu", "User32.dll" );
external(INT, "CreatePopupMenu", "CreatePopupMenu", "User32.dll" );
external(INT, "AppendMenu", "AppendMenuA", "User32.dll" );
external(INT, "SetMenuInfo", "SetMenuInfo", "User32.dll" );
external(INT, "SetMenu", "SetMenu", "User32.dll" );
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "TrackPopupMenu", "TrackPopupMenu", "User32.dll" );


//Сожание меню
int MENUINFO[7]={28, 16, 134217728, 0, 0, 0, 0};
int HMENU, HMENU2, HMENU3;

HMENU2=CreatePopupMenu();
AppendMenu(HMENU2, 16, 1, "Новый" );
AppendMenu(HMENU2, 16, 2, "Открыть" );
AppendMenu(HMENU2, 16, 3, "Сохранить" );
AppendMenu(HMENU2, 16, 4, "Сохранить как" );

HMENU3=CreatePopupMenu();
AppendMenu(HMENU3, 16, 5, "Вырезать" );
AppendMenu(HMENU3, 16, 6, "Копировать" );

HMENU=CreateMenu();
AppendMenu(HMENU, 16, HMENU2, "Файл" );
AppendMenu(HMENU, 16, HMENU3, "Правка" );



//Создание всплывающего меню
int vHMENU, vHMENU2, result;

vHMENU=CreatePopupMenu();
AppendMenu(vHMENU, 0, 111, "MessageBox" );
AppendMenu(vHMENU, 0, 222, "Findimage" );

vHMENU2=CreatePopupMenu();
AppendMenu(vHMENU2, 0, 333, "25" );
AppendMenu(vHMENU2, 0, 444, "50" );
AppendMenu(vHMENU2, 0, 555, "75" );
AppendMenu(vHMENU2, 0, 666, "100" );
AppendMenu(vHMENU, 16, vHMENU2, "Прозрачность" );


int b1, b2;


createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);

while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");


loop()
{
w=window ("Диалог");
textout(1, w.left, w.top, " Не обновляли ", 0);
sleep(1);
}

function Простая_функция()//В ней пересчитаем на экранные координаты
{
textout(0, message.x+w.leftclient, message.y+w.topclient, " "+format(message.x)+" "+format(message.y), 1);
}

function getmessage(0, WM_MOUSEMOVE)//Отлавливаем перемещешие мыши над окном
{
Простая_функция();//Перейдем в другую функцию
}

function getmessage(0, WM_CREATE)//Создаем контролы при создание окна
{
int hwnd=gethwnd(0);
SetMenuInfo(HMENU, address(#MENUINFO[0]));
SetMenu(hwnd, HMENU);

//Создание кнопок
b1=CreateWindow(0, "BUTTON", "Первая кнопка", 1342177280, 10, 10, 120, 30, hwnd, 0, 0, 0);
b2=CreateWindow(0, "BUTTON", "Ворая кнопка", 1342177280, 10, 50, 120, 30, hwnd, 0, 0, 0);
}

function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)messagebox ("Первая кнопка");
if (message.lparam==b2)messagebox ("Ворая кнопка");

}


function getmessage(0, WM_MENUCOMMAND)//Отлавливаем клик по пункту меню
{
if (message.lparam==HMENU2)//идентификатор меню "Файл"
{
if (message.wparam==0)messagebox ("Новый");
if (message.wparam==1)messagebox ("Открыть");
if (message.wparam==2)messagebox ("Сохранить");
if (message.wparam==3)messagebox ("Сохранить как");
}

if (message.lparam==HMENU3)//идентификатор меню "Правка"
{
if (message.wparam==0)messagebox ("Вырезать");
if (message.wparam==1)messagebox ("Копировать");
}
}



function getmessage(0, WM_RBUTTONDOWN)//Отлавливаем клик правой кнопки мыши всплывающее меню
{
w=window ("Диалог" );
result=TrackPopupMenu(vHMENU, 256, message.x+w.leftclient, message.y+w.topclient, 0, formatwi(w), 0 ); // вывести меню
if(result==111)messagebox("Выбран пункт MessageBox" );
if(result==222)messagebox("Выбран пункт Findimage" );

if(result==333)transparency(25, w);
if(result==444)transparency(50, w);
if(result==555)transparency(75, w);
if(result==666)transparency(100, w);
}


function getmessage(0, WM_LBUTTONDOWN)//Отлавливаем клик левой кнопки мыши
{
beep(2500, 100);
}

function getmessage(0, 15)//WM_PAINT Отлавливаем обновление окна
{
textout(1, w.left, w.top, " Обновили окно ", 0);
sleep(100);
}



Это сообщение отредактировал(а) DMaster - 3.2.2019, 09:29
PM MAIL   Вверх
DMaster
Дата 10.5.2019, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Обновил программу.
Появился отладчик.
Возможности:
Логирование работы в реальном времени и просмотр лога при вылете программы.
Логирование значений переменных во время работы скрипта и запись в лог.
Определение строки кода при крахе Кибор.
Установка пауз между выполнением строк кода.


Скрин


Логирование работы Кибор в реальном времени
PM MAIL   Вверх
DMaster
Дата 30.5.2019, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Видео как за 10 минут и несколько строк кода решить вопрос с распознаванием многострочного текста, составления списка названий каждого из пунктов и нахождения их координат.

Сканируется это изображение и составляется список с ников и их координат.

user posted image

Видео: https://youtu.be/WbQ36STrV24
PM MAIL   Вверх
dorcasmelda
Дата 27.5.2020, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.12.2019

Репутация: нет
Всего: нет



Among other courses, cultural studies coursework writing services has become popular since students seek Cultural Studies Writing Services and cultural studies essay writing services. 
https://researchpapers247.com/cultural-stud...riting-service/
PM MAIL   Вверх
DMaster
Дата 9.6.2020, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Много разных обновлений было.

Одно из них, это парсер JSON формата:

Код
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"task":
{
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!",
"phrase":false,
"case":false,
"numeric":0,
"math":false,
"minLength":0,
"maxLength":0
}
}
*/

string Json="{^"clientKey^":^"" + "dce6bcbb1a728ea8d563de6d169a2057^"," +
"^"task^":" +
"{^"type^":^"ImageToTextTask^"," +
"^"body^":^"BASE64_BODY_HERE!^"," +
"^"phrase^":false," +
"^"case^":false," +
"^"numeric^":0," +
"^"math^":false," +
"^"minLength^":0," +
"^"maxLength^":0}}";

messagebox (Json);

parserjson(Rez_Json, Json);//Создаем объект JSON с символьным именем Rez_Json и Парсим запись JSON с Json

messagebox (Rez_Json.task.case);//Выводим значение объекта JSON



Узнать все name и value массива stats

Файл C:\json.txt
Код
{
"playerstats": {
"steamID": "76561198050187807",
"gameName": "ValveTestApp260",
"stats": [
{
"name": "total_kills",
"value": 35179
},
{
"name": "total_deaths",
"value": 30241
},
{
"name": "total_time_played",
"value": 2444377
}
]
}
}


Скрипт
Код
string исходник="";
string Tt;

if (fopen ("C:\json.txt", "r")!=0)//открываем файл для чтения "r"
{
while (freadline(Tt))исходник=исходник+Tt;
fclose();
}



parserjson(Rez_Json, исходник);

int n=0;
while (Rez_Json.playerstats.stats[n].name!="ERROR_SEARCH_JSON")
{
messagebox (Rez_Json.playerstats.stats[n].name+" = "+Rez_Json.playerstats.stats[n].value);
n++;
}


https://kibor-bot.com/forum/topic.php?forum=1&topic=140
PM MAIL   Вверх
DMaster
Дата 8.7.2020, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



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

В случае нахождения рабочего прокси выдает код страницы https://kibor-bot.com/forum  и выдает IP и порт для дальнейшего использования.

Видео работы.
https://youtu.be/DVcnJIvqYEI

Код
int pos_size_edit0[1][4];
string text_edit0[1];

pos_size_edit0[0][0]=10; pos_size_edit0[0][1]=9; pos_size_edit0[0][2]=221; pos_size_edit0[0][3]=20;
text_edit0[0]="Парсинг прокси...";

createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0]);
showdialog(0, "Поиск прокси", 200, 200, 250, 70, 1, 1);
//////////



find_proxi();

loop()sleep(10);

function find_proxi()
{
string P[100];
string R="(?<=input type=^"checkbox^" class=^"ch^" value=^")[\d]+(\.)[\d]+(\.)[\d]+(\.)[\d]+(:)[\d]+(?=^" onclick=^"SelectProxy\(this\)^")";
int pade=1;
string T;
S:;
  if (sendgetweb(#T, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0", "GET", "http:/^/foxtools.ru", "Proxy?page="+format(pade)))
  {
  text_edit0[0]="Парсинг прокси...";
  
  int k=regexsearch(100, #P[0], T, R);
    if (k==0)
    {
    messagebox ("Прокси нет");
    return;
    }
    for (int n=0; n<k; n++)
    {
    text_edit0[0]=P[n];
    
      if (sendgetweb(P[n], #T, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0", "GET", "https:/^/kibor-bot.com", "forum"))
      {
        if (T!="")
        {
          if (fopen (tempfolder()+"proxi.txt", "w")!=0)
          {//если открылся
          fwrite("Рабочий прокси "+P[n]+"^r^n"+T);
          fclose();//закрываем файл
          }
        start(tempfolder()+"proxi.txt");
        if (messageboxyn("Прокси найден.^r^nДа - Закончить поиск^r^nНет - Продолжить поиск")==1)return;        
        }
      }
    }
  }
pade++;
goto S;
}





Это сообщение отредактировал(а) DMaster - 9.7.2020, 12:23
PM MAIL   Вверх
DMaster
Дата 9.7.2020, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Дополнительно показывает страну:
использует api сайта и парсер json

Получаемый JSON:
Код
{"response":{"pageNumber":1,"pageCount":2,"items":[{"ip":"116.66.197.228","port":8080,"type":2,"anonymity":"HighKeepAlive","uptime":2.34,"checked":"2020-07-07T06:55:28","available":"Yes","free":"Yes","country":{"nameEn":"Nepal","nameRu":"Непал","iso3166a2":"NP"}},{"ip":"200.239.64.36","port":80,"type":1,"anonymity":"HighKeepAlive","uptime":0.36,"checked":"2020-07-07T06:38:42","available":"Yes","free":"Yes","country":{"nameEn":"Brazil","nameRu":"Бразилия","iso3166a2":"BR"}},
.....................................


Код
IP в Json.response.items[i].ip    
Порт в Json.response.items[i].port
Страна в Json.response.items[i].country.nameEn



Код
int pos_size_edit0[1][4];
string text_edit0[1];

pos_size_edit0[0][0]=10; pos_size_edit0[0][1]=9; pos_size_edit0[0][2]=221; pos_size_edit0[0][3]=20;
text_edit0[0]="Парсинг прокси...";

createdialog(0, EDIT, #pos_size_edit0[0][0], #text_edit0[0]);
showdialog(0, "Поиск прокси", 200, 200, 250, 70, 1, 1);
//////////


find_proxi();

//loop()sleep(10);

function find_proxi()
{
string T;
int limit=100;
int page=1;

  loop()
  {
    if (sendgetweb(#T, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0", "POST", "http:/^/api.foxtools.ru", "v2/Proxy?limit="+format(limit)+"&page="+format(page)))
    {
    //messagebox (T);
    text_edit0[0]="Парсинг прокси...";
    parserjson(Json, T);
    
      for(int i=0; i<limit; i++)
      {
      string ip = Json.response.items[i].ip;
      string port = Json.response.items[i].port;
      
        if(ip == "ERROR_SEARCH_JSON")
        {
        messagebox("Прокси не найден");
        return;
        }
     text_edit0[0]=ip+":"+port+"^t"+Json.response.items[i].country.nameEn;
      sleep(100);
      
        if (sendgetweb(ip+":"+port, #T, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0", "GET", "https:/^/kibor-bot.com", "forum"))
        {
          if (T!="")
          {
            if (fopen (tempfolder()+"proxi.txt", "w")!=0)
            {//если открылся
            fwrite("Рабочий прокси "+ip+":"+port+"^r^n"+T);
            fclose();//закрываем файл
            }
          start(tempfolder()+"proxi.txt");
          if (messageboxyn("Прокси найден.^r^nДа - Закончить поиск^r^nНет - Продолжить поиск")==1)return;
          }
        }
      
      }
    }
    else
    {
    messagebox ("Прокси не найден");
    return;
    }
  page++;
  }
}


Это сообщение отредактировал(а) DMaster - 9.7.2020, 18:16
PM MAIL   Вверх
DMaster
Дата 22.7.2020, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Демонстрация автоматизации действий в браузере на примере  Бота для Ставок на спорт для сайта betcity

Используется распознавание текста.
Видео работы бота

PM MAIL   Вверх
DMaster
Дата 30.7.2020, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Выполнение скриптов Python в Кибор

Запуск интерпретатора Python, налаживание сввязи с ним через PIPE и выполнение скриптов Python в Кибор

Необходим интерпретатор Питона. Его можно установить самому или скачать нужные файлы тут 20,9 МБ.  В архиве 2 фала. python.exe и python38.dll и папки DLLs и Lib. Их надо поместить в папку с программой Кибор.

Этот скрипт показывает выполнение отдельных команд с выводом результата. Так же само можно выполнять полный скрипт с файла, без промежуточного вывода.

Код
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "kernel32.dll");
external(INT, "ReadFile", "ReadFile", "kernel32.dll");
external(INT, "WriteFile", "WriteFile", "kernel32.dll");
external(INT, "TerminateProcess", "TerminateProcess", "kernel32.dll");
external(INT, "WaitForSingleObject", "WaitForSingleObject", "kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "kernel32.dll");

string path_python=pathfolder()+"python.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;



if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

WritePython("print(5+25)");// Выполнить в питоне "print(5+25)"
sleep(10);
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

WritePython("print(2+5)");// Выполнить в питоне "print(2+5)"
sleep(10);
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

WritePython("import webbrowser");// Выполнить в питоне "import webbrowser"
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("webbrowser.open(^'https:/^/google.com^', new=2)");// Выполнить в питоне "webbrowser.open('https://google.com', new=2)"
sleep(10);
Rez=ReadPython();// Получить ответ
messagebox (Rez);// Показать ответ

ClosePython();//Завершить работу с каналом и интерпретатором
}





function StartPython()
{
int ret;

//SECURITY_ATTRIBUTES
char sa[12];
initialarray(#sa[0], 0);
writeaddress(sizearray(sa), address(#sa[0]));
writeaddress(0, address(#sa[4]));
writeaddress(1, address(#sa[8]));

ret=CreatePipe(address(#hReadPipe1),address(#hWritePipe1),address(#sa[0]),0);
if (ret==0)return 0;
ret=CreatePipe(address(#hReadPipe2),address(#hWritePipe2),address(#sa[0]),0);
if (ret==0)return 0;

//STARTUPINFO
char si[68];
initialarray(#si[0], 0);
ZeroMemory(address(#si[0]),sizearray(si));
GetStartupInfo(address(#si[0]));
writeaddress(sizearray(si), address(#si[0]));
writeaddress(STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES, address(#si[44]));
writeaddress(SW_HIDE, address(#si[48]));
writeaddress(hReadPipe2, address(#si[56]));
writeaddress(hWritePipe1, address(#si[60]));
writeaddress(hWritePipe1, address(#si[64]));

//PROCESS_INFORMATION
initialarray(#pi[0], 0);
ret=CreateProcess(0,path_python,0,0,1,0,0,0,address(#si[0]),address(#pi[0]));
if (ret==0)return 0;

return 1;
}

function WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;
  while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
  {
  W_Ta=W_Ta+readed;
  if (W_Ta>3){if (W_buff[W_Ta-2]=='>' && W_buff[W_Ta-3]=='>' && W_buff[W_Ta-4]=='>') {W_Ta=W_Ta-4; break;}}
  if(readed!=1024) break;
  }
W_buff[W_Ta]=0;
return format(#W_buff[0]);
}

function ClosePython()
{
TerminateProcess(addressi(address(#pi[0])), 0);
WaitForSingleObject(addressi(address(#pi[0])), INFINITE );
CloseHandle(addressi(address(#pi[0])));
CloseHandle(addressi(address(#pi[4])));
CloseHandle(hReadPipe1);
CloseHandle(hWritePipe1);
CloseHandle(hReadPipe2);
CloseHandle(hWritePipe2);
}


Это сообщение отредактировал(а) DMaster - 31.7.2020, 16:06
PM MAIL   Вверх
DMaster
Дата 1.8.2020, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Пример как использовать Selenium для автоматизации действий в браузере.
Используется Python. В дальнейшем планируется его интегрировать в Кибор.
Для работы необходимо разместить в папке с Кибор файлы с этого архива. Это Python с Selenium.

Скрипт Python в Кибор. Работа с браузером через Selenium драйвер браузера

Видео работы

Скрипт запускает браузер Firefox
После запуска браузера переходит на поисковую систему Гугл
Находит по ID элемент поля ввода запроса
Вводит туда запрос "Kibor"
Нажимает Enter
В результатах поиска находит ссылку с частичным текстом kibor-bot.com
Переходит по ней на сайт https://kibor-bot.com

Код
#define STARTF_USESHOWWINDOW 1
#define STARTF_USESTDHANDLES 256
#define SW_HIDE 0
#define INFINITE -1
external(INT, "CreatePipe", "CreatePipe", "kernel32.dll");
external(VOID, "ZeroMemory", "RtlZeroMemory", "kernel32.dll");
external(VOID, "GetStartupInfo", "GetStartupInfoA", "kernel32.dll");
external(INT, "CreateProcess", "CreateProcessA", "kernel32.dll");
external(INT, "ReadFile", "ReadFile", "kernel32.dll");
external(INT, "WriteFile", "WriteFile", "kernel32.dll");
external(INT, "TerminateProcess", "TerminateProcess", "kernel32.dll");
external(INT, "WaitForSingleObject", "WaitForSingleObject", "kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "kernel32.dll");

string path_python=pathfolder()+"python.exe -i";//Можно писать полный путь к интерпретатору Python если он не в папке с Кибор
string path_browser="C:\Program Files (x86)\Mozilla Firefox\firefox.exe";//Путь к браузеру Firefox

int hReadPipe1, hWritePipe1, hReadPipe2, hWritePipe2;
char pi[16];
char W_buff[1000000];
string Rez;

/*
Скрипт Python
Работает через Selenium драйвер браузера
Скрипт запускает браузер Firefox
После запуска браузера переходит на поисковую систему Гугл
Находит по ID элемент поля ввода запроса
Вводит туда запрос "Kibor"
Нажимает Enter
В результатах поиска находит ссылку с частичным текстом kibor-bot.com
Переходит по ней на сайт [url]https://kibor-bot.com[/url]
*/

/*
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Firefox(executable_path=r'C:\Program Files (x86)\Kibor\webdriver\geckodriver.exe', firefox_binary=r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')
web.get('https://www.google.com')
time.sleep(1);
element = web.find_element_by_name('q')
element.send_keys("Kibor")
time.sleep(1);
element.send_keys(Keys.ENTER)
time.sleep(3);
web.find_element_by_partial_link_text("kibor-bot.com").click()
*/


if (StartPython())//Запустить интерпретатор python и наладить с ним связь PIPE
{
ReadPython();

WritePython("import time");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("from selenium import webdriver");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("from selenium.webdriver.common.keys import Keys");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("web = webdriver.Firefox(executable_path=r^'"+pathfolder()+"\webdriver\geckodriver.exe^', firefox_binary=r^'"+path_browser+"^')");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("web.get(^'https:/^/www.google.com^')");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(1)");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("element = web.find_element_by_name(^'q^')");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("element.send_keys(^"Kibor^")");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(1)");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("element.send_keys(Keys.ENTER)");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("time.sleep(3)");
sleep(10);
Rez=ReadPython();// Получить ответ

WritePython("web.find_element_by_partial_link_text(^"kibor-bot.com^").click()");
sleep(10);
Rez=ReadPython();// Получить ответ

ClosePython();//Завершить работу с каналом и интерпретатором
}





function StartPython()
{
int ret;

//SECURITY_ATTRIBUTES
char sa[12];
initialarray(#sa[0], 0);
writeaddress(sizearray(sa), address(#sa[0]));
writeaddress(0, address(#sa[4]));
writeaddress(1, address(#sa[8]));

ret=CreatePipe(address(#hReadPipe1),address(#hWritePipe1),address(#sa[0]),0);
if (ret==0)return 0;
ret=CreatePipe(address(#hReadPipe2),address(#hWritePipe2),address(#sa[0]),0);
if (ret==0)return 0;

//STARTUPINFO
char si[68];
initialarray(#si[0], 0);
ZeroMemory(address(#si[0]),sizearray(si));
GetStartupInfo(address(#si[0]));
writeaddress(sizearray(si), address(#si[0]));
writeaddress(STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES, address(#si[44]));
writeaddress(SW_HIDE, address(#si[48]));
writeaddress(hReadPipe2, address(#si[56]));
writeaddress(hWritePipe1, address(#si[60]));
writeaddress(hWritePipe1, address(#si[64]));

//PROCESS_INFORMATION
initialarray(#pi[0], 0);
ret=CreateProcess(0,path_python,0,0,1,0,0,0,address(#si[0]),address(#pi[0]));
if (ret==0)return 0;

return 1;
}

function WritePython(string COMMAND)
{
int lBytesWrite;
WriteFile(hWritePipe2,COMMAND+"^n", size(COMMAND+"^n"), address(#lBytesWrite), 0);
}

function ReadPython()
{
int readed;
int W_Ta=0;
while(ReadFile(hReadPipe1, address(#W_buff[W_Ta]), 1024 , address(#readed), 0)==1)
{
W_Ta=W_Ta+readed;
if (W_Ta>3){if (W_buff[W_Ta-2]=='>' && W_buff[W_Ta-3]=='>' && W_buff[W_Ta-4]=='>') {W_Ta=W_Ta-4; break;}}
if(readed!=1024) break;
}
W_buff[W_Ta]=0;
return format(#W_buff[0]);
}

function ClosePython()
{
TerminateProcess(addressi(address(#pi[0])), 0);
WaitForSingleObject(addressi(address(#pi[0])), INFINITE );
CloseHandle(addressi(address(#pi[0])));
CloseHandle(addressi(address(#pi[4])));
CloseHandle(hReadPipe1);
CloseHandle(hWritePipe1);
CloseHandle(hReadPipe2);
CloseHandle(hWritePipe2);
}

PM MAIL   Вверх
DMaster
Дата 3.8.2020, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



В Кибор появилась возможность использовать Python.

Возможно выполнение скрипта с файла, вызов функций Питона с файлов.
Так же возможно выполнение отдельных команд Питона в коде Кибор и взаимный обмен данными.
Скрипт Питона можно запускать синхронно и асинхронно с выполнением скрипта Кибор.

Описание новых функций:
Цитата
runpython()

Запускает интерпретатор Питон.
Возвращает 1 при удачном запуске
0 при неудаче.

Цитата
closepython()

Завершает работу с интерпретатором.
Возвращает 1 если завершил работу.
0 если интерпретатор не был запущен.

Цитата
wpython("print(^'yes^')");

Отправляет Питону команду print('yes') и нажимает Ентер. Не синхронная. Не ждет окончания команды.
Возвращает 1 при удаче.

Цитата
rpython()

Считывает последний ответ с Питона.
Возвращает string.
То есть если перед этим мы отправили print('yes'), то прочитаем yes
Данная функция может считать ответ только один раз. При повторных попытках считывания или если Питон не готов выдать ответ (выполняет какую то задачу) эта функция вернет ERROR_READ_PYTHON

Цитата
wrpython("print(^'yes^')");

Посылает Питону print('yes') и сразу же получает ответ. Возвращает string. В данном случае yes.. Синхронная. После отправки ждет отработки кода и получения ответа.
Синхронность работы не распространяется на вызов Питон функций.

Цитата
fpython("C:\Program Files (x86)\Kibor\script.txt")

Считывает скрипт Питона с файла и выполняет его. Ответ, если есть необходимость надо получать так же как и в случае wpython функцией rpython
В файле допускаются функции и их вызов.
Перевод срока в файле является Ентером.

Примеры запуска скриптов Питона в Кибор

PM MAIL   Вверх
DMaster
Дата 8.8.2020, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.11.2005

Репутация: нет
Всего: нет



Добавил директивы __python и __end_python
Они позволяют указывать блоки скриптов Питон в редакторе Кибор.
Скрипты Питона и Кибор можно выполнять одновременно обмениваясь данными.

Пример использования функции Питон в Кибор
Код
if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}
load_fen_python();//Загружаем все функции Питона

sleep(100);

//Вызываем когда понадобится с параметрами
messagebox (sendgetpython("similarity('мыло', 'мало')"));//0.75

closepython();

er:;


//Загружаем все функции Питона
function load_fen_python()
{
__python
import difflib

def similarity(s1, s2):
(отступ) normalized1 = s1.lower()
(отступ) normalized2 = s2.lower()
(отступ) matcher = difflib.SequenceMatcher(None, normalized1, normalized2)
(отступ) return matcher.ratio()

__end_python
}


------------------------

Сделал возможность в Кибор собрать единый запускной EXE который будет выполнять скрипт Кибор и Питона на компьютере где Питон не установлен.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.1756 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.