NTA

Доступно об AutoIt

AutoIt — это BASIC’овидный язык программирования, на котором можно создавать боты (имитация действия пользователя) для автоматизации таких работ, т.е управлять другими приложениями (запускать их, нажимать в них кнопки, менюшки…).

AutoIt умеет:

— Симулировать нажатия комбинаций клавиатуры (поддерживается основная масса раскладок клавиатуры);

— Симулировать перемещения указателя мыши и нажатия на ее кнопки;

— Перемещать, менять размер и управлять параметрами отображения окон;

— Непосредственно взаимодействовать с «управляющими элементами» (controls) окна (получать/менять надпись, перемещать, отключать, и т.п. действия);

— Работать с буфером обмена для пересылки его текстового содержания;

— Читать, менять и создавать ключи и значения реестра.

Новая версия AutoIt3 распознает общепринятые конструкции и имеет стандартный синтаксис, напоминающий синтаксис VBScript и BASIC, и поддерживает обработку сложных выражений, выполнение собственных функций, проводит циклические и условные вычисления.

И самым знаменательным является тот факт, что AutoIt остается бесплатным.

Какой софт нужен для работы с AutoIt? (практический опыт использования одного из наших коллег)

Нужный софт можно скачать с официального сайта AutoIt. Мне поступило задание выгрузить полный пакет документов по заданному пулу клиентов из автоматизированной системы (АС). Данная выгрузка была очень трудозатратной для пользователя, т.к. приходилось обрабатывать каждого клиента, т.е. проделывать множество раз одни и те же операции. Для написания и редактирования скриптов (расширение au3) я использовал специальный редактор SciTE, который входит в пакет Autoit. В Редакторе удобно проверять правильность синтаксиса и кодировку au3-файла, осуществлять отладку по шагам, компиляцию (Ctrl+F5 — проверка синтаксиса, F4 — переход к следующей ошибке, Ctrl+F7 – компиляция и др..). Так же в состав пакета входят уже готовые функции для работы с определенными объектами (Excel, Word, Массивы, файлы, окна и др.) Подключить необходимые функции можно с помощью #include… , например, какие я использовал в своем скрипте:

#include <Excel.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <Array.au3> #include <WinAPISys.au3> #include <WinAPIEx.au3>

Большой выбор функций конечно же можно найти в интернете.

Т.к. работа по выгрузке документов могла выполняться на мониторах с разным типом разрешения, то необходимо было занести данные по разрешениям мониторов, которые используются в организации, в специальный настроечный файл. Для этого я использовал INI-файл. Autoit работает с данным типом файлов и для этих целей есть пять функций:

IniDelete(«filename»,»section»[,»key»]) — удалить секцию или значение из ini-файла.
IniRead(«filename»,»section»,»key»,»default») — считать значение из ini-файла.
IniReadSection(«filename»,»section») — считать все пары секция/значение из ini-файла.
IniReadSectionNames(«filename») — считать имена всех секций из ini-файла.
IniWrite(«filename»,»section»,»key»,»value») — записать значение в ini-файл.

