我正在尝试检查是否存在具有特定类名的特定数量的元素。如果它们小于数字,请继续向下滚动。
这是我使用的代码。
await page.evaluate(() => {
while (await page.$$('.Ns6lhs9 _gfh3').length < counter) {
window.scrollBy(0, window.innerHeight);
}
});
这段代码包含在异步函数中。
不幸的是,我收到此错误消息:
C:\pup\test.js:27
while (await page.$$('.Ns6lhs9 _gfh3').length < counter) {
^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
答案 0 :(得分:3)
你需要标记你在async
内传递的函数,async
函数只是在词法上限定为函数本身。
您在其中调用的任何函数(在本例中为.forEach
或evaluate
)都需要自己标记为async
(假设它们支持它):
// Here
page.evaluate(async () => {
在您的特定情况下,您应该提取评估的 以外的循环以避免超时:
while(await page.$$('.Ns6lhs9 _gfh3').length < counter) {
await page.evaluate(() => window.scrollBy(0, window.innerHeight);
}
如果evaluate
花费太长时间,木偶操作者会超时,通常最好不要在evaluate
内执行昂贵的工作。
答案 1 :(得分:1)
试试这个:
await page.evaluate( async () => {
while (await page.$$('.Ns6lhs9 _gfh3').length < counter) {
window.scrollBy(0, window.innerHeight);
}
});
评估的回调需要异步前缀。