WaitForTarget上的操纵up超时

时间:2019-11-14 08:02:07

标签: javascript node.js puppeteer

我具有以下函数,该函数单击具有“ rel = _nofollow”属性的链接,等待新页面标签打开,然后加载内容,但是有时页面不会加载,而是循环到下一页,脚本挂起。

如何在这里设置超时时间?

let clickAndWaitForTarget = async (clickSelector, page, browser) => {
  const pageTarget = page.target();
  await page.click(clickSelector);
  const newTarget = await browser.waitForTarget(
    target => target.opener() === pageTarget
  );
  const newPage = await newTarget.page(); //get the page object
  await page.waitFor(10000); 

  return newPage;
};

我认为,如果我可以使其超时,然后可以返回false或某些内容来检查主要代码的成功或失败?

newpage = await clickAndWaitForTarget("a.someSelector", page, browser);

if(newpage){
  var url = await newpage.url();

...

谢谢!

编辑:我正在使用Puppeteer 2.0.0版

1 个答案:

答案 0 :(得分:0)

waitForTarget具有超时选项。默认值为30秒,也许对您来说很多。 您可以执行以下操作:

let clickAndWaitForTarget = async (clickSelector, page, browser) => {
  const pageTarget = page.target();
  await page.click(clickSelector);
  try {
    const newTarget = await browser.waitForTarget(
      target => target.opener() === pageTarget,
      { timeout: 3000} /*3 seconds instead*/
    );
    const newPage = await newTarget.page(); //get the page object
    await page.waitFor(10000); 
    return newPage;
  } catch {
    return null;
  }
};