;--------------------------------------------------- ;----- координаты по разрешениям экрана------------- ;---------------------------------------------------
[1920x1080] x1=40 y1=40 x2_1=770 y2_1=561 x2_2=770 y2_2=561 [1600x900] x1=46 y1=36 x2_1=609 y2_1=472 x2_2=609 y2_2=472 [1680x1050 x1=44 y1=37 x2_1=649 y2_1=546 x2_2=649 y2_2=546

В начале работы определяется разрешение монитора:

Global $_Widtw=@DesktopWidth, $_Height=@DesktopHeight,

И в зависимости от разрешения считываются координаты из настроечного INI-файла.

$_x1=IniRead($f_ini,$_ekran, "x1", "Значение по умолчанию") $_y1=IniRead($f_ini,$_ekran, "y1", "Значение по умолчанию")

В настроечный файл записываются данные, необходимые в дальнейшей работе, например, адрес сервера, логин (без пароля), пути выгрузки, которые вы вводите в начале работы, далее чтение и запросы на ввод/изменение данных:

$iServer=IniRead($f_ini,"Server", "Key", "Значение по умолчанию"); $iLogin=IniRead($f_ini,"Login", "Key", "Значение по умолчанию") $iPassword="" ;;IniRead($f_ini,"Password", "Key", "Значение по умолчанию") $iURL=IniRead($f_ini,"Path_out", "Key", @ScriptDir) $ipath_inn = IniRead($f_ini,"xls_inn", "Key", "Значение по умолчанию") $_tipDOC = IniRead($f_ini,"TipDoc", "Key", "") ;-- ;if $iServer="Значение по умолчанию" then $iServer=InputBox("Запрос", "Введите httP сервер АС:", $iServer) ;'http://10.67.251.16/eks/api' ;EndIf if $iServer="" or $iServer="Значение по умолчанию" Then MsgBox(4096, "Внимание","Вы не ввели Сервер! Выходим.",30) Exit EndIf $Login=InputBox("Запрос", "Введите ЛОГИН пользователя АС:", StringUpper(StringRegExpReplace($ilogin," ",""))) ; if $Login="" Then MsgBox(4096, "Внимание","Вы не ввели Логин! Выходим.",30) Exit EndIf $Login=StringUpper(StringRegExpReplace($Login," ","")) $URL = FileSelectFolder("Выберите\Создайте Папку для выгрузки документов KSB ):", '', 3, $iURL) $URL = $URL & "\" if $URL = "\" Then MsgBox(4096, "Внимание","Вы не выбрали Папку для выгрузки документов KSB ! Выходим.",30) Exit EndIf $_tipDOC=InputBox("Запрос", "Введите ТИП документа (часть наименования) которые вы хотите ввыгрузить из AC ( <*> - все документы) :", StringUpper($_tipDOC)) if StringRegExpReplace($_tipDOC," ","")="" Then MsgBox(4096, "Внимание","Вы не ввели ТИП документа ! Выходим.",30) Exit EndIf

И отражение данных в INI-файле:

;--------------------------------------------------------------------------- ;- Сервер, логин, пути Выгрузки и расположения XLS файла с Клиентами ;--------------------------------------------------------------------------- [Server] ; сервер URL key=http://99.99.999.99/akva/api [Login] ; Логин текущего пользователя AС key=SIDOROV [path_out] ; путь для выгружаемых документов key=C:\Users\SIDOROV\Documents\ [xls_inn] ; где расположен файл с данными по клиентам key=C:\Users\SIDOROV\Documents\KLIENT.xlsx

Данные по клиентам считываем из. XLSX файла:

Local $oExcel=_Excel_Open(False) If @error Then Exit MsgBox(4096, "Ошибка", "Excel не открылся!") Local $WorkBook=_Excel_BookOpen($oExcel,$path_inn,False,False) If @error Then Exit MsgBox(4096, "Ошибка", "Книга не открыта. Проверь путь. Проверьте наличие файла.",30) $aRange = _Excel_RangeRead($WorkBook) ;DirRemove($URL,1) _Excel_BookClose($WorkBook,False) ; закрытие ;_Excel_Close($oExcel)

Получив данные для выгрузки, начинаем работать с АС, т.е. организуем цикл по количеству клиентов и непосредственную выгрузку документов. В каждой АС есть определенные пункты меню, к которым можно получим доступ по определенным сочетаниям клавиш, например: Alt+F1, Alt+1, Ctrl+t, Ctrl+n… либо за сочетанием клавиш закреплены определенные действия в АС: проваливание в список, вывод на экран информации, формирование отчетов.

Далее организуем цикл по количеству клиентов, считанных из входного XLSX-файла:

For $Shet=1 to UBound($aRange) -1 $_inn_ini=IniRead($load_ini,$aRange[$Shet], "Key", "no") if $_inn_ini<>'YES' And $aRange[$Shet]<> "" then IniWrite($load_ini,$aRange[$Shet], "Key", "no") WinActivate($title) Send("{ALT}") ; !!!!!!!!!! ALT !!!!!!!!!!!!!! Sleep(500) далее множественные операторы обработки ….. …………………………….. Next; конец цикла

Ниже представлен блок на обработку установки фильтра по типу документов:

Send("!3") $Spisok_PD = WinWait("Полный список","",20) If WinActive($Spisok_PD) Then ;----------------------------- Sleep(300) Send("{PGUP}") Send("{ENTER}") $tipD = WinWait('Тип документа',"",30) Sleep(300) If WinActivate($tipD) Then $_ftd="" if $_tipDOC="*" Then $_ftd="" Else $_ftd="%"&$_tipDOC EndIf ControlSetText('Тип документа',"",'[CLASS:Edit; INSTANCE:1]', $_ftd ) ControlClick("Тип документа","",'[CLASS:Button; INSTANCE:2]') EndIf

Для определения координат окон, кнопок на экране, или их цвета (если это необходимо) используется приложение Autoit Window Info, которое входит в состав пакета.

Статистика выгрузки документов заносится в отдельный INI-фал, по каждому клиенту и типу документов, что выручает нас при аварийном завершении (например, зависание АС). Процесс выгрузки начинается с того клиента, на котором произошел сбой.

;---------- запись в INI файл инфы по дог и кол.договоров IniWrite($load_ini,$iSection, "INN", $aRange[$Shet]) ;$aRange[$Shet] IniWrite($load_ini,$iSection, "Dogovor", $_Dogr) ;$aRange[$Shet] IniWrite($load_ini,$iSection, "TipDoc",$_tipDOC) IniWrite($load_ini,$iSection, "Key1", $Num2) ;$aRange[$Shet] IniWrite($load_ini,$iSection, "Key2", $posa-1) ;$aRange[$Shet] $_DtTm=@MDAY&'.'&@MON&'.'&@YEAR&'-'&@HOUR&':'&@MIN&':'&@SEC IniWrite($load_ini,$iSection, "DateTime", $_DtTm) ; запись значения в секцию счета

Если по какой-то причине не прошла выгрузка документа, например, очень долгий ответ от АС или зависание АС, то в INI-файл пишется информация о невыгруженном файле и времени записи в INI-файл:

IniWrite($load_ini,$iSection, "НЕ ВЫГРУЖЕН (" & $_DtTm &") ", ""&$KodDoc&"\"&$_File) ;

Также интересен блок по обработке (т.е. выгрузке) файлов большого объема (более ~100 МБ), т.к. сохранение файлов такого объема из АС может занимать относительно значительное время. В данном случае работает цикл по считываю объема сохраняемого файла и сравнивается с реальным размером файла:

$_rasm=0 if $_Doubl=0 Then $_puf=$_Dir&"\"&$_File ;MsgBox(4096,"путь-файл->",$_puf) $loopwait=0 $loopmax=99 $goot=False $_razm_new=0 $_razm_old=0 While $goot=False and $loopwait < $loopmax Sleep(1500) $_razm_new=FileGetSize($_puf) MsgBox(4096,"Ждем...","Идет сохранение файла -> "&$_File&" ... "&String($_razm_new),0.5) ; размер в КБ if $_razm_new = $_razm_old and $_razm_new<>0 and $_razm_old<>0 Then $goot=True $loopwait=$loopmax EndIF $loopwait=$loopwait+1 $_razm_old=$_razm_new WEnd EndIf

Я привел вашему вниманию основные блоки по обработке задачи, которая стояла перед скриптом Autolt.

В завершении, мне удалось автоматизировать процесс выгрузки требуемого пакета документов из АС с использованием AutoIt, что помогло разгрузить пользователя от однообразной и рутинной работы.

Программное обеспечение можно использовать для выполнения аналогичных повторяющихся задач. Спасибо за внимание.

{ "author_name": "NTA", "author_type": "editor", "tags": ["include"], "comments": 2, "likes": 2, "favorites": 4, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 119243, "is_wide": true, "is_ugc": false, "date": "Fri, 10 Apr 2020 18:14:51 +0300", "is_special": false }
0
2 комментария
Популярные
По порядку
0

Зачем, если есть python?

Ответить
0

Да, Python может помочь решить практически все задачи. Как волшебная таблетка)
В AutoIt, которую в статье рассматривает - тоже плюсов.

Ответить
Читать все 2 комментария
«Яндекс» оставляет только положительные отзывы о своих сервисах

После ситуации с не доставленным заказом из Яндекс Лавки, я оставил отзыв на сервисе Карт. Его приняли и разместили, но доступен он только для аккаунта, с которого я его оставлял)))

