对于可能令人困惑的标题感到抱歉。
我的问题是我想下载Apple的XCode命令行工具,而无需点击单个按钮。我希望使用它来更快地设置与Chef相结合的新开发人员工作站。
脚本和错误如下:
tell application "Safari"
make new document at end of every document --> document "Ohne Titel"
set URL of document 1 to "https://developer.apple.com/downloads/index.action"
get name of document 1 --> "Ohne Titel"
do JavaScript "var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
head.appendChild(script);" in document 1 --> missing value
do JavaScript "alert('test')" in document 1 --> missing value
do JavaScript "document.forms['appleConnectForm']['accountname'].value = 'somename'" in document 1 --> missing value
do JavaScript "document.forms['appleConnectForm']['accountpassword'].value = 'somepassword'" in document 1 --> missing value
do JavaScript "document.appleConnectForm.submit();" in document 1 --> missing value
do JavaScript "var atags = document.getElementsByTagName('a')" in document 1 --> missing value
do JavaScript "for (var i=0; i<atags.length; i++){ if (atags.textContent=='Command Line Tools for Xcode'){ atags[i].click(); } }" in document 1 --> missing value
set name of window 1 to "Ohne Titel"
end tell
我在此处遇到的脚本和错误的更新:https://gist.github.com/1993352
第17行的Javascript正确执行,我看到一条警告消息。任何其他行都没有按预期执行。
我怎样才能使这个工作正常,除了这一行之外,当前的Javascript是否未被执行?
答案 0 :(得分:3)
正如@Jordan所说above,missing value
返回的do JavaScript
并不表示错误。但是,您的代码会遇到一些阻止其工作的问题:
value
分配和submit()
调用将进入无效状态。您可以尝试并尝试等待匹配的窗口名称,但只需要一个简单的delay
; atags.textContent
)的文本内容,而不是当前循环的元素(atags[i].textContent
); click
方法来触发click()
事件,表面上是出于安全原因(请参阅this question和answer of mine)。由于Apple不包含jQuery,因此回答问题并不像我链接的答案那样简单 - 但是,您可以使用Protolicious'event.simulate.js
提供一些代码来模拟click事件。以下代码将按您的要求执行:
tell application "Safari"
set loadDelay to 2 -- in seconds; test for your system
make new document at end of every document
set URL of document 1 to "https://developer.apple.com/downloads/index.action"
delay loadDelay
do JavaScript "_connectForm = document.forms.appleConnectForm;
_connectForm.accountname.value = 'your_accountname';
_connectForm.accountpassword.value = 'your_accountpassword';
_connectForm.submit();" in document 1
delay loadDelay
do JavaScript "var _atags = document.querySelectorAll('a');
for (var i=0; i<_atags.length; i++){
if (_atags[i].innerText.indexOf('Command Line Tools for Xcode') === 0){
_event = document.createEvent('MouseEvents');
_event.initMouseEvent('click', true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, _atags[i]);
_atags[i].dispatchEvent(_event);
break;
}
}" in document 1
end tell
使用我自己的帐户进行测试;下载最新的Xcode Command Line Tools软件包(确切地说 - 最上面列出的)已成功启动。