Autoit диалог выбора файла

Обновлено: 06.07.2024

Предисловие:
Доброго времени суток!
Данный материал навеян вышестоящим топиком про AutoIt, который расписывал синтаксические конструкции языка, а мы пойдем другим путем — рассмотрим реальные примеры автоматизации.
Начнем:

Не секрет, что часто приходится делать монотонную работу на компьютере — фиксированный набор действий. AutoIt, при правильном подходе, обеспечит существенный выигрыш во времени администратору, да, впрочем, и любому пользователю.
Первое и самое простое — мне, например, часто нужно переводить текст, находящийся в буфере обмена из одного регистра в другой. Код для этого:
; Перевести в регист в нижний
$txt=ClipGet()
$txt=StringLower($txt)
ClipPut($txt)

Что еще?
Чтение текстового файла, где через разделитель, например "|" содержатся имена пользователей и пароль:
11111|qwerty
22222|asdfgh

Код для чтения такого файла (мой код для чтения данного файла):
; Путь к файлу с паролями — <имя пользователя>|<пароль>
$file='C:\Temp\4.txt'
If FileExists($file) Then
; Файл найден
$file_read=FileOpen($file,0)
If $file_read = -1 Then
MsgBox(0, «Error», «Файл невозможно открыть.»)
Exit
EndIf
While 1
$login=''
$passwd=''
$str=''
$line = FileReadLine($file_read)
If error = -1 Then ExitLoop
; Чтение файла. line — строка
$str=StringSplit($line,'|')
$login=$str[1]
$passwd=$str[2]
; Здесь код, который меняет пароль в программе
Wend
FileClose($file)

Else
; Файл не найден
MsgBox(4096,$file, «Does NOT exists»)
Exit
EndIf

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

Подытожим:
Привожу команды (ну или операторы), наиболее применяемые в моем случае:
1. MouseClick('left',110, 309,1,10) — Эмуляция нажатия на кнопку. Параметры (с лева на право) — кнопка — левая, координаты x,y, число нажатий, скорость перемещения
2. Send('abc'), Send('') — эмуляция ввода. В первом случае вводится текстовая строка («abc»), во втором случае — эмулируется нажатие кнопки «Табуляция». Нажать ENTER можно, соответственно, так, Send('')
Обращаю внимание, у меня были случаи, когда AutoIT не успевал вводить текст, для управления скоростью ввода используйте функцию — AutoItSetOption («SendKeyDelay»,70), где число — скорость ввода в мл. сек.
3. Sleep(1000) — Пауза
4. WinActivate(«Пользователи — Microsoft Internet Explorer», "") — Активировать окно, то есть вывести его на передний план, если оно, конечно, открыто.
5. Изменить (установить) статус окна, например WinSetState($title, '', @SW_HIDE) — спрятать окошко, с заголовком. указанным в переменной $title

В этом уроке вы узнаете

Зачем использовать AutoIt?

Как использовать AutoIT с Selenium

Продвигаясь вперед, мы узнаем, как загрузить файл в веб-драйвер селена с помощью autoIT. Здесь нам нужно три инструмента для этого.

  • Selenium Webdriver
  • Редактор AutoIT и идентификатор элемента
  • Окно, которое вы хотите автоматизировать

Как скачать и установить AutoIT

Шаг 1) : перейдите по этой ссылке.

Шаг 2) : наведите курсор на выпадающие меню «Autoit» и «Autoit Editor».

Как использовать AutoIT с Selenium

Шаг 3) Нажмите «Загрузки».

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 5) . Теперь загрузите «Autoit editor», нажав кнопку «Загрузки».

Как использовать AutoIT с Selenium

Шаг 6): Нажмите на ссылку, как показано ниже.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 6) : Для установки AutoIT-Click по обеим настройкам AutoIT по одной.

Перейдите в «C: \ Program Files (x86) \ AutoIt3 \ SciTE»

Как использовать AutoIT с Selenium

и щелкните файл «SciTE.exe», откроется редактор AutoIT, как показано на экране ниже.

Как использовать AutoIT с Selenium

Шаг 8) : теперь открывается элемент Identifier.

Перейдите в «C: \ Program Files (x86) \ AutoIt3»

Как использовать AutoIT с Selenium

И нажмите на файл «Au3Info.exe», идентификатор элемента откроется, как показано на экране ниже.

Как использовать AutoIT с Selenium

