我正在尝试自动化部分工作流程,其中涉及通过带有AppleScript的网页上传一系列图像,AppleScript在已加载的页面中调用JavaScript。
之前我已经完成了这种自动化,但在实际选择要上传的文件时遇到了一个主要障碍。我无法设置input.value
属性(出于安全原因,它是不允许的),我甚至无法弄清楚如何让页面放置文件选择器,然后我可以填充它。该页面使用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>
如何使用加载到页面DOM中的JavaScript来模拟单击“选择文件”?
答案 0 :(得分:0)
这基本上就是你所说的。对我来说最无望的部分是javascript部分,但幸运的是我在一个名为cubemg的网站上找到了一些预制的applescript javascript函数。
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's 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
如果要查看此内容,请使用文件格式&#34; application&#34;在脚本编辑器中。然后确保safari打开(或延长延迟)并通过将图像拖到脚本上来使用它(您可以将它放在底座或桌面上)。完成后,它执行以下操作
即使使用预制功能,我也很难找到有效的类/ ID。
这可能很大程度上是因为我花了很长时间试图看看我是否可以使用applescript和javascript的某种组合将文件粘贴或拖放到浏览器中。我仍然认为这是一种避免做这么多击键事情和使用这么多延迟的方法。即使只是一种方式来拖放&#34;这会有很大的帮助。
此外,当您单击按钮打开选择文件窗口时,页面不会刷新,所以我觉得html中有一些字段可以使用javascript设置为文件路径。我只是不知道它叫什么。
如果您找到或找到另一种方法来打开&#34;文件选择窗口&#34;请告诉我。