Maison >interface Web >js tutoriel >Comment implémenter des retards dans Puppeteer : setTimeout vs waitForTimeout ?

Comment implémenter des retards dans Puppeteer : setTimeout vs waitForTimeout ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-21 11:24:10474parcourir

How to Implement Delays in Puppeteer: setTimeout vs waitForTimeout?

Retarder l'exécution dans Puppeteer

Dans Puppeteer, attendre efficacement une durée spécifiée avant de poursuivre l'exécution peut être obtenu par diverses méthodes. Une approche courante consiste à utiliser la fonction setTimeout dans une fonction d'évaluation. Cependant, vous pouvez rencontrer des cas où setTimeout semble être contourné.

Pour résoudre ce problème, vous pouvez implémenter une fonction de délai personnalisée qui utilise une promesse. Définissez une fonction appelée delay(time), qui accepte un paramètre time et renvoie une promesse. Dans cette fonction, configurez un résolveur setTimeout pour suspendre l'exécution pendant la durée spécifiée.

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

Vous pouvez ensuite appeler delay(4000) chaque fois que vous souhaitez introduire un délai de 4 secondes.

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

Alternativement, Puppeteer fournit une fonction waitForTimeout intégrée qui simplifie le processus. Utilisez simplement page.waitForTimeout(4000).

Si vous insistez pour utiliser page.evaluate, vous pouvez résoudre la promesse après le délai souhaité. Le code suivant illustre cette approche :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn