Javascript 带木偶师的刮网环;等待仅在异步函数中有效;
我试图使用下面的代码在一个重复循环中检查qvc.com上的当前项目,但是在“const results=await…”行中得到“await仅在异步函数中有效” 这是我的密码: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
(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秒重新加载一次页面: