我试图设置一个AppleScript,它会为我处理一个稍微恼人的VPN登录过程。我使用Cisco AnyConnect,每次我必须重新登录时,我必须点击连接,接受证书警告,输入我的用户名,密码,然后选择正确的组,并接受另一个证书警告。
第二次证书警告我似乎无法绕过。
一些挖掘表明警告对话框由名为vpndownloader
的进程拥有,但奇怪的是 Applescript似乎确信它没有窗口且不存在!
我一直在使用辅助功能检查器获取窗口ID等,以使此脚本正常工作。对于这个特定的对话框,它看起来像这样(我尝试控制的实际对话框后面的辅助功能检查器)
当我试图获取窗口的ID以便我可以用它做事时,这种陌生感就出现了。
tell application "System Events" to windows of process "vpndownloader"
{}
空白。好的,也许这个过程的属性有用吗?
tell application "System Events" to properties of process "vpndownloader"
{has scripting terminology:false
bundle identifier:"com.yourcompany.vpndownloader"
file:alias "Macintosh HD:opt:cisco:anyconnect:bin:vpndownloader.app:" of application "System Events"
creator type:"????"
subrole:missing value
entire contents:{}
selected:missing value
application file:alias "Macintosh HD:opt:cisco:anyconnect:bin:vpndownloader.app:" of application "System Events"
orientation:missing value
role:"AXApplication"
accepts high level events:true
file type:"APPL"
value:missing value
position:missing value
id:1212712
displayed name:"vpndownloader"
name:"vpndownloader"
class:application process
background only:true
frontmost:false
size:missing value
visible:false
Classic:false
partition space used:0
role description:"application"
maximum value:missing value
architecture:"i386"
short name:"vpndownloader"
focused:missing value
minimum value:missing value
help:missing value
title:"vpndownloader"
accepts remote events:false
total partition size:0
description:"application"
accessibility description:missing value
enabled:missing value
unix id:9053}
(对于咯咯笑,请注意思科没有设置他们的捆绑标识符。)
没有内容,没有可见的窗口。尽管有对话,我还是站在我面前。
所以,一方面它显然有一个窗口(辅助功能检查员可以看到它),但AppleScript确信它没有。
如何以编程方式定位和访问此"幻像"对话框?
tell application "vpndownloader" to windows
error "vpndownloader got an error: Can’t get every window." number -1728 from every window
此应用程序的主题再次出现在存在与不存在之间的奇怪状态
tell application "vpndownloader" to properties
error "vpndownloader got an error: Can’t get every property." number -1728 from every property
它有一个菜单栏,但没有窗口。
tell application "System Events" to get UI elements of process "vpndownloader"
{menu bar 1 of application process "vpndownloader" of application "System Events"}
答案 0 :(得分:1)
你可以只使用击键。例如,当那个窗口出现时,你自己可能会在物理上击中"连接"按钮首先按下"标签"键更改聚焦按钮,然后按"空格键"选择聚焦按钮。
注意:您可能必须通过启用全键盘访问来启用此功能。通过转到系统首选项 - >键盘 - >快捷方式并检查"所有控件"来执行此操作在窗口的底部。
如果可以,那么你可以使用它。只要在发出命令时该窗口位于最前面,以下内容就会起作用。
tell application "System Events"
keystroke tab
delay 0.2
keystroke space
end tell
祝你好运。
答案 1 :(得分:0)
它适用于我(我使用anyconnect 3.1.06073)。
答案 2 :(得分:0)
所以我找到了一个不涉及脚本的问题的有趣解决方法。事实证明vpndownloader
完全是可选的,显然only serves the purpose of updating the client when an update is pushed from the upstream server
可以定义本地策略XML以禁用该过程。如果按下更新(连接将中止),这将导致破坏,但它至少允许登录脚本。
在Mac / Linux系统上,此文件位于/opt/cisco/anyconnect/AnyConnectLocalPolicy.xml
- I had to create one中,基于同一文件夹中的架构文件AnyConnectLocalPolicy.xsd
。如果它已经存在,只需编辑现有的。
关键字是<BypassDownloader>
,默认设置为false
。将其设置为true意味着下载器根本不运行,这意味着我试图访问的第二个对话框根本就不会出现!