Гид по технологиям

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

4 min read Автоматизация Обновлено 12 Apr 2026
UI-скриптинг в AppleScript на macOS
UI-скриптинг в AppleScript на macOS

Обложка: схема взаимодействия AppleScript с интерфейсом macOS

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

Как использовать AppleScript: пример окна и команд

AppleScript — мощный инструмент автоматизации на macOS, но не все приложения напрямую поддерживают его команды. В таких случаях на помощь приходит UI-скриптинг (User Interface scripting): управление элементами графического интерфейса как будто вы взаимодействуете с ними вручную. В этой статье объясняются базовые приёмы, даются практические примеры, рекомендации по диагностике и готовые шаблоны для ускорения работы.

Для кого это руководство

Это руководство полезно, если вы:

  • хотите автоматизировать рутинные действия в приложениях без AppleScript-слоя;
  • используете Automator и хотите расширить возможности задач;
  • пишете скрипты для коллег и хотите повысить их надёжность.

Определение: UI-скриптинг — управление элементами графического интерфейса приложения через System Events и команды click/keystroke.

Важные предварительные шаги

  1. Обновите базовые знания AppleScript. Если вы давно не писали скриптов — освежите синтаксис и структуру tell-блоков.
  2. Включите доступ для вспомогательных устройств: перейдите в Системные настройки → Универсальный доступ (System Preferences, Universal Access) и включите “Enable access for assistive devices”.

Включение доступа для вспомогательных устройств в macOS

Важно: без разрешений 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 в TextEdit

Совет: если нужно вводить большое количество текста, keystroke может быть медленным. В некоторых случаях быстрее использовать AppleScript-команды приложения (если они доступны) или временные файлы и импорт.

Нажатие кнопок и выбор элементов

Для клика по кнопке используйте:

click button "Replace All"

Иногда элемент доступен не напрямую как button, а как pop up button, checkbox, radio button и т. д. Комбинируйте click, value, set и select в зависимости от типа элемента.

Исследование интерфейса: UIElementInspector и иерархия элементов

Не все элементы очевидны. Используйте бесплатный UIElementInspector (или Accessibility Inspector в Xcode) для определения иерархии элементов. Инспектор показывает, над каким элементом вы находитесь, его тип и позицию в дереве.

UIElementInspector: иерархия элементов интерфейса и pop-up button

Пример представления в скрипте:

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”. Также не забудьте сначала кликнуть по выпадающему меню, прежде чем выбрать пункт.

Пошаговое методическое руководство (мини-методология)

  1. Откройте приложение и вручную выполните нужную последовательность действий, фиксируя каждый шаг.
  2. Запишите порядок окон и модальных листов (sheets) — они меняют индекс window/ sheet.
  3. Включите UI-инспектор и наведите на каждый элемент, чтобы узнать его тип и путь.
  4. Напишите простой скрипт с tell application "System Events"tell process "AppName".
  5. Преобразуйте шаги в комбинации keystroke, click, set value of и т. д.
  6. Тестируйте по шагам, добавляя задержки 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-приложению.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Фон экрана блокировки Ubuntu — смена и отключение размытия
Ubuntu

Фон экрана блокировки Ubuntu — смена и отключение размытия

Плагины Notepad++: установка, обновление, удаление
Руководство

Плагины Notepad++: установка, обновление, удаление

Как конвертировать STL в G-code в Cura
3D-печать

Как конвертировать STL в G-code в Cura

Как блокировать уведомления на телефоне
Продуктивность

Как блокировать уведомления на телефоне

Как распознать поддельный видео‑звонок
Безопасность

Как распознать поддельный видео‑звонок

Как заставить iPhone читать текст вслух
Доступность

Как заставить iPhone читать текст вслух