Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带木偶师的刮网环;等待仅在异步函数中有效;_Javascript_Node.js_Puppeteer - Fatal编程技术网

Javascript 带木偶师的刮网环;等待仅在异步函数中有效;

Javascript 带木偶师的刮网环;等待仅在异步函数中有效;,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我试图使用下面的代码在一个重复循环中检查qvc.com上的当前项目,但是在“const results=await…”行中得到“await仅在异步函数中有效” 这是我的密码: (async () => { // Init const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://www.qvc.com/con

我试图使用下面的代码在一个重复循环中检查qvc.com上的当前项目,但是在“const results=await…”行中得到“await仅在异步函数中有效”

这是我的密码:

(async () => {
    // Init
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.qvc.com/content/iroa.qvc.eastern.html');

    // Selectors
    const current_item_selector = '.galleryItem:first-of-type a';

    // Functions
    setInterval(function() { // Repeat every 5s
        const results = await page.$(current_item_selector);
        const item = await results.evaluate(element => element.title);
        console.log(item);
    }, 5000);
})();
更新:
setTimeout应该是setInterval这是我的错误,复制/粘贴错误。我在代码块中更新了它,感谢那些指出这一点的人。

setInterval中的函数也需要异步:

// Functions
    setInterval(async function() { // Repeat every 5s
        const results = await page.$(current_item_selector);
        const item = await results.evaluate(element => element.title);
        console.log(item);
    }, 5000);

错误与它所说的一模一样-您的
setTimeout
函数不是
async
setTimeout只运行一次,您的意思是setInterval吗?请做好准备,即使进行了更改,您也可能会遇到在setInterval中尝试
等待
操作的问题。请参见,您的浏览器将在第一次间隔之前关闭。在while循环中使用waitForTimeout可能会更好。不确定,但问题中的注释说他们需要每隔x秒重复一次。setTimeout将不是用于此的正确函数。问题还提到了“重复循环”,这只解决了部分问题。@AlexanderStaroselsky-你是对的,但答案解决了OP所问的错误,没有提到(尚未)未实现所需的功能。在我看来,这是另一个问题,但是我会编辑答案来解释它,谢谢你指出setInterval和setTimeout,这是我起草文章时的一个复制/粘贴错误。将异步添加到函数中是答案,但最终的预期效果尚未实现。我假设Puppeter应该在节点中模拟浏览器,但这似乎只是重复相同的结果,好像它只是一个静态页面加载。有没有更好的方法/软件包来实现这一点?@Hunter您可以尝试每隔5秒重新加载一次页面: