UI-скриптинг в AppleScript: управление любым приложением на macOS

firstimage=”https://www.makeuseof.com/wp-content/uploads/2011/03/applescript.jpg”

AppleScript — мощный инструмент автоматизации на macOS, но не все приложения напрямую поддерживают его команды. В таких случаях на помощь приходит UI-скриптинг (User Interface scripting): управление элементами графического интерфейса как будто вы взаимодействуете с ними вручную. В этой статье объясняются базовые приёмы, даются практические примеры, рекомендации по диагностике и готовые шаблоны для ускорения работы.
Для кого это руководство
Это руководство полезно, если вы:
- хотите автоматизировать рутинные действия в приложениях без AppleScript-слоя;
- используете Automator и хотите расширить возможности задач;
- пишете скрипты для коллег и хотите повысить их надёжность.
Определение: UI-скриптинг — управление элементами графического интерфейса приложения через System Events и команды click/keystroke.
Важные предварительные шаги
- Обновите базовые знания AppleScript. Если вы давно не писали скриптов — освежите синтаксис и структуру tell-блоков.
- Включите доступ для вспомогательных устройств: перейдите в Системные настройки → Универсальный доступ (System Preferences, Universal Access) и включите “Enable access for assistive devices”.

Важно: без разрешений macOS блокирует команды UI-скриптинга. Если скрипт не работает — проверьте права в Системных настройках.
Основные приёмы: эмуляция нажатий клавиш (keystroke)
Проще всего управлять интерфейсом, имитируя нажатия клавиш:
- CMD-F:
keystroke "f" using {command down} - CMD+SHIFT+S:
keystroke "s" using {command down, shift down} - Ввод текста:
keystroke "текст" - Нажатие таба:
keystroke tab
Перед вызовом keystroke обязательно открыть контекст через System Events и процесс приложения:
tell application "System Events"
tell process "TextEdit"
…затем выполняйте keystroke и другие команды, и не забудьте end tell.

Совет: если нужно вводить большое количество текста, keystroke может быть медленным. В некоторых случаях быстрее использовать AppleScript-команды приложения (если они доступны) или временные файлы и импорт.
Нажатие кнопок и выбор элементов
Для клика по кнопке используйте:
click button "Replace All"
Иногда элемент доступен не напрямую как button, а как pop up button, checkbox, radio button и т. д. Комбинируйте click, value, set и select в зависимости от типа элемента.
Исследование интерфейса: UIElementInspector и иерархия элементов
Не все элементы очевидны. Используйте бесплатный UIElementInspector (или Accessibility Inspector в Xcode) для определения иерархии элементов. Инспектор показывает, над каким элементом вы находитесь, его тип и позицию в дереве.

Пример представления в скрипте:
tell group 1 of group 1 of sheet 1 of window 1
tell pop up button 1
click
Это значит, что иногда нужно обращаться к элементам через несколько уровней group, sheet, window и т. п.

