web-dev-qa-db-ja.com

操り人形師:次の行を続ける前にN秒待つ

in puppeteerコードの次の行に進む前に、定義された時間待機します。

私はsetTimeoutを評価関数に入れようとしましたが、単に無視されるようです

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

このコードは待機せず、単に待機前および待機後と記述します。

これを行う方法を知っていますか?

23
Vivien Pipo

少しのpromise関数を使用できますが、

function delay(time) {
   return new Promise(function(resolve) { 
       setTimeout(resolve, time)
   });
}

その後、遅延が必要なときにいつでも呼び出します。

console.log('before waiting');
await delay(4000);
console.log('after waiting');

Puppeteerを使用する必要がある場合は、組み込みのwaitFor関数を使用します。

await page.waitFor(4000)

それでもpage.evaluateを使用する場合は、4秒後に解決します。あなたは何も解決していません。

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

しかし、最初の2つの例を単純に使用できると思います。

57
Md. Abu Taher

次のオプションのいずれかを使用して、-1秒間待機を指定できます。

await page.waitFor(1000);
await frame.waitFor(1000);
await new Promise(r => setTimeout(r, 1000));

あるいは、組み込みのdelayオプションを含む多くのPuppeteer関数があり、特定のイベント間で待機するのに便利です。

// 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});
10
Grant Miller

私は使用しています:

await page.waitFor(3000);

3000はミリ秒ですそして、それは私のために働いているようです。

この機能を試してください。

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

それを使用する

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

  demo();
1
Yordan
await new Promise(_func=> setTimeout(_func, 5000));
0
Xin