2017-11-18 82 views
1

我一直在學習javascript瀏覽通過OpenStack並需要一點指導,我已經編寫了下面的代碼在Chrome中打開一個網站(我的默認瀏覽器),等待5秒,然後使用do/while循環刷新10次。新手 - 在Mac上的Javascript代碼來控制Chrome

它看起來不錯,因爲我想從終端運行它嗎?我一直在Chrome開發人員控制檯中運行此操作,並希望在我的Mac(10.9.5)上運行它,是否僅通過automator運行它?

非常感謝您的幫助!

var vcount = 0; 
 

 
function sleep(time) { 
 
    return new Promise((resolve) => setTimeout(resolve, time)); 
 
} 
 

 
do { 
 
    window.location.assign("https://www.w3schools.com"); 
 
    sleep(10000).then(() => {}); 
 
    vcount++; 
 
} 
 
while (vcount < 10);

+1

不,因爲'sleep(10000).then((=)=> {});'不會「暫停」 - 同樣,一旦你改變了當前位置,這個腳本將不再處於當前頁面,不管怎樣, –

回答

1

您需要使用等待真正暫停exectution:

(async function(){ 
    do { 
    window.location.assign("https://www.w3schools.com"); 
    await sleep(10000); 
    vcount++; 
    } while (vcount < 10); 
})(); 
+0

啊,謝謝喬納斯,我試圖找到那種類型的命令,我正在尋找'睡眠'和'等待',然後偶然發現了我用過的方法,我會用你的代碼! – PCF

0

有很多方法可以做到你想要什麼,@JonasW給了一個他們,這裏是一個替代方案:

function sleep(ms) { 
    const waitUntil = new Date().getTime() + ms; 
    while (new Date().getTime() < waitUntil) true; 
} 

這將在沒有await/Promise的情況下運行。

編輯

⚠️此外,你需要收拾一切功能,所以它不會凍結瀏覽器,因爲JavaScript是在一個線程中運行:

setTimeout(function() { 
    /* Your code */ 
}, 0) 
+0

謝謝亞瑟,是否有任何理由使用一種方法高於另一種?另外,如何進行單一動作有多種方法? – PCF

+0

@PCF是的,有一個原因:並非所有的瀏覽器都支持相同的功能,'await'和'Promise'是在最近版本的JavaScript中引入的,並且在最新版本的Chrome,Safari和Firefox上都受支持。如果您使用我的方法,它將在更多瀏覽器(如IE)上得到支持。而且,是的,在每種編程語言中,都有很多方法可以做同樣的事情。這就像同義詞。 –

+0

這是一個糟糕的做法,因爲它凍結了瀏覽器。 –