Javascript 木偶师:等待N秒,然后继续下一行

Javascript 木偶师:等待N秒,然后继续下一行,javascript,node.js,chromium,puppeteer,browser-testing,Javascript,Node.js,Chromium,Puppeteer,Browser Testing,在《木偶戏》中,我想在进入下一行代码之前等待一段规定的时间 我试图在求值函数中放入一个setTimeout,但它似乎被忽略了 console.log('before waiting'); await page.evaluate(async() => { setTimeout(function(){ console.log('waiting'); }, 4000) }); console.log('after waiting'); 此代码不等待,只需在等待之前和之后编写

在《木偶戏》中,我想在进入下一行代码之前等待一段规定的时间

我试图在求值函数中放入一个
setTimeout
,但它似乎被忽略了

console.log('before waiting');
await page.evaluate(async() => {
  setTimeout(function(){
      console.log('waiting');
  }, 4000)
});
console.log('after waiting');
此代码不等待,只需在等待之前和之后编写


你知道怎么做吗?

你的语法不完整。
试试这个…

await page.evaluate(async() => {
    setTimeout(function(){
        console.log('waiting');
    }, 4000)
});

你可以用一点承诺函数

function delay(time) {
   return new Promise(function(resolve) { 
       setTimeout(resolve, time)
   });
}
然后,只要你想耽搁,随时打电话给它

console.log('before waiting');
await delay(4000);
console.log('after waiting');
如果必须使用Puppeter,请使用内置的waitForTimeout函数

await page.waitForTimeout(4000)
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
如果仍要使用page.evaluate,请在4秒钟后解决它。你没有解决任何问题

await page.evaluate(async() => {
    await new Promise(function(resolve) { 
           setTimeout(resolve, 1000)
    });
});

但是我想您可以简单地使用前两个示例。

您可以使用以下选项之一等待一秒钟:

await page.waitFor(1000);
await frame.waitFor(1000);
await new Promise(r => setTimeout(r, 1000));
或者,有许多木偶演员功能,包括内置的
延迟
选项,可用于在特定事件之间等待:

// Click Delay
// Time to wait between mousedown and mouseup in milliseconds. Defaults to 0.

await page.click('#example', {delay: 1000});
await frame.click('#example', {delay: 1000});
await elementHandle.click({delay: 1000});
await page.mouse.click(0, 0, {delay: 1000});

// Type Delay
// Time to wait between key presses in milliseconds. Defaults to 0.

await page.type('#example', 'Hello, world!', {delay: 1000});
await frame.type('#example', 'Hello, world!', {delay: 1000});
await elementHandle.type('Hello, world!', {delay: 1000});
await page.keyboard.type('Hello, world!', {delay: 1000});

// Press Delay
// Time to wait between keydown and keyup in milliseconds. Defaults to 0.

await elementHandle.press('Backspace', {delay: 1000});
await page.keyboard.press('Backspace', {delay: 1000});
试试这个功能

await page.waitForTimeout(4000)
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
使用它

  async function demo() {
    console.log('Waiting...');
    await sleep(3000);
    console.log('ok');
  }

  demo();
我一直在使用:

await page.waitForTimeout(3000);
其中3000是毫秒 这似乎对我有用。

现在已经被弃用了

现在建议在继续之前将脚本执行暂停给定的毫秒数:

await page.waitForTimeout(1000)

wait page.evaluate(async()=>{setTimeout(function(){console.log('waiting');},4000);});你的代码不对,上面是对的谢谢你的帮助,我编辑了这个问题,很抱歉犯了一个小错误,但我真的问如何等待你确定这是有效的吗?您不能在page.evaluate()中使用delay()。它不属于其上下文。我很确定delay函数和page.evaluate是不同的示例。
waitFor
已被弃用,请改用
waitForTimeout
。waitFor()已被删除。改为使用page.waitForTimeout(1000)