Автоматизация задач на Mac с помощью AppleScript и Терминала
С помощью скриптов AppleScript можно ускорить работу с Терминалом и автоматизировать часто выполняемые задачи. Приложение «Терминал» поддерживает сценарии и команды AppleScript. Эти команды описаны в словаре AppleScript для Терминала.
Просмотр словаря AppleScript для Терминала
В Finder на Mac откройте папку «Программы/Утилиты».
Перетяните значок Терминала на значок Редактора скриптов .
В AppleScript можно использовать команду Do Shell Script для отправки команды сценария UNIX shell в Терминал.
Запуск скриптов AppleScript с помощью Терминала
Из Терминала можно запускать скрипты AppleScript, используя команду osascript.
В приложении «Терминал» на Mac можно ввести команду cd для перехода к каталогу, содержащему файл, который Вы хотите запустить. Например:
Osascript Wants To Control Safari POP-UP Virus (Mac)
Written by Tomas Meskauskas on 23 October 2021 (updated)
What is «Osascript wants to control Safari»?
«Osascript wants to control Safari» is a fake operating system pop-up message used to trick MacOS users to allow «osascript» to control the Safari web browser. There are many adware-type apps that cause these pop-ups. Note that many users encounter this scam and it should not be trusted.
According to this fake MacOS system message, giving permission for «osascript» to control the Safari browser will provide access to data and documents stored in the browser, thus allowing various actions to be performed via the app. These fake pop-up windows are usually generated by adware installers or adware-type applications.
They often demand permission to access browsers so that changes can be made to settings, thereby causing unwanted redirects to potentially malicious, deceptive websites. To avoid problems relating to browsing safety or privacy, ignore the «Osascript wants to control Safari» pop-up message and do not allow it to take control over your Safari browser.
If you have encountered this pop-up, there is a high probability that your computer is infected with adware. Therefore, immediately check the list of installed applications (and browser extensions) and eliminate all dubious entries.
Adware programs are categorized as potentially unwanted apps (PUAs) that deliver intrusive ads, such as coupons, banners, pop-ups, surveys, and so on. Furthermore, these ads are usually displayed through tools that enable placement of third party graphical content on any site and conceal underlying content. Therefore, they diminish the browsing experience.
Furthermore, clicking ads delivered by adware often leads to redirects to untrustworthy or deceptive websites. Some ads run scripts that download and install other unwanted applications or even high-risk malware. Therefore, clicking them might lead to various system infections.
Potentially unwanted apps of this type often record browsing related data. These apps collect IP addresses, search queries, geo-locations, URLs of visited websites, and other data relating to users’ browsing habits when using the affected web browser.
Furthermore, PUAs developers share the gathered data with third parties (who might also be cyber criminals) who misuse it to generate revenue.
Threat Summary:
Name
«Osascript wants to control Safari» virus
Threat Type
Mac malware, Mac virus
Symptoms
Your Mac became slower than normal, you see unwanted pop-up ads, you get redirected to shady websites.
Internet browsing tracking (potential privacy issues), displaying of unwanted ads, redirects to shady websites, loss of private information.
Malware Removal (Mac)
To eliminate possible malware infections, scan your Mac with legitimate antivirus software. Our security researchers recommend using Combo Cleaner. ▼ Download Combo Cleaner for Mac To use full-featured product, you have to purchase a license for Combo Cleaner. Limited seven days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
There are many fake system pop-ups online, some of which encourage users to provide their usernames and passwords. Typically, they are triggered by adware installers or other rogue download/installation set-ups.
PUAs are promoted by developers as ‘useful tools’, but most generate revenue for their developers by causing redirects, collecting data, and delivering intrusive ads. Few of these apps deliver the functionality promised or provide any other value.
How did potentially unwanted applications install on my computer?
In summary, «bundling» is a deceptive marketing method used to trick users into installing various unwanted apps together with regular software. Developers achieve this by hiding PUAs in «Custom», «Advanced» and other similar settings/options of the download or installation processes.
Therefore, information about the presence of PUAs in set-ups is not presented properly. Furthermore, many users tend to skip download/installation steps without checking the settings, thus allowing these apps to be installed.
How to avoid installation of potentially unwanted applications?
To prevent installation of unwanted apps, download software using official/trustworthy sources and direct links only. Avoid using software third party installers, downloaders or other unofficial sources. Do not skip download/installation steps without first checking the options or settings.
Deselect all bundled (additionally-included) applications/software and only then finish the installation/download. Bear in mind that most ads may seem legitimate, but many redirect to suspicious or untrustworthy websites (such as adult dating, gambling, pornography, and so on).
If you encounter these redirects, check the list of extensions, add-ons, and plug-ins installed on your browser, and programs on your computer. If there are unknown or unwanted entries, remove them immediately. If your computer is already infected with PUAs, we recommend running a scan with Combo Cleaner Antivirus for macOS to automatically eliminate them.
Text presented in a fake system pop-up window:
«osascript» wants access to control «Safari». Allowing control will provide access to documents and data in «Safari», and to perform actions within that app.
Another variant of the «osascript» pop-up, which requests access to the Google Chrome web browser:
Text presented within this pop-up:
«osascript» wants access to control «Google Chrome». Allowing control will provide access to documents and data in «Google Chrome», and to perform actions within that app.
Screenshot of the adware installer that displays this fake system pop-up:
Instant automatic Mac malware removal: Manual threat removal might be a lengthy and complicated process that requires advanced computer skills. Combo Cleaner is a professional automatic malware removal tool that is recommended to get rid of Mac malware. Download it by clicking the button below: ▼ DOWNLOAD Combo Cleaner for Mac By downloading any software listed on this website you agree to our Privacy Policy and Terms of Use. To use full-featured product, you have to purchase a license for Combo Cleaner. Limited seven days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
Quick menu:
Video showing how to remove «osascript» pop-ups using Combo Cleaner:
Potentially unwanted applications removal:
Remove potentially unwanted applications from your «Applications» folder:
Combo Cleaner checks if your computer is infected with malware. To use full-featured product, you have to purchase a license for Combo Cleaner. Limited seven days free trial available. Combo Cleaner is owned and operated by Rcs Lt, the parent company of PCRisk.com read more.
Remove «osascript wants to control safari» virus related files and folders:
Click the Finder icon, from the menu bar. Choose Go, and click Go to Folder.
Check for adware-generated files in the /Library/LaunchAgents folder:
In the Go to Folder. bar, type: /Library/LaunchAgents
Check for adware generated files in the /Library/Application Support folder:
In the Go to Folder. bar, type: /Library/Application Support
In the “Application Support” folder, look for any recently-added suspicious folders. For example, “MplayerX” or “NicePlayer”, and move these folders to the Trash.
Check for adware-generated files in the
Check for adware-generated files in the /Library/LaunchDaemons folder:
In the Go to Folder. bar, type: /Library/LaunchDaemons
In the “LaunchDaemons” folder, look for recently-added suspicious files. For example “com.aoudad.net-preferences.plist”, “com.myppes.net-preferences.plist”, «com.kuklorest.net-preferences.plist”, “com.avickUpd.plist”, etc., and move them to the Trash.
Scan your Mac with Combo Cleaner:
If you have followed all the steps in the correct order you Mac should be clean of infections. To be sure your system is not infected run a scan with Combo Cleaner Antivirus. Download it HERE. After downloading the file double click combocleaner.dmg installer, in the opened window drag and drop Combo Cleaner icon on top of the Applications icon. Now open your launchpad and click on the Combo Cleaner icon. Wait until Combo Cleaner updates it’s virus definition database and click «Start Combo Scan» button.
After removing files and folders generated by the adware, continue to remove rogue extensions from your Internet browsers.
«Osascript wants to control Safari» virus removal from Internet browsers:
Remove malicious extensions from Safari:
Remove «osascript wants to control safari» virus related Safari extensions:
Open Safari browser, from the menu bar, select «Safari» and click «Preferences. «.
Remove malicious plug-ins from Mozilla Firefox:
Remove «osascript wants to control safari» virus related Mozilla Firefox add-ons:
Open your Mozilla Firefox browser. At the top right corner of the screen, click the «Open Menu» (three horizontal lines) button. From the opened menu, choose «Add-ons«.
Remove malicious extensions from Google Chrome:
Remove «osascript wants to control safari» virus related Google Chrome add-ons:
Open Google Chrome and click the «Chrome menu» (three horizontal lines) button located in the top-right corner of the browser window. From the drop-down menu, choose «More Tools» and select «Extensions«.
Click to post a comment
About the author:
I am passionate about computer security and technology. I have an experience of over 10 years working in various companies related to computer technical issue solving and Internet security. I have been working as an author and editor for pcrisk.com since 2010. Follow me on Twitter and LinkedIn to stay informed about the latest online security threats. Contact Tomas Meskauskas.
PCrisk security portal is brought by a company RCS LT. Joined forces of security researchers help educate computer users about the latest online security threats. More information about the company RCS LT.
Our malware removal guides are free. However, if you want to support us you can send us a donation.
PCrisk is a cyber security portal, informing Internet users about the latest digital threats. Our content is provided by security experts and professional malware researchers. Read more about us.
Node.js module for doing Apple Open Scripting Architecture (OSA) in JavaScript or AppleScript.
For using JavaScript as Automation language, Mac OS X Yosemite is required. On versions before that, you can pass AppleScripts.
See the last example for overriding this behaviour and passing on AppleScript instead. All API’s are the same.
This will pipe the data from someFile.js to the Apple Open Scripting Architecture (OSA) and print the result to the standard output.
You can also do this in a short-hand:
Or if you only have a string, you can do that as well
If you don’t want to use a stream (just get the buffered output) you can do this on the file and eval methods by passing a function as the last argument:
API from base function required in this way:
All endpoints uses options :
flags can be used to change the output style of return values from functions executed by osascript:
args is a list of strings passed in as arguments to your scripts. In JavaScript you can access them using:
Creates a PassThrough stream that can get piped text manually (text or files).
Node.js module for doing Apple Open Scripting Architecture (OSA) in JavaScript or AppleScript.
For using JavaScript as Automation language, Mac OS X Yosemite is required. On versions before that, you can pass AppleScripts.
See the last example for overriding this behaviour and passing on AppleScript instead. All API’s are the same.
This will pipe the data from someFile.js to the Apple Open Scripting Architecture (OSA) and print the result to the standard output.
You can also do this in a short-hand:
Or if you only have a string, you can do that as well
If you don’t want to use a stream (just get the buffered output) you can do this on the file and eval methods by passing a function as the last argument:
API from base function required in this way:
All endpoints uses options :
flags can be used to change the output style of return values from functions executed by osascript:
args is a list of strings passed in as arguments to your scripts. In JavaScript you can access them using:
Creates a PassThrough stream that can get piped text manually (text or files).
Последние годы JavaScript уверенно держится на Олимпе популярных языков программирования. Многочисленные фреймворки, разработка под популярные платформы закрепляют успех и стирают в памяти гадкие клише прошлого. Язык растет, развивается и становится логичнее, что не может не радовать многотысячную армию его фанатов.
В 2014-м JavaScript удостоился внимания серьезных ребят из Apple. На конференции WWDC 2014 была анонсирована новая технология “JavaScript Automation”, позволяющая создавать приложения для OS X на этом хитовом языке программирования. Попробуем познакомиться с новинкой поближе и на реальных примерах понять, а стоит ли игра свеч?
В любой нормальной операционной системе есть средства для автоматизации. Чаще всего они представляют собой хардкорные инструменты. Взять, к примеру, nix’ы. Здесь главенствует мощный BASH, способный решать самые изощренные задачи. Проблема лишь в его сложности. Не всякий юзер решится на творческий союз с этим швейцарским ножом. Получается, что инструмент есть, а пользуются им только продвинутые единицы.
Специально для таких пользователей были придуманы всевозможные прослойки и альтернативы. Так, например, в Windows все желающие могут писать на том же JavaScript (причем очень давно) или VBS. Позже еще добавился мощный инструмент в виде PowerShell, делающий возможность более доступной автоматизации.
Мир OS X сталкивался с подобной ситуацией. Как не крути, а в основе этой ОС всегда лежала BSD. Следовательно, средства автоматизации в нем исходно следуют традиционному unix-way: BASH или любой другой язык программирования.
Бородатые пользователи должны помнить, что возможность писать автоматизирующие скрипты (сценарии) на JS появилась еще в далеком 2001 году. Увы, тогда популярность он не завоевал и несколькими годами позже его сменил язык AppleScript, надолго ставший стандартом. Это был не просто «еще один язык программирования», а новый взгляд на программирование для обычных людей. Вместо привычных матерым разработчикам синтаксических конструкций, AppleScript общался языком, похожим на человеческий.
Маркетинговые усилия со стороны Apple и радужные отзывы простых смертных, сделали из AppleScript небольшой культ, который с выходом визуального средства для автоматизации под названием Automator только окреп.
Получается, что JavaScript (JS OSA) в яблочном строю был давно, но по воле рока и ввиду своей юности, несправедливо был заброшен на задворки. И эту ситуацию легко можно понять, если вспомнить, что в начале нулевых JS ассоциировался больше с хулиганским инструментом для издевательств над браузером, нежели с универсальным языком программирования…
JavaScript for Automation
Если программировать на JavaScript для OS X теоретически возможно больше десяти лет, то в чем же тогда фишка столь обсуждаемого анонса? Неужто компания созрела на запоздавшую маркетинговую компанию?
Ну а теперь – немного технических деталей.
Тесная интеграция с системой
Простой диалог с приложениями
Взаимодействие с приложениями сводится к заполнению свойств и выполнению методов соответствующих объектов. Никаких хитроумных и монструозных названий! Все сделано в расчете на, скажем так, программистов средней продвинутости.
Дружба с Automator
Automator (визуальное средство для автоматизации) не осталось в стороне и его сразу подружили с JavaScript. Теперь, помимо визуальных “кубиков” с логикой AppleScript, реально использовать трушный код на JS.
Документация
Презентация говорит о хорошей документации, но на мой взгляд, здесь все не так идеально. Да, библиотека с описанием свойств/методов стоковых приложений сделана хорошо. Приведено описание всех встроенных приложений и попробовать себя в роли гуру OS X автоматизации становится возможным минут через 15 (само собой, при наличии опыта программирования). А вот в вопросах более тесного взаимодействия с системой возникают некоторые пробелы. Впрочем, уверен, что это дело времени.
Готовим инструменты
Аналогичного поведения можно добиться с любым другим редактором, но тогда придется потратить время на настройку. Я этим вопросом пока не заморачивался, но думаю, что особых сложностей возникнуть не должно. Во всяком случае, утилита osascript (о ней немного позже) покрывает все потребности по запуску сценариев из консоли.
Теперь попробуем проверить все вышесказанное на практике и сотворить простейший скрипт. Пусть это будет традиционный HelloWorld, но только свое приветствие миру мы скажем голосом. Сначала в окне редактора скриптов сменим язык программирования на JavaScript. Затем наберем три строчки и запустим сценарий на выполнение:
Если все введено без ошибок, то приятный женский голос (все зависит от системных настроек) произнесет замыленную в программерских кругах фразу.
Рулим браузером
В моей любимой интернет-бродилке постоянно висят десятки открытых вкладок. Увидишь что-нибудь интересное, а читать времени нет. Оставляешь вкладку открытой и даешь себе обещание: “Чуть позже прочитаю”. Вот только это “позже” не наступает никогда и вкладки начинают хаотично копиться. Энтропия нарастает, и в итоге сжирает всю доступную память. Потом разбираться в этом хламе уже не хочется и все открытые вкладки разом закрываются.
Листинг 1. Грабим ссылки из вкладок
Этот сценарий сохранит ссылки на открытые вкладки во всех открытых окнах браузера. Для наглядности адрес сайта отделяется от заголовка страницы символом табуляции. Теперь немного заострим внимание на коде.
Первым делом необходимо установить связь с желаемым приложением. В моем случае это “Google Chrome” и “TextEdit”. Нам требуется создать экземпляр объекта для дальнейшего взаимодействия. Для этого мы берем и выполняем глобальный метод Application. В качестве параметра ему необходимо передать имя приложения (id процесса, путь к приложению). Если все прошло ok, то можно приступать к работе.
После получения экземпляра объекта следует сразу открыть “Библиотеку” и посмотреть доступные свойства/методы у выбранного приложения. Я специально выбрал Google Chrome, так как его описание в библиотеке отсутствует. Как же быть? Официальные комментарии мне не попались, поэтому я рискнул и списал название методов из раздела про Safari. Код прекрасно заработал.
Поскольку у браузера может быть открыто несколько окон и в каждом из них открыты закладки, необходимо пройтись по каждому из них. Для этого перебираем коллекцию windows, а затем у очередного окна пробегаемся по вкладкам (tabs). Дальше идут стандартные возможности JS, которые в дополнительных комментариях они нуждаются.
Приведенную идею легко развить и дописать код открытия ссылок из файла. А что, получится очень даже недурно! Подобная функция когда-то даже была реализована в павшем смертью храбрых (я про его оригинальный движок) браузере Opera. Ну и само собой сделать поддержку разных браузеров. Сразу рассмотрим пример открытия новой вкладки в Google Chrome:
Пишем письма под копирку
Теперь взглянем на встроенный почтовый клиент (mail) с точки зрения JXA. Попробуем подключиться к этому приложению и сформировать новое письмо. Этот пример любят приводить все блоггеры, но они ограничиваются созданием нового письма с заполненной темой и текстом. Вроде бы ничего не мешает расширить пример, но тут обязательно (StackOverflow тому подтверждение) возникают трудности. Во втором листинге я привел полноценный код скрипта, позволяющий создать новое письмо, добавить несколько получателей и приаттачить произвольный файл.
Листинг 2. Работаем с mail
По идее, ничего необычного: инициализируем соответствующий объект и заполняем свойства. Однако, есть один нюанс, с которым я столкнулся при первом знакомстве с JXA. Смотри, по идее мы могли бы записать весь код в традиционном для JS стиле:
Код выглядит элегантнее, синтаксис абсолютно корректный… но пример правильно не отработает. Новое письмо будет создано, но строка с получателями и список аттачей будут пусты. На это стоит сразу обратить внимание, потому что такая ситуация будет тебя поджидать еще в нескольких ситуациях.
Командуем интерактивно
Возможности автоматизации не ограничиваются написанием скриптов в традиционном стиле. JXA позволяет также выполнять код интерактивно, позволяя сразу же видеть результат действия каждой строки. Продемонстрировать все вышесказанное поможет утилита OSASCRIPT. Откроем терминал и запустим osascript:
Первым ключом мы выбрали используемый язык программирования (не забываем, все то же самое можно сделать с помощью AppleScript). Второй ключ указывает на желание работать в интерактивном режиме.
Выполнив эту команду, мы получим приглашение для ввода (>>) JavaScript кода. Попробуем для примера запустить браузер Google Chrome и открыть в нем несколько вкладок. Вводим строку и отправляем ее на выполнение нажатием клавиши Enter.
Меняем bash на JS
С помощью все той же утилиты osascript можно писать традиционные консольные скрипты в стиле BASH. А что делает типичный консольный скрипт? Как правило, выполняет какой-то долгий процесс (типа резервного копирования). Для любого серьезного скипта потребуется работа с параметрами от пользователя. Подобное вполне реально реализовать на JXA. Пример простейшей болванки:
Для теста запускаем этот сценарий из консоли и передаем ему несколько параметров:
Кстати, если требуется выполнить небольшой код на JavaScript в консоли немедленно, то необходимости в создании отдельного сценария нет никакой:
JavaScript vs. Objective-C
Не стоит также забывать, что Apple совсем недавно представила новый язык программирования Swift. В ближайшие годы он будет идти по пятам Objective-C и если эксперимент удастся, потеснит или вовсе вытеснит его. На фоне этого факта перспективы JavaScript выглядят туманно.
Мы знаем, что есть крутой HTML5 и орда фреймворков/технологий, позволяющих упаковать web-технологию в мобильное приложение, но по возможностям они всегда будут уступать нативным инструментам. Именно поэтому (любая статистика подтвердит) что 99% хитовых приложений были созданы на Objective-C, а не с помощью волшебных надстроек.
К фиче разработки под OS X на JavaScript, на мой взгляд, стоит относиться точно также. Это прекрасный повод упростить свою работу, не заморачиваясь с изучением экзотичного AppleScript, но ни в коем случае не серебряная пуля, избавляющая от использования других технологий.
# Листинг 3. По мосту к Objective-C
Что почитать по теме?
Обычно я привожу кучу полезных ссылок к статье, но сегодня набор будет более скудным. JXA слишком “молодая” технология и большего объема литературы по ней пока нет. Есть отдельные небольшие обзоры зарубежных коллег, немного вопросов с ответами (причем, вопросов без ответов больше) на StackOverflow и скудноватая официальная документация. Поэтому, если ты всерьез решил заняться JXA, то приготовься к самостоятельному ресеченгу.
В поисках alert’a
Не все так просто
JXA, безусловно, интересное решение, но пользоваться им стоит осторожно. С точки зрения возможности банальной автоматизации (взаимодействие со стоковыми приложениями) все просто шикарно. JavaScript разработчикам развязали руки и теперь они могут творить мелкие полезняшки в своем любимом формате. Что касается пресловутого моста к нативным библиотекам, то, как говорится, проблем нет, пользуйся, но не забывай об описанных мною чуть выше ограничений. Планируешь серьезный проект – делай его с помощью нативного инструментария.