Открыть несколько ссылок в новой вкладке и переключить фокус с петлей с кукловодом?

1

У меня есть несколько ссылок на одной странице, к которой я хотел бы получить доступ либо последовательно, либо сразу. Я хочу открыть все ссылки на своих новых вкладках и получить страницу как pdf для всех страниц. Как я могу достичь этого с кукловодом?

Я могу получить все ссылки с свойством DOM и href, но я не знаю, как их открыть на новой вкладке, чтобы получить доступ к ним, а затем закрыть их.

Теги:
puppeteer

2 ответа

6
Лучший ответ

Вы можете открыть новую страницу в цикле:

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

Чтобы открыть новую вкладку (активировать), вам просто нужно позвонить на page.bringToFront()

const page1 = await browser.newPage(); 
await page1.goto('https://www.google.com');

const page2 = await browser.newPage(); 
await page2.goto('https://www.bing.com');

const pageList = await browser.pages();    
console.log("NUMBER TABS:", pageList.length);

//switch tabs here
await page1.bringToFront();
//Do something... save as pdf
await page2.bringToFront();
//Do something... save as pdf

Я подозреваю, что у вас есть массив страниц, поэтому вам может потребоваться настроить вышеуказанный код, чтобы удовлетворить это.

Что касается создания одного PDF файла из нескольких вкладок, то я вполне уверен, что это невозможно. Я подозреваю, что будет библиотека узлов, которая может принимать несколько файлов PDF и сливаться в одну.

pdf-merge может быть тем, что вы ищете.

  • 0
    Могу ли я код, подобный приведенному выше, внутри цикла for, например: pageHrefs.foreach ((ele) => const page = await browser.newPage (); await page.goto (ele); // сделать что-то});
  • 0
    Вы можете зацикливаться, но увидеть этот ответ, stackoverflow.com/a/47292223/15410

Ещё вопросы

Сообщество Overcoder
Наверх
Меню