2012-04-13 72 views
1

的JavaScript/jQuery的鏈接我沒有做過太多使用AppleScript,但我想這個過程自動化。我有一個需要點擊按鈕的網站。然而,按鈕使用JavaScript/jQuery的/ AJAX實現像這樣:點擊使用AppleScript

<div id="divIdOfButton" class="someClass"> 
    <div class="divClassOfButton someOtherClass"> 
     <img src="imgOfButton"> 
    <div> 

... 

<script type="text/javascript"> 

$(document).ready(function() { 
$('#divIdOfButton .divClassOfButton).click(function() { 
... 
}} 

我想這沒有任何的運氣

tell application "Safari" 
    activate 
    delay 1 
    set URL of first document to "http://example.com/" 
    do JavaScript "document.getElementById('divIdOfButton').getElementByClassName('divClassOfButton')[0].click()" in front document 
end tell 

我做了一堆搜尋,但沒有找到任何東西。真的很感謝一些幫助。

+0

你能提供一個鏈接? – adayzdone 2012-04-13 14:02:40

+0

不幸的是這是一個需要會員網站.. – user500119 2012-04-13 14:10:30

+0

請問,如果我複製了整個$(的document.ready(....進入AppleScript的,說前面的工作文件中「做的Javascript」 ...「? – user500119 2012-04-13 14:12:03

回答

5

大多數瀏覽器會忽略到單擊事件處理程序,it seems直接調用(顯然是出於安全原因 - 不要讓我開始在瀏覽器中的JavaScript安全模型),所以你的電話click()少了點什麼都沒有。您可以通過JavaScript的事件分派機制觸發點擊事件(請參閱this questionanswer of mine)。但是,如果你已經針對網站幷包括jQuery的,所有你需要做的是:

tell application "Safari" 
    do JavaScript "$('#divIdOfButton .divClassOfButton').click();" in front document 
end tell 

如果在你的DIV類的幾個按鈕,你將需要添加過濾器表達式,即

tell application "Safari" 
    do JavaScript "$('#divIdOfButton .divClassOfButton :equ(0)).click();" in front document 
end tell 

,但你將失去querySelectorAll沒有這個的jQuery利用性能優勢(見jQuery API docs)。

通過觸發在Safari堆棧溢出站點收件箱下拉菜單進行測試。

+0

非常感謝。這正是我一直在尋找的內容:) – user500119 2012-04-13 15:43:22

+0

聲明'您無法從純JavaScript中觸發點擊事件「不正確(並且與您的鏈接相矛盾)。您可以酌情使用* dispatchEvent *(符合W3C)或* fireEvent *(IE兼容),或者如果瀏覽器支持HTML5,請調用[click method](http://www.w3.org/TR/html5/editing .html#dom-click)(例如'element.click()')。這種行爲不是特別一致的(例如某些版本的Firefox不會遵循鏈接上的綜合點擊),但是如果OP只關注某個特定的瀏覽器,則可能沒有問題。 – RobG 2012-05-01 06:04:02

+0

@RobG true,該句子不夠確切 - 「你不能直接在大多數瀏覽器中用普通的JavaScript調用點擊處理程序」會更接近該標記(如此編輯)。至於HTML5支持(重新)支持這種能力,但是,這似乎是不真實的,至少目前版本的OS X上的Safari,在我的實驗中,它忽略了直接調用點擊處理程序。 – kopischke 2012-05-01 16:02:02

-1

我不是一個Applescript用戶,但我可以立即告訴你getElementByClassName應該是getElementsByClassName - 複數中的「元素」。

+0

上面添加了完整的代碼感謝Kolink,試圖改變它,將不起作用.. – user500119 2012-04-13 14:53:02

+0

無論如何,在一個適當的當前的瀏覽器,你會好得多使用['querySelectorAll'(http://www.w3.org/TR/selectors-api/),這是速度極快且使用CSS選擇器的字符串*點菜*的jQuery但是,這不是問題 - 。參見[我的回答(http://stackoverflow.com/a/10143157/990363)瞭解詳情 – kopischke 2012-04-13 14:56:53

+0

與kopischke有同意 - 尤其是因爲'querySelector [所有]'在mor中支持瀏覽器比'getElementsByClassName'。 – 2012-04-13 14:59:52

1

我會檢查出UI Browser對於這些事情我很喜歡,我一直都在使用它。