Я пытаюсь автоматизировать часть моего рабочего процесса, которая включает в себя загрузку серии изображений через веб-страницу с помощью 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?
Это делает то, что вы говорите. Самой безысходной частью для меня были части 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
Если вы хотите проверить это, сохраните его в формате "приложение" в редакторе сценариев. Затем убедитесь, что сафари открыто (или удлиняет задержки) и использует его, перетаскивая изображение на скрипт (вы можете поместить его в свою док-станцию или на свой рабочий стол). После этого сделайте следующее
Даже с функциями додела, мне было трудно найти классы/идентификаторы, которые сработали.
Вероятно, в основном потому, что я долгое время пытался увидеть, могу ли я как-то просто вставить или перетащить + перетащить файл в браузер, используя некоторую комбинацию applescript и javascript. Я все еще думаю, что это должен быть способ избежать так много действий нажатия клавиш и использовать так много задержек. даже если бы был просто способ "перетащить", что очень помогло бы.
Кроме того, страница не обновляется, когда вы нажимаете кнопку, чтобы открыть окно выбора файла, поэтому я чувствую, что в html есть какое-то поле, которое можно установить в путь к файлам с помощью javascript. я просто не знаю, как его зовут.
если вы найдете или нашли другой способ открыть окно выбора файла, пожалуйста, дайте мне знать.