-2

我編寫了一個Greasemonkey腳本,每5分鐘在Google Apps腳本中單擊一個腳本的播放按鈕,以避免Google設置的執行時間限制。用Greasemonkey點擊Google Apps腳本中的播放按鈕?

當時間結束但我無法使用JavaScript單擊「運行」按鈕時,我能夠識別腳本。我一直在使用谷歌瀏覽器檢查按鈕,並嘗試了一些東西,但我無法使其工作。

任何人都可以幫我嗎?

我猜一下谷歌表的工具欄上的任何按鈕將是完全一樣的..

enter image description here

謝謝!

+1

替代greasemonkey使用時間驅動的觸發器。請參閱https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers –

+0

或捕獲超時錯誤並再次調用腳本的html。 –

+0

我低調這個問題,因爲它顯示零研究工作。你只是做了一個控制檯的截圖。你的代碼在哪裏不能像你期望的那樣工作?另請閱讀:http://stackoverflow.com/help/how-to-ask –

回答

0

你正以完全錯誤的方式接近這一點。您應該包含在腳本內部使用觸發器重新啓動執行的可能性。我會告訴你我是如何做到的。請記住,我的腳本非常大,它執行一個循環,我不得不記住它停止的循環中的位置,因此它可以繼續使用相同的數據。

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
// Purpose: Check if there is enough time left for another data output run 
// Input: Start time of script execution 
// Output: Boolean value if time is up 
function isTimeUp(start, need) { 
    var cutoff = 500000 // in miliseconds (5 minutes) 
    var now = new Date(); 
    return cutoff - (now.getTime() - start.getTime()) < need; 
} 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

這裏start很簡單,當您啓動腳本創建new Date()need只是我的腳本執行1循環所需的平均時間。如果循環沒有足夠的時間,我們將用另一個函數切斷腳本。

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
// Purpose: Store current properties and create a trigger to start the script after 1 min 
// Input: propertyCarrier object (current script execution properties) 
// Output: Created trigger ID 
function autoTrigger(passProperties, sysKeys) { 
    var sysProperties = new systemProperties(); 

    if (typeof sysKeys === 'undefined' || sysKeys === null) { 
    sysKeys = new systemKeys(); 
    } 

    var triggerID = ScriptApp.newTrigger('stateRebuild') 
          .timeBased() 
          .after(60000) 
          .create() 
          .getUniqueId(); 

    Logger.log('~~~ RESTART TRIGGER CREATED ~~~'); 

//-------------------------------------------------------------------------- 
// In order to properly retrieve the time later, it is stored in milliseconds 
    passProperties.timeframe.start = passProperties.timeframe.start.getTime(); 
    passProperties.timeframe.end = passProperties.timeframe.end.getTime(); 
//-------------------------------------------------------------------------- 

//-------------------------------------------------------------------------- 
// Properties are stored in User Properties using JSON 
    PropertiesService.getUserProperties() 
        .setProperty(sysKeys.startup.rebuildCache, JSON.stringify(passProperties)); 
//-------------------------------------------------------------------------- 

    Logger.log('~~~ CURRENT PROPERTIES STORED ~~~'); 
    return triggerID; 
} 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

此致可以更簡單,如果你不需要記住您停止(由目前的實施來看你不關心你是否從頭開始或沒有)。

您創建的觸發器應該瞄準主函數,或者如果您需要像我一樣傳遞數據,則需要具有單獨的啓動器函數以從用戶屬性獲取數據並將其傳遞。