puppeteer:等待 N 秒,然后继续下一行
puppeteer: wait N seconds before continuing to the next line
在 puppeteer 中,我想等待定义的时间,然后再转到下一行代码。
我曾尝试将 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)
});
你可以使用一点promise函数,
function delay(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time)
});
}
然后,只要你想延迟就调用它。
console.log('before waiting');
await delay(4000);
console.log('after waiting');
如果必须使用 puppeteer,请使用内置的 waitForTimeout 函数。
await page.waitForTimeout(4000)
如果还想用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));
或者,有许多包含内置 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});
await new Promise(_func=> setTimeout(_func, 5000));
试试这个功能。
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 是毫秒
这似乎对我有用。
page.waitFor 现已弃用。
page.waitForTimeout 现在建议在继续之前暂停脚本执行给定的毫秒数:
await page.waitForTimeout(1000)
在 puppeteer 中,我想等待定义的时间,然后再转到下一行代码。
我曾尝试将 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)
});
你可以使用一点promise函数,
function delay(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time)
});
}
然后,只要你想延迟就调用它。
console.log('before waiting');
await delay(4000);
console.log('after waiting');
如果必须使用 puppeteer,请使用内置的 waitForTimeout 函数。
await page.waitForTimeout(4000)
如果还想用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));
或者,有许多包含内置 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});
await new Promise(_func=> setTimeout(_func, 5000));
试试这个功能。
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 是毫秒 这似乎对我有用。
page.waitFor 现已弃用。
page.waitForTimeout 现在建议在继续之前暂停脚本执行给定的毫秒数:
await page.waitForTimeout(1000)