Пример из практики: я хотел сохранить документ в формате RTF. Окно “Save As” представлено поверх окна документа, и UIElementInspector не всегда указывает имя родительского окна. В таких случаях вызывайте window 1, а не имя “Example”. Также не забудьте сначала кликнуть по выпадающему меню, прежде чем выбрать пункт.
Пошаговое методическое руководство (мини-методология)
- Откройте приложение и вручную выполните нужную последовательность действий, фиксируя каждый шаг.
- Запишите порядок окон и модальных листов (sheets) — они меняют индекс window/ sheet.
- Включите UI-инспектор и наведите на каждый элемент, чтобы узнать его тип и путь.
- Напишите простой скрипт с
tell application "System Events"→tell process "AppName". - Преобразуйте шаги в комбинации
keystroke,click,set value ofи т. д. - Тестируйте по шагам, добавляя задержки
delay 0.2при необходимости.
Критерии приёмки:
- Скрипт повторяемо выполняет задачу без вмешательства.
- Скрипт корректно обрабатывает модальные диалоги.
- Скрипт завершается без ошибок при стандартной конфигурации системы.
Шаблон скрипта: Find & Replace в TextEdit (с пояснениями)
Примерная структура скрипта:
tell application "TextEdit" to activate
tell application "System Events"
tell process "TextEdit"
keystroke "f" using {command down} – открыть окно Find
delay 0.2
keystroke "искомый текст"
keystroke tab
keystroke "замена" -- затем клик по "Replace All"click button “Replace All” of window 1end tellend tellОбъяснение:delayпомогает дождаться появления окна. Если окно появляется медленно, увеличьте значение. ## Чек-лист для надёжных UI-скриптов (роль: разработчик/администратор) - [ ] Проверить права в Системных настройках → Универсальный доступ. - [ ] Убедиться, что приложение активно (activate). - [ ] Использоватьdelayпосле открытия модального окна. - [ ] Проверять наличие окна/элемента перед действием (см. тестовые условия ниже). - [ ] Логировать ключевые шаги (display dialog или запись в файл). - [ ] Обрабатывать ошибки и завершающиеend tell. ## Когда UI-скриптинг не работает — варианты отказа и решения 1. Элемент не виден/в другом рабочем пространстве (Space) — переключитесь на нужный Space или используйтеactivate. 2. Приложение использует нестандартные компоненты (например, OpenGL/Metal канвасы) — такие элементы могут быть недоступны для Accessibility API. 3. Элементы динамически меняют индекс — ориентируйтесь на надписи (name) и свойства, а не только на номера (button 1). 4. Задержки слишком малы — увеличьтеdelayи используйте проверки существования элемента. Контрпример: некоторые графические приложения (игры, графические редакторы на основе собственных фреймворков) не предоставляют элементы через Accessibility API — UI-скриптинг в них не применим. ## Альтернативные подходы - Использовать встроенные AppleScript-скрипты приложения (если есть) — они быстрее и надёжнее. - Автоматизировать через командную строку или Apple Events (scripting additions), если приложение поддерживает. - Использовать GUI-автоматизаторы уровня системы (например, Automator workflows, Shortcuts) в сочетании с Shell-скриптами. ## Шпаргалка по командам (cheat sheet) -tell application “System Events”— вход в UI-скриптинг. -tell process “AppName”— ссылка на процесс приложения. -click — клик по кнопке/полю. -keystroke “text”— ввод текста. -keystroke “f” using {command down}— модифицированные клавиши. -value of checkbox 1— чтение значения. -set value of text field 1 to “новое”— запись в поле. -delay 0.2— пауза в секундах. ## Тестовые сценарии и критерии приёмки 1. Тест: открыть Find в TextEdit и заменить текст. - Ожидаемый результат: все вхождения заменены; окно диалога закрыто. 2. Тест: открыть Save As и выбрать формат RTF в выпадающем меню. - Ожидаемый результат: выбран формат RTF и файл сохранён. 3. Тест: сценарий на медленной машине (симуляция задержки). - Ожидаемый результат: скрипт корректно ждёт появления элементов и завершает работу. ## Отладка и полезные приёмы - Используйтеdisplay dialogдля вывода переменных и шагов в процессе отладки. - Логируйте событие в файл при каждом ключевом шаге для последующего анализа. - Если индексы элементов меняются, поищите свойстваnameилиdescription` и обращайтесь к элементам по ним. ## Безопасность и приватность UI-скрипты эмулируют действия пользователя и могут взаимодействовать с конфиденциальной информацией. Не запускайте сторонние скрипты без проверки кода. Предупредите пользователей о том, какие права требуются и зачем. ## Краткое резюме и рекомендации UI-скриптинг расширяет возможности AppleScript, позволяя автоматизировать приложения без собственных AppleScript-интерфейсов. Всегда: - включайте доступ для вспомогательных устройств; - исследуйте интерфейс через инспектор; - добавляйте паузы и проверки наличия элементов; - логируйте и тестируйте на целевых конфигурациях. Что дальше: попробуйте автоматизировать одно рутинное действие в вашем рабочем процессе и перенесите его в шаблон скрипта. Поделитесь в комментариях, какие задачи удаётся автоматизировать — интересно сравнить подходы. Важное замечание: UI-скриптинг требует терпения и частой корректировки — но он приносит ощутимый выигрыш в автоматизации там, где прямых API нет. — Ключевые термины (1‑строчно): - UI-скриптинг — управление интерфейсом через System Events. - UIElementInspector — инструмент для определения иерархии элементов. - keystroke — команда эмуляции ввода клавиш. Итог: с правильной методологией и инструментами UI-скриптинг делает AppleScript применимым почти к любому macOS-приложению.
Похожие материалы
Фон экрана блокировки Ubuntu — смена и отключение размытия
Плагины Notepad++: установка, обновление, удаление
Как конвертировать STL в G-code в Cura
Как блокировать уведомления на телефоне
Как распознать поддельный видео‑звонок