新手 - 在Mac上的Javascript代码来控制Chrome
我一直在学习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);
您需要使用等待真正暂停exectution:
(async function(){
do {
window.location.assign("https://www.w3schools.com");
await sleep(10000);
vcount++;
} while (vcount < 10);
})();
啊,谢谢乔纳斯,我试图找到那种类型的命令,我正在寻找'睡眠'和'等待',然后偶然发现了我用过的方法,我会用你的代码! – PCF
有很多方法可以做到你想要什么,@JonasW给了一个他们,这里是一个替代方案:
function sleep(ms) {
const waitUntil = new Date().getTime() + ms;
while (new Date().getTime() < waitUntil) true;
}
这将在没有await
/Promise
的情况下运行。
编辑
⚠️此外,你需要收拾一切功能,所以它不会冻结浏览器,因为JavaScript是在一个线程中运行:
setTimeout(function() {
/* Your code */
}, 0)
谢谢亚瑟,是否有任何理由使用一种方法高于另一种?另外,如何进行单一动作有多种方法? – PCF
@PCF是的,有一个原因:并非所有的浏览器都支持相同的功能,'await'和'Promise'是在最近版本的JavaScript中引入的,并且在最新版本的Chrome,Safari和Firefox上都受支持。如果您使用我的方法,它将在更多浏览器(如IE)上得到支持。而且,是的,在每种编程语言中,都有很多方法可以做同样的事情。这就像同义词。 –
这是一个糟糕的做法,因为它冻结了浏览器。 –
不,因为'sleep(10000).then((=)=> {});'不会“暂停” - 同样,一旦你改变了当前位置,这个脚本将不再处于当前页面,不管怎样, –