2012-03-07 41 views
1

對不起,可能會令人困惑的標題。在Safari中通過Applescript大量使用Javascript時出現錯誤值錯誤

我的問題是,我想下載Apple的XCode命令行工具,而無需點擊單個按鈕。我想使用它來更快地設置與廚師合併的新開發人員工作站。

腳本和錯誤如下:

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

JavaScript的第17行得到正確執行,我看到一個警告信息。任何其他行不按預期執行。

我怎樣才能得到這個工作,是目前的Javascript沒有執行,除了這一行?

+0

幽默我:爲什麼不將文件下載到您擁有的服務器上,並通過靜態URL使其可以訪問工作站? – 2012-03-07 14:49:26

+1

P.S.在AppleScript中'缺少的值'不是一個錯誤,它是一個常量,相當於'null'或'undefined'。它只是表明消息(函數)沒有返回任何東西。 – 2012-03-07 15:04:14

+0

@Jordan託管它自己可能是最簡單的方法......我只是想確保它始終是最新的。這可能不是一個大問題,因爲軟件不會經常更新。 – 2012-03-07 15:47:06

回答

3

由於@Jordan聲明above,missing valuedo JavaScript返回並不表示錯誤。然而,你的代碼的幾個問題,不要停止工作遭罪:

  1. 不等待網頁試圖訪問窗體之前完全加載 - 因此你value分配和submit()呼叫進入虛空。你可以看中並嘗試等待一個匹配的窗口名稱,但一個簡單的delay將會做;
  2. 它試圖檢查所有找到的元素(atags.textContent)的文本內容而不是當前循環的(atags[i].textContent);
  3. 它試圖通過調用click()方法觸發click事件,大多數瀏覽器拒絕這樣做,表面上出於安全原因(請參閱this questionanswer of mine)。由於Apple不包括jQuery,這個問題並不像在我連接的答案中那麼簡單 - 然而,您可以用Protolicious'event.simulate.js一點代碼禮貌地模擬點擊事件。

下面的代碼會做你問什麼:

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命令行工具軟件包(準確地說是最上面的列表)已成功啓動。

相關問題