使用AppleScript和Safari自动上传文件

时间:2015-09-23 23:53:27

标签: javascript html angularjs automation applescript

我正在尝试自动化部分工作流程,其中涉及通过带有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来模拟单击“选择文件”?

1 个答案:

答案 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打开(或延长延迟)并通过将图像拖到脚本上来使用它(您可以将它放在底座或桌面上)。完成后,它执行以下操作

  1. 打开新标签
  2. 转到图片托管网站
  3. 打开&#34;文件,选择子窗口&#34;
  4. 打开goto thingy
  5. 中粘贴路径
  6. 点击两次(首先是goto,然后是选择文件窗口本身)
  7. 等待加载的直接链接,将其复制到剪贴板,关闭选项卡,以及&#34;运行&#34;有声的通知
  8. 即使使用预制功能,我也很难找到有效的类/ ID。

    这可能很大程度上是因为我花了很长时间试图看看我是否可以使用applescript和javascript的某种组合将文件粘贴或拖放到浏览器中。我仍然认为这是一种避免做这么多击键事情和使用这么多延迟的方法。即使只是一种方式来拖放&#34;这会有很大的帮助。

    此外,当您单击按钮打开选择文件窗口时,页面不会刷新,所以我觉得html中有一些字段可以使用javascript设置为文件路径。我只是不知道它叫什么。

    如果您找到或找到另一种方法来打开&#34;文件选择窗口&#34;请告诉我。