在新标签页中打开多个链接,并通过带有木偶操纵者的循环切换焦点?

时间:2018-02-05 06:15:28

标签: javascript node.js puppeteer

我在一个页面中有多个链接,我想按顺序或一次性访问。我想要做的是打开各自新标签中的所有链接,并将页面作为所有页面的pdf。我如何与木偶戏实现同样的目标?

我可以使用DOM和href属性获取所有链接,但我不知道如何在新选项卡中打开它们访问它们然后关闭它们。

2 个答案:

答案 0 :(得分:8)

您可以循环打开新页面:

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const urls = [
      'https://www.google.com',
      'https://www.duckduckgo.com',
      'https://www.bing.com',
    ];
    const pdfs = urls.map(async (url, i) => {
      const page = await browser.newPage();

      console.log(`loading page: ${url}`);
      await page.goto(url, {
        waitUntil: 'networkidle0',
        timeout: 120000,
      });

      console.log(`saving as pdf: ${url}`);
      await page.pdf({
        path: `${i}.pdf`,
        format: 'Letter',
        printBackground: true,
      });

      console.log(`closing page: ${url}`);
      await page.close();
    });

    Promise.all(pdfs).then(() => {
      browser.close();
    });
  } catch (error) {
    console.log(error);
  }
})();

答案 1 :(得分:2)

要打开新标签页(激活),您只需要制作call to page.bringToFront()

<a>

我怀疑你有一系列网页,所以你可能需要调整上面的代码来满足这一要求。

至于从多个标签生成单个pdf,我很确定这是不可能的。我怀疑会有一个节点库可以将多个pdf文件合并为一个。

pdf-merge might be what you are looking for