Примечание. После того, как вы закончили с этим идентификатором элемента, вам нужно закрыть его вручную, он не закроется автоматически.

Поиск элемента через идентификатор элемента и написание скрипта в редакторе AutoIT.

Например: мы будем использовать страницу «Написать нам» guru99 для загрузки резюме (файл Doc).

После нажатия кнопки «Выбрать файл» на странице «Написать нам» нам нужно вызвать скрипт AutoIT. Элемент управления сразу же переводится в autoit после нажатия кнопки «Выбрать файл» с помощью инструкции ниже, которая заботится о загрузке части.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 2) : Теперь откройте окно загрузки файлов, нажав «Выбрать файл», которое является активностью Windows.

Как использовать AutoIT с Selenium

Шаг 3) . Перетащите инструмент поиска в элемент окна «Имя файла» окна загрузчика файлов, чтобы найти информацию об основных атрибутах, как показано на приведенном ниже экране со стрелкой.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Начните писать скрипт для выбора файла для загрузки.

Есть много доступных методов, которые мы можем использовать в скрипте в соответствии с требованием, но сейчас мы сосредоточимся на следующих методах, так как эти методы необходимы для написания скрипта загрузки файла:

You can see a number of methods are displayed as shown in below screen. The good feature of AutoIT is that it is somewhat like Eclipse that suggests you some of the methods.

Как использовать AutoIT с Selenium

Parameter values for ControlFocus method:

Как использовать AutoIT с Selenium

Parameter values for ControlSetText method :

Как использовать AutoIT с Selenium

Предыдущие значения (т.е. атрибуты текстового поля «Имя файла») заменяются новыми значениями кнопки «Открыть». Вы можете видеть, что атрибут класса теперь изменен на «кнопку», которая ранее была «отредактирована» в окне идентификатора элемента AutoIT.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Значения параметров для метода ControlClick :

Этот метод нажимает на кнопку «Открыть» в окне загрузки файлов.

Как использовать AutoIT с Selenium

Шаг 6) . На приведенном ниже экране видно, что сценарий AutoIT завершен для обработки загрузчика файла. Теперь можно закрыть идентификатор элемента и сохранить сценарий как «FileUpload» в указанном месте (E: \ AutoIT).

Как использовать AutoIT с Selenium

Теперь вы не можете выполнить этот скрипт напрямую, вам нужно скомпилировать этот скрипт.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Теперь мы будем использовать этот скрипт AutoIT в веб-драйвере Selenium. Проверьте ниже для вывода.

AutoIT Загрузить файл в Selenium Webdriver

  • Откройте Eclipse и начните писать код.
  • Когда селен нажимает на кнопку «Выбрать файл», открывается окно загрузки файла.
  • Затем нам нужно вызвать скрипт AutoIT, элемент управления немедленно передается в AutoIT для загрузки файла, а затем элемент управления отправляется обратно в селен, как показано ниже.

Как использовать AutoIT с Selenium

Шаг 1) : Разработка сценария селена в Eclipse.

  • Класс Runtime позволяет сценарию взаимодействовать со средой, в которой выполняется сценарий.
  • getRuntime () получает текущую среду выполнения, связанную с этим процессом.
  • Методы exec () выполняют скрипт AutoIT (FileUpload.exe).

Выше строка вызовет скрипт AutoIT в селене и загрузит файл.

Как использовать AutoIT с Selenium

Шаг 2) : Выполните сценарий Selenium в Eclipse.


Меня задолб.. спрашивают часто на счёт стандартного диалога выбора файлов в веб интерфейсе. По этому приведу пример реализации, чтобы не пересказывать всем одно и тоже.

А ещё @support запланировал немного изменить диалог выбора файла:

Есть несколько причин, почему @support сделал кастомную реализацию выбора файла:

В следующей версии интерфейс можно будет запускать только на том же пк, где находится бот. Но потом его можно будет запускать отдельно, на любом устройстве, в том числе и на мобильном.
Именно для этого был сделан свой диалог открытия файла, чтобы использовать файл на сервере, где работает БАС, а не там, где запущен интерфейс.
БАС и дальше будет развиваться в этом направлении, будут еще несколько компонентов, которые работают в браузере отдельно от софта, например, планировщик, управление фермой.

По этому единственный способ передать содержимое файла в скрипт через стандартный диалог выбора файла, это прочитать файл в веб интерфейсе через File API и перенести содержимое в ресурс с типом "строка". Вариант с передачей содержимого файла через глобальную переменную или базу я расскажу в следующий раз.

