Автоматизируйте загрузку файлов с помощью AppleScript и Safari

0

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

Я уже делал такую автоматизацию раньше, но нахожусь на главном контрольном блоке, когда дело доходит до фактического выбора файлов для загрузки. Я не могу установить свойство input.value (это не разрешено по соображениям безопасности), и я даже не могу понять, как заставить страницу выставить файл picker, который я мог бы, надеюсь, заполнить. Страница использует Angular, в случае, если это поможет придумать решение.

Это выглядит HTML-страница страницы (соответствующий раздел):

<div class="...">
    <div class="..." ng-class="...">
        <span class="... ng-binding" ng-bind-html="...">Choose File</span>
        <div class="...">
            <input id="..." type="file" ng-file-select="onFileSelect($files)" multiple="">
        </div>
    </div>
</div>

Как я могу имитировать нажатие "Выбрать файл", используя JavaScript, загруженный на страницу DOM?

Теги:
automation
applescript

1 ответ

0

Это делает то, что вы говорите. Самой безысходной частью для меня были части javascript, но, к счастью, я нашел некоторые готовые javascript функции applescript на сайте под названием cubemg.

to clickClassName(theClassName, elementnum)
    tell application "Safari"
        do JavaScript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();" in document 1
    end tell
end clickClassName

to getValueFromClass(theclass, num)
    tell application "Safari"
        tell document 1
            set theFirstTableHTML to do JavaScript "\n document.getElementsByClassName('" & theclass & "')[" & num & "].value"
            return theFirstTableHTML
        end tell
    end tell
end getValueFromClass


on run
    choose file with prompt "Which folder would like average file size calculated?"
    open {result}
end run

on open theimage
    --tell application "Finder" to set xx to every file in item 1 of theimage
    --display dialog "Hey! the file alias is: " & (path of theimage as string)
    --display dialog theimage
    set filepath to POSIX path of theimage

    tell application "Safari" to open location "https://upload.vstanced.com"
    delay 2
    clickClassName("btn btn-big white outline", 0)
    tell application "System Events"
        activate application "Safari"
        delay 0.5
        keystroke "g" using {shift down, command down} --open goto
        set the clipboard to filepath
        keystroke "v" using {command down}
        delay 0.7
        keystroke return -- enter goto text
        delay 0.4
        keystroke return --press enter on file

    end tell
    delay 1
    clickClassName("btn btn-big green", 0)

    set thedirectlink to ""
    repeat 15 times
        set thedirectlink to getValueFromClass("r2", 1)
        delay 1
        if thedirectlink is not equal to "" then
            exit repeat
        end if
    end repeat
    set the clipboard to thedirectlink
    tell application "Safari" to close current tab of window 1

    display notification "Upload complete" with title "VStanced Upload" subtitle thedirectlink sound name "blow"
end open

Если вы хотите проверить это, сохраните его в формате "приложение" в редакторе сценариев. Затем убедитесь, что сафари открыто (или удлиняет задержки) и использует его, перетаскивая изображение на скрипт (вы можете поместить его в свою док-станцию или на свой рабочий стол). После этого сделайте следующее

  1. открывает новую вкладку
  2. идет на сайт для размещения изображений
  3. открывает "файл, выбирающий под-окно",
  4. открывает
  5. вставляет путь в
  6. хиты вводят дважды (сначала для goto, затем для самого окна выбора файла)
  7. ждет прямой ссылки для загрузки, копирует ее в буфер обмена, закрывает вкладку и "запускает" уведомление со звуком

Даже с функциями додела, мне было трудно найти классы/идентификаторы, которые сработали.

Вероятно, в основном потому, что я долгое время пытался увидеть, могу ли я как-то просто вставить или перетащить + перетащить файл в браузер, используя некоторую комбинацию applescript и javascript. Я все еще думаю, что это должен быть способ избежать так много действий нажатия клавиш и использовать так много задержек. даже если бы был просто способ "перетащить", что очень помогло бы.

Кроме того, страница не обновляется, когда вы нажимаете кнопку, чтобы открыть окно выбора файла, поэтому я чувствую, что в html есть какое-то поле, которое можно установить в путь к файлам с помощью javascript. я просто не знаю, как его зовут.

если вы найдете или нашли другой способ открыть окно выбора файла, пожалуйста, дайте мне знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню