Войти
ФлеймФорумПрограммирование

Автоматизация действий на компьютере. Скриптовый язык., (8 стр)

Страницы: 13 4 5 6 7 8
#105
(Правка: 19:35) 19:30, 31 июля 2020

Пример как использовать 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
Переходит по ней на сайт https://kibor-bot.com
*/

/*
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);
}

#106
(Правка: 12:56) 12:55, 3 авг. 2020

В Кибор появилась возможность использовать 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
В файле допускаются функции и их вызов.
Перевод срока в файле является Ентером.

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

#107
(Правка: 21:20) 16:48, 8 авг. 2020

Добавил директивы __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 который будет выполнять скрипт Кибор и Питона на компьютере где Питон не установлен.

#108
(Правка: 22:01) 7:33, 9 авг. 2020

Скрипт автоматизация в браузере с помощью Кибор Python и Selenium
Скрипт запускает браузер, в Гугле вводит поисковый запрос и ищет нужный сайт и переходит на него.
Показано как совмещать Python скрипт с скриптом Кибор

Видео работы

Изображение
string find="Распознать текст OCR";//Запрос
string path_webdriver=pathfolder()+"python\webdriver\geckodriver.exe"; // Путь к webdriver. C:\Program Files (x86)\Kibor\python\webdriver\geckodriver.exe
string path_browser="C:\Program Files (x86)\Mozilla Firefox\Firefox.exe"; // Путь к браузеру Мозила

if (runpython()==0){messagebox ("Не удалось запустить Python"); goto er;}//Запускаем интерпретатор Python

//Подготовка
import();

//Запуск браузера и переход на https://www.google.com
start_browser();

//Находим на поисковой странице Гугла поле для ввода в поиск и вводим туда запрос
find_google();

//Искать на странице открывшегося поиска ссылку которая ведет на kibor-bot.com и кликнуть по ней
F: if (find_site("kibor-bot.com")==0)//Если этой станице ссылки на kibor-bot.com нет
{//Надо перейти на следующую станицу поиска
if (find_site("Следующая")==0) goto exits;//Если на этой странице нет кнопки Следующая завершить программу
pause(5000);//Если кликнули по кнопке Следующая пауза 5 секунд и повторяем поиск ссылки на kibor-bot.com
goto F;
}

exits:;
closepython();//Завершаем работу с интерпретатором
er:;


function find_site(string find_link)//Искать на странице открывшегося поиска ссылку которая ведет на указанный линк
{
string rez;
sendpython("web.find_element_by_partial_link_text(^'"+find_link+"^').click()");//Отправляем Питону команду найти ссылку содержащую kibor-bot.com и по ней кликнуть
sendpython("print(^'yes^')");//Сразу же не ожидая окончания первой команды Отправить print('yes')

loop()//Замкнутый цикл в котором ждем ответ
{
rez=getpython();//Пытаемся считать ответ Если ссылка не была найдена, то в ответе кроме yes будет еще описание ошибки.
if (rez!="ERROR_READ_PYTHON")//Если Питон нам что то ответил..
{
//messagebox (rez+);//Посмотреть что приходит когда нашли ссыку и когда не нашли
if (rez=="yes")return 1;//Если в ответе только слово yes, значит мы нашли ссылку и описания ошибки нет.
return 0;//Иначе в ответе не только слово yes. Значит мы не нашли ссылку
}
}
}

function find_google()//Находим на поисковой странице Гугла поле для ввода в поиск и вводим туда значение переменной find
{
//Вначале инициализируем переменную finds в Pythen нашей переменной find синхронной функцией
sendgetpython("finds=^'"+find+"^'"); // finds=find
__python
element = web.find_element_by_name('q')
element.send_keys(finds)
time.sleep(1);
element.send_keys(Keys.ENTER)
time.sleep(3);
print('yes')
__end_python
while (getpython()!="yes")sleep(100);// Ждем в цикле ответ "yes". Оно будет когжа скрипт Pythen отработает
}

function start_browser()//Запуск браузера
{
//Вначале инициализируем переменные в Pythen нашими значениями синхронными функциями.
sendgetpython("p_web=^'"+path_webdriver+"^'");// p_web=path_webdriver
sendgetpython("p_br=^'"+path_browser+"^'"); // p_br=path_browser
__python
web = webdriver.Firefox(executable_path=p_web, firefox_binary=p_br) # Тут мы используе переменные p_web и p_br
web.get('https://www.google.com')
time.sleep(1);
print('yes')
__end_python
while (getpython()!="yes")sleep(100);// Ждем в цикле ответ "yes". Оно будет когжа скрипт Pythen отработает
}


function import()//Подготовка
{
__python
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
print('yes')
__end_python
while (getpython()!="yes")sleep(100);// Ждем в цикле ответ "yes". Оно будет когжа скрипт Pythen отработает
}
#109
(Правка: 23:20) 20:47, 11 авг. 2020

Добавил настройку цвета синтаксиса.
Настраиваются все элементы, простые и выделенные по отдельности.
Изображение

#110
14:54, 13 авг. 2020

Доработал настройки.
Можно устанавливать отдельно цвет панели с деревом объектов и цвет текста в ней.
Устранил излишнюю контрастность, но при этом нужные элементы остаются читабельными при любых настройках.

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

#111
18:36, 10 сен. 2020

Парсер скрытой информации с сайтов на примере получения номеров телефонов с avito.ru и сохранение их в файл в текстовом виде.
Получаем код страницы с возможностью забрать всю нужную информацию.
Получаем номер телефона. который на avito скрыт от парсеров в виде изображения, ссылка на которое зашифрована.
Парсер работает в фоновом режиме. Компьютер свободен.

Скрипт в учебных целях.

Видео
https://youtu.be/_IugqfakXrw

Страницы: 13 4 5 6 7 8
ФлеймФорумПрограммирование