0_1560630005338_b09d7bad-61f0-48c4-bf26-8225997abb64-изображение.jpg

Для начала создадим проект и добавим в него ресурс file с типом "строка"

0_1560630223096_9f6c6f0a-bddc-4754-a200-acae4400c989-изображение.jpg

выгрузим проект на сервер bablosoft и сгенерируем интерфейс скрипту:

Далее надо создать простой input для выбора файла в любом удобном для вас месте:

0_1560630997962_a77c9a05-2283-4fc2-8504-56cdc565a3d2-изображение.jpg

чтобы пользователь не изменял содержимое файла в строке, спрячем элемент с ресурсом:

Затем находим строку /////Events в окне Javascript и создаём обработчик события с чтением файла в переменную:

следом находим функцию GetResourceValue, она идёт тремя строками ниже, и добавляем в неё условие для ресурса file

0_1560634186885_87972735-5640-4bf2-a99a-8fba16f820da-изображение.jpg

0_1560632750716_69444a51-f23e-4f9f-b719-b444c260f59b-изображение.jpg

В скрипте всего два действия:

Вот так выглядит результат:

Самый простой вариант применения, это в функции OnApplicationStart распарсить строку по переносу строк \r\n в массив и перенести его в локальный ресурс, чтобы в скрипте использовать как обычный ресурс:

0_1560633082806_76499872-6c1b-4df7-8140-845d093a5241-изображение.jpg


Не знаю для чего может понадобится выгрузка нескольких файлов в скрипт через стандартный диалог выбора файла, но для этого надо будет добавить в input атрибут multiple:


Меня задолб.. спрашивают часто на счёт стандартного диалога выбора файлов в веб интерфейсе. По этому приведу пример реализации, чтобы не пересказывать всем одно и тоже.

А ещё @support запланировал немного изменить диалог выбора файла:

Есть несколько причин, почему @support сделал кастомную реализацию выбора файла:

В следующей версии интерфейс можно будет запускать только на том же пк, где находится бот. Но потом его можно будет запускать отдельно, на любом устройстве, в том числе и на мобильном.
Именно для этого был сделан свой диалог открытия файла, чтобы использовать файл на сервере, где работает БАС, а не там, где запущен интерфейс.
БАС и дальше будет развиваться в этом направлении, будут еще несколько компонентов, которые работают в браузере отдельно от софта, например, планировщик, управление фермой.

По этому единственный способ передать содержимое файла в скрипт через стандартный диалог выбора файла, это прочитать файл в веб интерфейсе через File API и перенести содержимое в ресурс с типом "строка". Вариант с передачей содержимого файла через глобальную переменную или базу я расскажу в следующий раз.

0_1560630005338_b09d7bad-61f0-48c4-bf26-8225997abb64-изображение.jpg

Для начала создадим проект и добавим в него ресурс file с типом "строка"

0_1560630223096_9f6c6f0a-bddc-4754-a200-acae4400c989-изображение.jpg

выгрузим проект на сервер bablosoft и сгенерируем интерфейс скрипту:

Далее надо создать простой input для выбора файла в любом удобном для вас месте:

0_1560630997962_a77c9a05-2283-4fc2-8504-56cdc565a3d2-изображение.jpg

чтобы пользователь не изменял содержимое файла в строке, спрячем элемент с ресурсом:

Затем находим строку /////Events в окне Javascript и создаём обработчик события с чтением файла в переменную:

следом находим функцию GetResourceValue, она идёт тремя строками ниже, и добавляем в неё условие для ресурса file

0_1560634186885_87972735-5640-4bf2-a99a-8fba16f820da-изображение.jpg

0_1560632750716_69444a51-f23e-4f9f-b719-b444c260f59b-изображение.jpg

В скрипте всего два действия:

Вот так выглядит результат:

Самый простой вариант применения, это в функции OnApplicationStart распарсить строку по переносу строк \r\n в массив и перенести его в локальный ресурс, чтобы в скрипте использовать как обычный ресурс:

0_1560633082806_76499872-6c1b-4df7-8140-845d093a5241-изображение.jpg


Не знаю для чего может понадобится выгрузка нескольких файлов в скрипт через стандартный диалог выбора файла, но для этого надо будет добавить в input атрибут multiple:

Читайте также: