javascript - 如何在 puppeteer 中等待选择器,但仅等待特定时间段?

标签 javascript node.js puppeteer

我正在从 youtube 上抓取数据并尝试获取评论数量。我试图获取包含该值的元素,但如果视频的注释被禁用,则该元素根本不存在,并且 waitForSelector() 会等待大约 30 秒,然后结束程序。我如何告诉 puppeteer 等待该元素(例如 5 秒),如果它不存在,则继续执行其余代码?

这是我正在使用的代码-

await page.waitForSelector("yt-formatted-string.count-text.style-scope.ytd-comments-header-renderer")
let commentCount = await (await (await page.$("yt-formatted-string.count-text.style-scope.ytd-comments-header-renderer")).getProperty("textContent")).jsonValue()

最佳答案

下面的代码您可以尝试等待 -

await page.waitForSelector(yourSelector, {timeout: TIMEOUT});

例如:

await page.waitForSelector(yourSelector, {timeout: 5000});

更新:

捕获timeouterror并执行某些操作 -

const {TimeoutError} = require('puppeteer/Errors');

try {
  await page.waitForSelector(yourSelector, {timeout: 5000});
} catch (e) {
  if (e instanceof TimeoutError) {
    // Do something if this is a timeout.
  }
}

引用:

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagewaitforselectorselector-options

关于javascript - 如何在 puppeteer 中等待选择器,但仅等待特定时间段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57471687/

相关文章:

php - jQuery - 使用 :contains for instant search with nested divs/classes?

node.js - 我应该在每个模型保存后关闭 Mongoose 连接吗?

javascript - Node.js Http.Request 回调 - 无法将数据传递给父函数

node.js - 如何高效/高性能地对多个集合进行多次查找和更新?

javascript - 使用 Jest 和 Puppeteer 进行并行支持

javascript - 如何在React.js中制作通用的 'filter'高阶组件?

javascript - 理解外部函数(数组)的返回函数(x)

javascript - Nodejs 基于不活动使 cookie 过期

javascript - 剧作家禁用网页缓存,以便我可以在向下滚动后获取新元素

puppeteer - 遍历链接(故事)并截取屏幕截图