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

roi*_*tmi 2 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()
Run Code Online (Sandbox Code Playgroud)

PyS*_*aad 11

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

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.
  }
}
Run Code Online (Sandbox Code Playgroud)

参考:

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


lx1*_*412 5

尝试下面的代码,只需添加一个timeout选项

try {
    await page.waitForSelector("yt-formatted-string.count-text.style-scope.ytd-comments-header-renderer", {timeout: 5000 }); // 5s timeout
} catch (e) {
   // something wrong !!!!!!
}

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