javascript - WaitForTarget 上的 Puppeteer 超时

标签 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

最佳答案

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;
  }
};

关于javascript - WaitForTarget 上的 Puppeteer 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851964/

相关文章:

javascript - 如何使用node.js 访问cloudant 文档中的数据?

javascript - 纸.js : hitTest for obstructed items with mouse event?

javascript - 有没有办法使用Javascript实时获取传输到页面的文件总大小?

javascript - JS函数在onclick事件中不可见

node.js - 发送 Node 后无法设置 header

node.js - Npm 肯定不行

node.js - Puppeteer 错误 : Protocol error (Page. captureScreenshot):目标已关闭

node.js - 超过 30000 毫秒的 Puppeteer 导航超时

node.js - 当我与 Puppeteer(集群)交互时关闭页面

javascript - 如何在 Vue js x-template 上的 html 属性中解析字符串?