Как выбрать файл с помощью AppleScript в подсказке Finder? - PullRequest
0 голосов
/ 28 сентября 2019

Я работаю с Selenium на macOS, чтобы автоматизировать отправку изображений с помощью веб-приложения WhatsApp в Google Chrome.Задача включает загрузку изображения, и для этого появляется запрос системы (Finder), чтобы выбрать файл.Это делается в Windows с использованием AutoIt .

. Я попытался найти способ автоматизировать эту задачу в macOS и считаю, что для этого можно использовать AppleScript.Поскольку у меня нет опыта в написании сценариев в GUI, любая помощь будет признательна.

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

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

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

set filepath to "/path/to/image.jpg"

-- Copy file object to clipboard
set the clipboard to filepath as «class furl»

-- Make sure Chrome is in focus and the
-- active tab is a WhatsApp tab
tell application id "com.google.Chrome"
    activate
    if the URL of the active tab in the front window ¬
        does not contain "web.whatsapp.com" then return
end tell

-- Paste the clipboard contents
-- and hit return (send)
tell application id "com.apple.SystemEvents"
    tell (process 1 where it is frontmost) to tell ¬
        menu bar 1 to tell menu bar item "Edit" to tell ¬
        menu 1 to tell menu item "Paste" to set Paste to it

    if (click Paste) = Paste then keystroke return
end tell

if (click Paste) = Paste проверка должна устраняет необходимость в задержке, поскольку явно вынуждает AppleScript оценить команду click до того, как продолжит выдавать keystroke.Тем не менее, я не могу проверить это при всех возможных условиях, и если есть другие факторы, такие как загрузка процессора или зависание процесса, которые могут дать сценарию шанс на скачок вперед, тогда просто вставьте небольшой delay послеthen и переместите keystroke return вниз на собственную строку.

Если вы хотите впоследствии удалить файловый объект из буфера обмена, просто добавьте в качестве последней строки set the clipboard to (и просто оставьте ее пустой послеслово "to", которое очистит содержимое буфера обмена).Конечно, это не повлияет на любые данные истории буфера обмена, которые вы можете иметь, если используете приложение для управления буфером обмена, только текущий элемент системного буфера обмена.

1 голос
/ 28 сентября 2019

Мне удалось найти ответ в другом сообщении о переполнении стека.Я добавил ответ для тех, кто сталкивается с той же проблемой.

tell application "System Events"
    keystroke "G" using {command down, shift down}
    delay 1
    keystroke "/path/to/file"
    delay 1
    keystroke return

    delay 1
    keystroke return

    delay 1
end tell
...