Дайджест новостей Сбера: AR-экскурсия, распознавание животных и премия для учёных

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

«Сбербанк» через час после личного визита позвал 84-летнюю бабушку еще раз в прийти офис

Казалось бы удобно - оформил получение пенсии на карту и нет проблем. Но это не про историю со Сбербанком. Здесь через час после получения карты лично в отделении прилетело смс о блокировке онлайн сервисов банка.

Как работать удалённо по московскому времени, если живёшь в Сибири

Команда ИТ-компании Southbridge — о преодолении трудностей часовых поясов: графике работы, планировании и отдыхе.

Выборы, выборы, кандидаты

Нет, не в рифму известной песни. "Всего лишь" педофилы... Делюсь своим негодованием после посещения избирательного участка.

«Вам звонок из Циан»: зачем компания скупает номера телефонов и как call-tracking помогает клиентам сервиса

Подменные номера телефонов защищают от нежелательных звонков и упрощают аналитику продаж

Конференция GoGlobal! соберет ведущих маркетологов

29 сентября 2021 года впервые состоится GoGlobal! — однодневная онлайн-конференция для маркетологов, заинтересованных в ускорении глобального присутствия своих кампаний.

Почему не стоит заказывать товары 18+ на Озоне, если вы не готовы их потом нести в пункт самовывоза

Хочу поделиться неудачной историей заказа товара 18+ на Озоне. И как Озон не хочет помогать решить проблему. Текст могут читать только совершеннолетние пользователи сайта.

Что может быть важнее прибыли. ESG-словарь для инвестора

В 2020–2021 гг. резко возросла популярность темы ответственного инвестирования, или ESG. Идея о том, что инвестиции должны не только приносить прибыль, но и поддерживать экологию и социальную справедливость, привела к тому, что ESG-фонды стали играть значимую роль на мировых рынках капитала.

null