我正在macOS上使用Selenium,在Google Chrome中使用WhatsApp网络自动发送图像。该任务涉及上传图像,为此会出现系统(Finder(提示以选择文件。它是使用AutoIt在Windows中完成的。
我尝试查找如何在macOS中自动执行此任务,我相信AppleScript可以用于此任务。由于我没有GUI脚本方面的经验,因此任何帮助将不胜感激。
谢谢。
我能够在Stack Overflow的另一篇帖子中找到答案。我已经为遇到相同问题的任何人添加了答案。
tell application "System Events"
keystroke "G" using {command down, shift down}
delay 1
keystroke "/path/to/file"
delay 1
keystroke return
delay 1
keystroke return
delay 1
end tell
我不提倡GUI脚本,就像烧毁亚马逊一样,但它似乎是这项任务所必需的,我想为您提供一个GUI脚本的示例,该脚本尽最大努力最大程度地减少用户体验的不愉快,并旨在减少代码中GUI脚本最有可能动摇的弱点。
如果您知道文件的路径(我假设您在这种情况下会这样做,因为您的脚本会击键文件路径(,那么您可能会发现以下技术节省了几个步骤,并且在执行方式上感觉更优雅一些:
set filepath to "/path/to/image.jpg"
-- Copy file object to clipboard
set the clipboard to filepath as «class furl»
-- Make sure Chrome is in focus and the
-- active tab is a WhatsApp tab
tell application id "com.google.Chrome"
activate
if the URL of the active tab in the front window ¬
does not contain "web.whatsapp.com" then return
end tell
-- Paste the clipboard contents
-- and hit return (send)
tell application id "com.apple.SystemEvents"
tell (process 1 where it is frontmost) to tell ¬
menu bar 1 to tell menu bar item "Edit" to tell ¬
menu 1 to tell menu item "Paste" to set Paste to it
if (click Paste) = Paste then keystroke return
end tell
if (click Paste) = Paste
检查应该不需要延迟,因为它明确强制AppleScript在继续发出keystroke
之前评估click
命令。但是,我无法在所有可能的条件下对此进行测试,如果还有其他因素(例如 CPU 使用率或进程冻结(可能会让脚本有机会跳到前面,那么只需在then
之后插入一个小delay
,然后keystroke return
移动到它自己的行上。
如果您希望之后从剪贴板中删除文件对象,则只需添加为最后一行set the clipboard to
(并在单词"to"
之后将其留空,这将清除剪贴板的内容(。 当然,如果您使用剪贴板管理应用程序,这不会影响您可能拥有的任何剪贴板历史记录数据,而只会影响系统剪贴板的当前项目。