как получить доступ к конкретному контекстному меню по названию меню через AppleScript? - PullRequest
0 голосов
/ 13 сентября 2018

Можно ли щелкнуть конкретное контекстное меню в приложении в macOS с помощью AppleScript?

например. в Chrome я хочу нажать «копировать адрес изображения» ,, но не хочу выполнять весь процесс вручную каждый раз, когда хочу получить адрес изображения.

Так можно ли получить доступ к контекстному меню по имени через AppleScript автоматически?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Для этого кода требуется, чтобы «Cliclick» - это сокращение от «щелчка интерфейса командной строки».Это крошечное приложение оболочки / терминала, которое будет эмулировать щелчки мышью или серию щелчков мышью (включая двойные клики и управляющие щелчки) в произвольных координатах экрана.Более того, он позволяет перемещать мышь, получать текущие координаты мыши, нажимать клавиши-модификаторы и т. Д. , который можно бесплатно загрузить и легко установить.

Если вы создаете новый сервис в Automator и вставляете егоэтот следующий код в команду «Запустить AppleScript» в рабочий процесс Automator, затем вы можете создать сочетание клавиш в системных настройках, которое запустит службу.Использование Google Chrome с курсором мыши, наведенным на любое изображение ... просто нажмите ваши горячие клавиши, которые вы определили, и он скопирует адрес изображения в буфер обмена


В моей системе у меня есть.щелкните в следующем каталоге: / usr / local / bin / cliclick.Из-за этого местоположения в моем коде AppleScript и в приложении «Терминал» мне нужно использовать полный путь для щелчка, чтобы вызвать команду.Например: do shell script "/usr/local/bin/cliclick rc:." В AppleScript указывается щелчок правой кнопкой мыши.

property theApp : "Google Chrome"
property menuItemName : "Copy Image Address"
property menuItemName2 : "Copy Link Address"
property mouseLocation : missing value
property menuItems : missing value

run firstTry

script firstTry
    tell application theApp to activate
    repeat while application theApp is not running
        delay 0.5
    end repeat
    tell application "System Events" to tell its application process theApp ¬
        to tell its attribute "AXEnhancedUserInterface"
        set value to true
    end tell
    delay 0.1
    set mouseLocation to do shell script "/usr/local/bin/cliclick  p"
    do shell script "/usr/local/bin/cliclick  rc:."
    delay 0.1
    tell application "System Events" to tell its application process theApp to tell its window 1 ¬
        to tell its scroll area 1 to tell its menu 1
        delay 0.1
        set menuItems to its name of menu items
        set menuItems to text of menuItems
        try
            click menu item menuItemName
        on error errMsg number errNum
            try
                click menu item menuItemName2
            on error errMsg number errNum
                key code 53 -- press esc key
                run my secondTry
            end try
        end try
    end tell
end script

script secondTry
    tell application theApp to activate
    repeat while application theApp is not running
        delay 0.5
    end repeat
    tell application "System Events" to tell its application process theApp ¬
        to tell its attribute "AXEnhancedUserInterface"
        set value to true
    end tell
    do shell script "/usr/local/bin/cliclick  m:" & mouseLocation
    do shell script "/usr/local/bin/cliclick  rc:."
    delay 0.3
    activate
    tell application theApp
        activate
        set theChoice to (choose from list menuItems ¬
            with title ¬
            "Choose A Link" with prompt ¬
            "Choose A Link" OK button name ¬
            "Click Menu Item" cancel button name "Cancel") as string
    end tell
    delay 0.1
    do shell script "/usr/local/bin/cliclick  m:" & mouseLocation
    do shell script "/usr/local/bin/cliclick  rc:."
    tell application "System Events" to tell its application process theApp to tell its window 1 ¬
        to tell its scroll area 1 to tell its menu 1
        delay 0.1
        try
            click menu item theChoice
        on error errMsg number errNum
            try
                click menu item theChoice
            on error errMsg number errNum
                key code 53 -- press esc key
            end try
        end try
    end tell
end script

Вот пример использования сочетания клавиш после того, как я создал службу Automator.В этом примере моя мышь находится над изображением.Он копирует адрес изображения, и в новом окне браузера я вставляю адрес изображения и перехожу к его URL.

enter image description here


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

enter image description here

0 голосов
/ 16 сентября 2018

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

  1. любой скрипт, который обращается к контекстному меню, должен знать изображение, к которому относится контекстное меню, либо щелчком мыши, либо сочетанием клавиш;

  2. любой сценарий, который вы запускаете, должен быть запущен либо путем доступа к нему из строки меню (несколькими щелчками мыши), либо нажатием горячей клавиши.

Эти две вещи уже сравнялись или превысили количество маневров, которое обычно выполняется при ручном доступе к контекстному меню, а именно: щелчок правой кнопкой мыши + однократный щелчок = 2 маневра.

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

    Array.from(document.getElementsByTagName('img'),x=>x.src)

Чтобы включить это в AppleScript, необходимо включить параметр, позволяющий JavaScript автоматизировать Chrome браузер.Для этого (я использую Chrome версия 69) выберите в меню Вид> Разработчик> Разрешить JavaScript из событий Apple и убедитесь, что он отмечен галочкой.

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

    tell application "Google Chrome" to tell ¬
        the front window to tell ¬
        the active tab to execute javascript ¬
        "Array.from(document.getElementsByTagName('img'),x=>x.src)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...